为什么interact不能一直停留在ssh登录状态?

Why interact can't remain in ssh login status?

我的 login.exp 脚本。

#!/usr/bin/expect
spawn ssh -p 1111 root@vps_ip
expect "*password" {send "password_for_my_vps\n"}
interact

expect login.exp将进入ssh并保持ssh登录状态

machine@local:~$ expect   login.exp
spawn ssh -p 1111 root@vps_ip
root@vps_ip's password: 
Last login: Mon Nov 12 06:32:28 2018
[root@localhost ~]# 

登录我的 vps 并在我的 vps 中保持登录状态。

更改 login.exp 脚本如下:

#!/usr/bin/expect
spawn ssh -p 1111 root@vps_ip  uptime
expect "*password" {send "password_for_my_vps\n"}
interact

唯一的区别是最后一个脚本有一个 uptime 生成命令。

machine@local:~$expect   /tmp/login.exp
spawn ssh -p 1111 root@vps_ip
root@vps_ip's password: 
02:19:33 up 7 days,  2:14,  0 users,  load average: 0.00, 0.00, 0.00
machine@local:~$

登录到我的 vps 并执行 uptime 命令,然后退出我的 vps,return 到我的本地控制台。
这里的interact不能留在我的vps控制台。

spawned 进程结束时,

interact 会 return。

对于 spawn ssh user@host uptimespawned ssh 命令在 uptime(运行ning 在远程服务器上)完成时完成, 然后 interact 也会 return.

就像您手动 运行 ssh user@host uptime 一样,在 uptime 之后也不会给您遥控器 shell 的提示(然后是 ssh) 完成。