Я написал скрипт для автоматического входа на удаленный сервер. Данные для входа хранятся в базе данных.

/usr/bin/expect <<EOD
spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no $SSHUser@$SSHHost
match_max 100000
expect "*?assword:*"
send -- "$SSHPass\r"
send -- "\r"
expect eof
EOD

Это работает, он входит в систему успешно, но я не могу взаимодействовать. На сервер не отправляются нажатия клавиш.

1 ответ1

2

Почему ваш сценарий закрывает сокет

Всякий раз, когда ожидаемый сценарий достигает конца файла, он закрывает все порожденные процессы и завершает работу. Другими словами, в настоящее время он ведет себя как задумано.

Держать сокет открытым для взаимодействия

Чего не хватает, так это использования команды взаимодействий, когда вы видите командную строку. Например, после отправки вашего пароля:

expect {\$\s*} { interact }

В вашем конкретном случае вы могли бы просто позвонить в Interactive сразу же после отправки пароля, не дожидаясь запроса, но приведенный выше пример, как правило, является лучшей практикой, которая позволяет вам обрабатывать другие виды ситуаций, если вы решите это сделать.

Interact позволит вам делать то, что вы хотите: взаимодействовать с сеансом SSH. Это будет продолжаться до тех пор, пока вы не закроете соединение, и порожденный процесс не завершится.

Смотрите также

https://stackoverflow.com/questions/12236894/is-it-possible-to-automate-ssh-login-with-passwd-not-passphraseless-ssh/12237702#12237702

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .