我经常从学校 ssh 到我家的盒子,但通常当我换班并且我的电脑挂起时,管道会坏掉。但是,ssh 只是锁定 - Ctrl+ c,Ctrl+z和Ctrl+d无效。
不得不重启我的终端很烦人,更烦人的是不得不关闭并重新创建一个新的屏幕窗口。
所以我的问题是,有没有一种简单的方法可以让 ssh 正常死掉(即当管道“正常”失败时,它会退出并显示有关管道损坏的消息)?还是我必须弄清楚PID是什么并手动杀死它?
我经常从学校 ssh 到我家的盒子,但通常当我换班并且我的电脑挂起时,管道会坏掉。但是,ssh 只是锁定 - Ctrl+ c,Ctrl+z和Ctrl+d无效。
不得不重启我的终端很烦人,更烦人的是不得不关闭并重新创建一个新的屏幕窗口。
所以我的问题是,有没有一种简单的方法可以让 ssh 正常死掉(即当管道“正常”失败时,它会退出并显示有关管道损坏的消息)?还是我必须弄清楚PID是什么并手动杀死它?
普通密钥通过
ssh
会话转发,因此这些都不起作用。相反,请使用转义序列。杀死当前会话随后命中Enter,,,~。.(请记住,在
~
设置为作曲字符的国际键盘中,您必须敲击两次:Enter, ~, ~, .)更多这些转义序列可以用Enter, ~,列出?:
您可以通过点击关闭 Escape 序列列表Enter。
请注意,由于点击~~会导致
ssh
发送~
而不是拦截它,因此您可以通过点击N次来处理N个嵌套ssh
连接。(这仅适用于直接跟在 . 之后的 s 。)也就是说,终止5 层深度的会话并保持其他 4 层不变。~ ~EnterEnter~~~~~.ssh
您可能还想为 SSH设置应用程序级别的 keep-alives ,以防止它因连接问题而冻结。我的
~/.ssh/config
包含这个:这使得 ssh 客户端每 15 秒发送一次应用程序级保持活动。每当其中三个连续失败(默认值
ServerAliveCountMax
)时,客户端将连接视为挂起并关闭它。与另一个选项相反
TCPKeepAlive
,这是在加密通道中检查的并且不可欺骗。值得注意的是,这些保持活动还有助于,嗯,保持长时间空闲的连接,即防止您将半关闭的tcp 会话挂起几个小时而不受影响。
如果您经常遇到此问题,我强烈建议您打开此功能,但您也应该了解它可能带来的轻微安全风险。如果攻击者知道空闲连接的时间间隔和内容,已知明文攻击可能会变得更容易。这可能是默认情况下未启用它的原因。
正如 geekosaur 的回答中所述,转义序列
~.
将终止连接。转义序列的完整列表以及它们的作用可以通过键入来显示
~?
: