Как я могу учесть сбой соединения, используя ожидаемый для автоматизации входа в систему SSH? - PullRequest
0 голосов
/ 14 июня 2011

У меня есть сценарий оболочки, который довольно хорошо работает для автоматизации моих соединений ssh ​​и всего остального, что я хотел бы сделать через ssh.Я очень недоволен результатами, однако, когда хост не может быть найден или если соединение отказано.Если хост не может быть найден, по истечении времени ожидания send выводит мой пароль на экран ... ничего хорошего.Я справился с этим, добавив бесконечный тайм-аут .Когда соединение отказано;однако я получаю сообщение о том, что в соединении было отказано, произошла ошибка при отправке и т. д., а также напечатан мой пароль.Есть ли способ сказать моему сценарию, что если точное ожидание не выполнено, то не приступайте к отправке, просто Ctrl + C?Ниже приведена соответствующая часть моего сценария оболочки: (кстати, используется в bash) Заранее спасибо.

    expect -c "
    spawn ssh $USER@$HOST
    expect -exact \"$USER@$HOST's password:\"
    send \"$PASS\r\"
    interact"

1 Ответ

1 голос
/ 26 июня 2011

Ответ - ожидать ключевое слово timeout. Если ни один из шаблонов не совпадает, то возникает условие timeout - конечно, вы не можете установить значение тайм-аута на -1: установите его разумным количеством секунд.

Вместо того, чтобы втиснуть скрипт большого размера в аргумент -c, поместите его в файл

#! /usr/local/bin/expect -f
set host [lindex $argv 0]
set user [lindex $argv 1]
set password [lindex $argv 2]
# or, foreach {host user password} $argv {break}

spawn ssh $user@$host
expect {
  -re {password: $} {send "$password\r"}
  timeout {error "ssh connection timed out!"}
}
interact
...