如何的退出无响应的 SSH 连接

大家有时候会发现 ssh 挂在那里没有响应了,可能是客户端的问题,也可能是服务器端的问题,也可能是客户端和服务器之间的网络问题;可能是客户端电脑休眠后连接断了、可能是网络断了、可能是 WiFi 信号不好、可能是网络延迟大了、可能是服务器挂了、也可能是服务器上的 sshd 进程挂了,…,可能是技术问题,也可能是非技术问题,可以找出无数可能。

我常遇到或者说每天都遇到的情形是,离开办公桌前忘了退出 ssh 会话。工作的时候长时间 ssh 到服务器上,工作完盖上 Mac 走人,回家后发现那些没退出的 ssh 会话还挂在那里,无法退出、无法 Ctrl+C、无法做任何操作。我的粗暴做法通常是直接关闭 Terminal 后重新开一个新的;如果用的不是图形系统,没有窗口可以关闭,那还要启用另一个终端找到相关进程后 kill 掉,如果每天都要搞这么几次还是挺烦人的。今天无意中从同事那里学到了一个小技巧,在那些没退出的 ssh 会话里用 ~. “优雅” 的断开连接。

~.

查看一下 man 帮助文件发现已经有说明,惭愧的是用了这么多年 ssh 才发现有这么一招:

$ man ssh
...
ESCAPE CHARACTERS
     ...

     The supported escapes (assuming the default `~') are:

     ~.      Disconnect.

评论 (18 Comments)

  1. 没看懂。。

  2. Thanks!

  3. 即是说使用~. 来断开(disconnect).

  4. 学习了.以前都是修改ssh客户端的配置:给/etc/ssh/ssh_config添加ServerAliveInterval 60

  5. 多谢分享,不用白活几年

  6. mosh 也不错

  7. 学习了,,,貌似没太看明白,应该写上备注

  8. 我是用autossh连接的。。

  9. echo TMOUT=600 >> ~/.bashrc

    echo TMOUT=600 >> /etc/profile
    这是我在老外博客里看到的,设置一个超时的秒数,600秒后终端上没有任何操作便自动断开连接。

  10. 应该是把 export TMOUT=600 写进去……

  11. great!没次都粗暴关掉Terminal太傻了,这个方法好!

  12. 明天上午去测试一把

  13. 这招不错,赞一个。
    以前也是每次无响应就关闭那个终端窗口。

  14. 赞,以前太傻,学会这招很有用。

  15. 谢谢分享,~.果然有用,新手ubuntu。经常用ssh连接vps经常卡死到哪,我也是直接关闭终端重新打开终端的。现在有了~.就不用了。可可。

  16. 呔,这个叼!

  17. 必须先 按“回车” 换行 再 按“shift + ` ”再按 “. ”才行

  18. 大赞,困扰了好久,惬意,无与伦比的惬意!!!

发表评论