ssh 是如何实现的exit' 终止会话?

ssh 是如何实现的exit' 终止会话?

在类似 的命令中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 -Mssh -S(或ControlMaster中的设置~/.ssh/config;请参阅man sshman ssh_config)使用连接共享时,就会出现这种情况。我认为 SSH 隧道也会使 SSH 会话保持活动状态,直到它们被明确关闭。

要真正终止 SSH 连接,您可以发送exit 控制命令使用ssh -O exit user@host。这将终止到 的所有共享 SSH 会话user@host

相关内容