使用expect脚本从远程计算机执行ssh

使用expect脚本从远程计算机执行ssh,ssh,expect,Ssh,Expect,我不熟悉expect脚本,并且有一个用例,在这个用例中,我需要从一台已经使用expect脚本完成了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

我不熟悉expect脚本,并且有一个用例,在这个用例中,我需要从一台已经使用expect脚本完成了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:连接到主机2.domain.com端口22:操作超时。我知道22是ssh运行的默认端口,我可以通过为ssh提供-p选项来手动覆盖它


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

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

#/usr/bin/expect-f
设置超时60
繁殖sshusername@machine1.domain.com
应为“密码”:
发送“密码\r\n”
发送“\r”#此操作成功。我能够成功登录到第一台机器
#此时,继续编写第一个ssh会话的脚本:
发送“ssh”username@machine2.domain.com\r“
期待。。。

在这一点上,您不需要生成新的ssh:spawn在本地机器上创建一个新进程。您只需向远程服务器发送一个命令

#/usr/bin/expect-f
设置超时60
繁殖sshusername@machine1.domain.com
应为“密码”:
发送“密码\r\n”
发送“\r”#此操作成功。我能够成功登录到第一台机器
#此时,继续编写第一个ssh会话的脚本:
发送“ssh”username@machine2.domain.com\r“
期待。。。

我睡了一个好觉才明白自己在搞什么鬼。我还没来得及修改剧本,你就已经回答了。只是修改了第二次尝试ssh到send而不是spawn,并且成功了。谢谢。我睡了个好觉才明白我在搞什么鬼。我还没来得及修改剧本,你就已经回答了。只是修改了第二次尝试ssh到send而不是spawn,并且成功了。谢谢