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