0

我是新来的期望脚本并且有一个用例,我需要从我已经使用期望脚本完成 ssh 的机器上执行 ssh。这是我的代码片段

#!/usr/bin/expect -f
set timeout 60
spawn ssh username@machine1.domain.com

expect "Password: "
send "Password\r"

send "\r" # This is successful. I am able to login successfully to the first machine

set timeout 60
spawn ssh username@machine2.domain.com  #This fails

这需要一些时间并且失败说 ssh: connect to host machine2.domain.com port 22: Operation timed out。我知道 22 是运行 ssh 的默认端口,我可以通过为 ssh 提供 -p 选项来手动覆盖它。

如果我尝试在没有期望脚本的情况下独立 ssh,我会收到一个提示,要求我输入(是/否)。如果我在没有期望脚本的情况下直接执行 ssh,那么从哪里获取正确的端口。如果我不需要在 shell 上输入端口号,为什么在我使用期望脚本时需要输入端口号。

4

1 回答 1

5

那时,您不会产生新的 ssh:spawn 在您的本地计算机上创建一个新进程。您只需向远程服务器发送命令

#!/usr/bin/expect -f
set timeout 60
spawn ssh username@machine1.domain.com

expect "Password: "
send "Password\r"

send "\r" # This is successful. I am able to login successfully to the first machine

# at this point, carry on scripting the first ssh session:
send "ssh username@machine2.domain.com\r"
expect ...
于 2013-10-07T13:52:47.510 回答