Почему взаимодействие не может оставаться в состоянии входа в систему ssh? - PullRequest
0 голосов
/ 14 ноября 2018

Мой скрипт 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, вернитесь к моей локальной консоли.
Здесь interact не может остаться в моей консоли vps.

1 Ответ

0 голосов
/ 14 ноября 2018

interact вернется, когда завершится процесс spawn ed.

Для spawn ssh user@host uptime, команда spawn ed ssh завершится, когда uptime(работает на удаленном сервере) завершается, и затем interact также возвращает.

Это похоже на то, когда вы вручную запускаете ssh user@host uptime, который также не выдаст вам приглашение удаленной оболочки после uptime (а затем ssh) заканчивается.

...