Скрипт Linux Shell (bash) для изменения IP-адреса удаленного компьютера с использованием SSH - PullRequest
0 голосов
/ 11 октября 2019

Я хотел бы иметь сценарий оболочки для изменения 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, поэтому не стесняйтесь высказывать критические замечания.

Спасибо

...