我是expect脚本的新手,并且有一个用例,在该用例中,我需要从已经使用expect脚本完成ssh的机器上执行ssh。这是我的代码片段
#!/usr/bin/expect -f
set timeout 60
spawn ssh [email protected] /cdn-cgi/l/email-protection
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 [email protected] /cdn-cgi/l/email-protection #This fails
这需要一些时间并且无法说
ssh:连接到主机 machine2.domain.com 端口 22:操作超时。我知道 22 是 ssh 运行的默认端口,我可以通过为 ssh 提供 -p 选项来手动覆盖它。
如果我尝试在没有期望脚本的情况下独立进行 ssh,我会收到一条提示,要求我输入(是/否)。如果我直接执行 ssh 而无需期望脚本,那么从哪里获取正确的端口。如果我不需要在 shell 上输入端口号,那么如果我使用 Expect 脚本,为什么需要输入端口号。
到那时,您不会生成新的 ssh:spawn 在您的本地计算机上创建一个新进程。您只需向远程服务器发送命令
#!/usr/bin/expect -f
set timeout 60
spawn ssh [email protected] /cdn-cgi/l/email-protection
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 [email protected] /cdn-cgi/l/email-protection\r"
expect ...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)