Linux 修改基于expect的SSH脚本以在不支持';我不需要密码
当Linux机器在登录后请求密码时,以下expect脚本可以正常工作。但是我们的一些Linux机器不需要SSH密码(我们可以不用密码登录),因此我需要更改expect脚本以支持没有密码的机器。我该怎么做Linux 修改基于expect的SSH脚本以在不支持';我不需要密码,linux,tcl,ksh,expect,Linux,Tcl,Ksh,Expect,当Linux机器在登录后请求密码时,以下expect脚本可以正常工作。但是我们的一些Linux机器不需要SSH密码(我们可以不用密码登录),因此我需要更改expect脚本以支持没有密码的机器。我该怎么做 $ expect_test=`cat << EOF set timeout -1 spawn ssh $IP hostname expect { ")?" { send "yes\r" ; exp_continue }
$ expect_test=`cat << EOF
set timeout -1
spawn ssh $IP hostname
expect {
")?" { send "yes\r" ; exp_continue }
word: {send "pass123\r" }
}
expect eof
EOF`
$ expect -c "$expect_test"
在不需要密码的机器上运行时:
$ IP=10.17.18.6
$ expect -c "$expect_test"
spawn ssh 10.17.18.6 hostname
sh: /usr/local/bin/stty: not found
This computer system, including all related equipment, networks and network devices (specifically including Internet access),is pros
yes
Password:
Linux1_machine
$ IP=10.10.92.26
$ expect -c "$expect_test"
spawn ssh 10.10.92.26 hostname
sh: /usr/local/bin/stty: not found
Linux15_machine
expect: spawn id exp5 not open
while executing
"expect eof"
将超时值从-1更改为其他值,如果预期字符串未在给定的超时时间内显示,则这将导致expect转到下一行 如果未提示输入密码,则当前值,-1将导致其永久阻止 更新:
set timeout 5
spawn ssh $IP hostname
expect {
")?" { send "yes\r" ; exp_continue }
word: {send "pass123\r" }
eof {exit}
}
将超时值从-1更改为其他值,如果预期字符串未在给定的超时时间内显示,则这将导致expect转到下一行 如果未提示输入密码,则当前值,-1将导致其永久阻止 更新:
set timeout 5
spawn ssh $IP hostname
expect {
")?" { send "yes\r" ; exp_continue }
word: {send "pass123\r" }
eof {exit}
}
使用此expect命令:
expect {
")?" {send "yes\r"; exp_continue}
word: {send "pass123\r"; exp_continue}
eof
}
这样,如果在“password:”之前遇到EOF,脚本将正常运行。使用此expect命令:
expect {
")?" {send "yes\r"; exp_continue}
word: {send "pass123\r"; exp_continue}
eof
}
这样,如果在“password:”之前遇到EOF,脚本将正常运行。我将其设置为10,但仍然会出现错误-->expect:spawn id exp5 not open,同时在脚本中的超时行上方执行“expect EOF”Add exp_internal 1,并查看它的输出。还可以在第一个expect部分中添加eof{exit},在一行下面的新行上添加单词:not clear在哪里添加“eof”您可以用添加的eof更新我的脚本吗?我将其设置为10,但仍然在执行“expect eof”时出现错误-->expect:spawn id exp5 not open将exp_internal 1添加到脚本中超时行的正上方,并查看它的输出。另外,在第一个expect部分中添加eof{exit},在一行下面的新行上添加单词:不清楚在哪里添加“eof”,您可以用添加的eof更新我的脚本吗?您可能决定只发送一次密码。幸运的是,通过一点额外的逻辑,这很容易实现。您可能决定只发送一次密码。幸运的是,这很容易通过一些额外的逻辑来实现。