Я хотел бы иметь сценарий оболочки для изменения IP-адреса удаленного компьютера с использованием SSH.
Проблема, с которой я сталкиваюсь, заключается в том, что для команд SSH и удаленных команд требуются пароли. Я использую функцию «ожидается» для обработки ввода пароля, и это работает хорошо по отдельности для каждого шага, но не в сочетании.
т.е. у меня есть отдельный скрипт на удаленной машине для изменения IP-адреса. Это работает при запуске вручную на удаленном компьютере.
#!/usr/bin/expect -f
set ipaddr [lindex $argv 0]
set password "mypassword"
set timeout 2
if {[llength $argv] == 0} {
send_user "Usage: ./set_ip.sh ipaddress/24\n"
exit 1
}
spawn sudo nmcli dev modify eth0 ipv4.addresses $ipaddr
expect {
password { send "$password\r" ; exp_continue }
timeout { send_user "\nFailed to get password prompt\n"; exit 1 }
eof exit
}
close
И у меня есть сценарий для выполнения SSH, затем вызовите приведенный выше удаленный сценарий
#!/usr/bin/expect -f
set target [lindex $argv 0]
set newipaddr [lindex $argv 1]
set password "mysshpassword"
set timeout 2
spawn ssh $target
expect {
password: {send "$password\r"}
timeout { send_user "\nFailed to get password prompt\n"; exit 1 }
eof exit
}
send "~/set_ip.sh $newipaddr/r"
send "exit\r"
close
Когда вызывается удаленный сценарийкажется, что все работает нормально, но запрос пароля после команды nmcli так и не был получен.
Если кто-то может посоветовать, где я иду не так, я был бы признателен.
Кроме того, этоВ первый раз я использовал bash, поэтому не стесняйтесь высказывать критические замечания.
Спасибо