如果锁定ssh我怎么能突破?

341

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

让我的终端重新启动很烦人,更不用说关闭并重新创建一个新的屏幕窗口。

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

    
Wayne Werner 11.03.2011 - 17:22

3 答案

475

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

可以使用输入↵列出更多这些转义序列:

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.)

您可以点击输入来关闭转义序列列表。

请注意,因为点击 导致 ssh 发送 ~ 而不是拦截它,您可以解决 N 嵌套通过点击 N 次来 ssh 连接。 (这仅适用于直接跟随输入。)也就是说输入 < kbd>〜 终止 ssh 会话5层深度并保持其他4个完好无损。

    
给出答案 geekosaur 11.03.2011 - 18:18
51

您可能还希望为SSH设置应用级 keep-alives ,以防止阻止在连接问题上冻结。我的 ~/.ssh/config 包含:

Host *
ServerAliveInterval 15
# ServerAliveCountMax 3

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

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

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

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

    
给出答案 ulidtko 11.03.2011 - 19:51
39

如geekosaur的回答所述,转义序列 ~. 将终止连接。

输入 ~?

可以显示转义序列的完整列表及其功能
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.)
    
给出答案 scottl 15.03.2011 - 07:39

阅读有关标签的其他问题