暗无天日

=============>DarkSun的个人博客

如何退出无响应的ssh会话

我们都知道,在ssh session中按下 Ctrl-c 或者 Ctrl-z 是不会退出session本身的。

一般都是通过 Ctrl-d 或者 输入 exit 退出shell的方式来退出session,但若由于网络的原因导致整个session挂起怎么办呢? 这个时候ssh server无法对输入任何命令做出响应,难道只能等待session超时退出吗?

通过查看 ssh 的manpage,你会发现,ssh本身是支持escape character的:

Escape 字符
     如果启用了伪终端, ssh 能够通过 escape 字符支持一组功能.

     单独的波浪符可以用 ~~ 送出去, 只要后面不跟下面列举的字符,
     也可以把它直接送出去.  escape 字符必须接在换行(newline)后面,
     这样才具有特别含义.  在配置文件中可以用 EscapeChar 命令更改 escape 字符,
     在命令行上可以用 -e 选项更改.

     已支持的 escape 命令 (假设是默认的 ‘~’) 有:

     ~.      断开连接

     ~^Z     把 ssh 送到后台

     ~#      列出转发的连接 (forwarded connection)

     ~&      当等待转发的连接/X11会话结束时, ssh 在后台退出登录

     ~?      显示 escape 字符的列表

     ~B      发送 BREAK 到远程主机

     ~C      打开命令行 (仅用于 -L , -R 和 -D 选项增加端口转发)

     ~R      请求连接的重建(rekeying) (仅用于SSH协议第二版, 且对方支持)

     ~V      降低错误输出的详细程度

     ~v      提高错误输出的详细程度

     ~~      输入 ~ 本身

所以,要从卡死的ssh session中退出,只需要输入 ~.<RET> 就可以了