在类似 的命令中ssh <destination> true
,ssh 在目标上执行命令,true
然后终止会话。运行时ssh <destination> exit
,什么会启动会话终止?是像其他命令一样的 ssh 程序本身,还是exit
目标执行的命令本身?
SSH 手册说,The session terminates when the command or shell on the remote machine exits and all X11 and TCP connections have been closed.
答案1
exit
远程 shell 执行的命令将终止该 shell 。在执行时true
,远程 shell 将由于没有任何进一步的命令要执行而终止,但exit
即使之后有进一步的命令(如在任何脚本中)也会终止它。
在 SSH 会话的简单情况下仅有的对于执行一组命令(不建立隧道或使用连接共享),会话将在远程 shell 终止时终止,无论如何远程 shell 终止(由于exit
某种错误,或者接收到信号HUP
,或者只是到达脚本末尾)。
请注意,手册中说“[...]并且所有 X11 和 TCP 连接已关闭”。这意味着联系可能不会仅仅因为远程而终止壳已终止。例如,当您使用ssh -M
和ssh -S
(或ControlMaster
中的设置~/.ssh/config
;请参阅man ssh
和man ssh_config
)使用连接共享时,就会出现这种情况。我认为 SSH 隧道也会使 SSH 会话保持活动状态,直到它们被明确关闭。
要真正终止 SSH 连接,您可以发送exit
控制命令使用ssh -O exit user@host
。这将终止到 的所有共享 SSH 会话user@host
。