*Пожалуйста, не нагромождайте и не говорите мне просто использовать SSH-ключи. Если вас раздражает, что я делаю это именно так, притворитесь, что вместо этого я пытаюсь подключиться через telnet. :-) *
Я использую сценарий ожидания для запуска некоторых рутинных команд на наборе серверов, находящихся под моим контролем, через ssh. Сценарий должен запускать набор команд (например, svn update ~/folderx\r") на каждой из машин. Мой текущий скрипт делает все, что я хочу, ... иногда. В других случаях он выходит из ssh-соединения до его завершения. из нескольких последних команд.
Любые мысли о том, как я могу сохранить соединение до тех пор, пока все команды не будут выполнены? Приведенный ниже код успешно входит в систему, успешно выполняет первые две команды или около того (обновление ap-get и одно из обновлений svn), а затем отключается.
#!/usr/bin/expect -f
spawn ssh username@ipaddress
set timeout -1
expect "Are you sure you want to continue connecting" {send "yes\r"; exp_continue} "password:" {send "*******\r"; exp_continue
} "username@machine" {send "sudo apt-get update\r"}
expect "password" {send "*******\r"; exp_continue} "username@machine" {send "sudo svn update ~/folder1\r"}
expect "password" {send "*******\r"; exp_continue} "username@machine" {send "sudo svn update ~/folder2\r"}
expect "password" {send "*******\r"; exp_continue} "username@machine" {send "sudo svn update ~/folder3\r"}
expect "password" {send "*******\r"; exp_continue} "username@machine" {send "sudo reboot\r"}
close
send "yes"
- person glenn jackman   schedule 13.07.2010