当它锁定时我如何突破ssh?

我经常在家里从学校进入我的盒子,但通常当我改变课程并且我的电脑暂停时,管道将被打破。 但是,ssh只是锁定 – Ctrl + cCtrl + zCtrl + d无效。

不得不重启我的终端很烦人,甚至更烦人的是必须关闭并重新创建一个新的屏幕窗口。

所以我的问题是,是否有一种简单的方法可以使ssh正常死亡(即当管道“正常”失效时它会退出并显示有关管道损坏的消息)? 或者我必须弄清楚PID是什么并手动杀死它?

普通密钥通过ssh会话转发,因此这些都不起作用。 而是使用转义序列。 要终止当前会话,请输入↵ ,.

可以使用Enter↵ ,?列出更多这些转义序列

 Supported escape sequences: ~. - terminate session ~B - send a BREAK to the remote system ~R - Request rekey (SSH protocol 2 only) ~# - list forwarded connections ~? - this message ~~ - send the escape character by typing it twice (Note that escapes are only recognized immediately after newline.) 

您可以通过按Enter键关闭Escape序列列表。

请注意,因为命中~~会导致ssh发送~而不是拦截它,所以你可以通过点击~ N次来解决N个嵌套的ssh连接。 (这只适用于直接跟随输入的 ~ s。)也就是说输入 ~~~~~ 终止ssh会话5层深,并保持其他4完整。

您可能还希望为SSH设置应用程序级保持活动 ,以防止它在连接问题上冻结。 我的~/.ssh/config包含这个:

 Host * ServerAliveInterval 15 # ServerAliveCountMax 3 

这使得ssh客户端每15秒发送一次应用程序级别的保持活动。 每当其中三个连续失败时(默认为ServerAliveCountMax ),客户端会将连接视为挂起并关闭它。

与另一个选项TCPKeepAlive ,这是在加密通道中检查的,不是可欺骗的。


值得注意的是,这些保持活动也有助于保持长时间闲置的连接,即防止半封闭的 tcp会话暂停几个小时。

如果您经常遇到此问题,我强烈建议您启用此function,但您也应该了解它可能带来的轻微安全风险。 如果攻击者知道空闲连接的间隔和内容,则已知明文攻击可能变得更容易。 这可能是默认情况下未启用它的原因。

正如geekosaur的回答所述,逃脱序列~. 将终止连接。

可以通过键入~?来显示转义序列的完整列表及其function~?

 Supported escape sequences: ~. - terminate connection (and any multiplexed sessions) ~B - send a BREAK to the remote system ~C - open a command line ~R - Request rekey (SSH protocol 2 only) ~^Z - suspend ssh ~# - list forwarded connections ~& - background ssh (when waiting for connections to terminate) ~? - this message ~~ - send the escape character by typing it twice (Note that escapes are only recognized immediately after newline.)