如何退出无响应的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> 就可以了
