为什么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 uptime
,spawned ssh
命令在 uptime
(运行ning 在远程服务器上)完成时完成, 然后 interact
也会 return.
就像您手动 运行 ssh user@host uptime
一样,在 uptime
之后也不会给您遥控器 shell 的提示(然后是 ssh
) 完成。
我的 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控制台。
interact
会 return。
对于 spawn ssh user@host uptime
,spawned ssh
命令在 uptime
(运行ning 在远程服务器上)完成时完成, 然后 interact
也会 return.
就像您手动 运行 ssh user@host uptime
一样,在 uptime
之后也不会给您遥控器 shell 的提示(然后是 ssh
) 完成。