Ожидается команда - Unix.

Я использую функцию «ожидается» для автоматизации аутентификации по ssh паролю. Когда я запускаю сценарий в SunOS, я обнаруживаю, что порожденный процесс ssh завершается после завершения приведенного ниже сценария. Это не так в Linux. Как мы этого избежать? Должны ли мы как-то игнорировать сигнал SIGCHLD? В любом случае можно ли с помощью этого сценария определить, успешен ли порожденный процесс, и сообщить об ошибке, если таковые имеются?

#!/usr/local/bin/expect -f

set password blah-blah
spawn ssh -NfL 8002:<test domain>:22 test@testdomain.com
expect "* password:*"
send -- "$password\r"
send -- "\r"
expect EOF

-Karthik

1
задан Kartlee 6 August 2010 в 07:03
поделиться

2 ответа

Вместо того, чтобы помещать команду ssh в фоновый режим, вы можете поместить ожидаемый сценарий в фоновый режим:

#!/usr/local/bin/expect -f

if {[fork] != 0} exit
disconnect

set password blah-blah
spawn ssh -NL 8002:localhost:22 test@testdomain.com
expect {
    EOF {exit 1}
    "assword:" {}
}
send -- "$password\n"
send -- "\n"
expect EOF
wait

У меня работает в Linux. По крайней мере, на этапе настройки остановить его сложнее. Мне пришлось kill -9 , чтобы остановить ожидаемый сценарий. Что, вероятно, потребует убийства и процесса ssh.

1
ответ дан 2 September 2019 в 22:27
поделиться

Если вы используете ssh-ключи, вам не нужно кодировать пароли в сценариях оболочки.

Вы даже можете зашифровать ключ парольной фразой и использовать ssh-agent для управления ключом за вас - вы разблокируете свой ключ утром, запускаете туннель, а затем забываете свой ключ, когда вы идете на обед, разблокируете ключ днем ​​и снова забываете его, когда идете домой ночью. Нет волшебного шлюза на диске к удаленным машинам.

1
ответ дан 2 September 2019 в 22:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: