当 ssh 锁定时,如何才能摆脱它?

当 ssh 锁定时,如何才能摆脱它?

我经常从学校通过 ssh 进入家里的电脑,但通常当我换课并且我的电脑挂起时,管道就会中断。但是,ssh 只是锁定 - Ctrl+ cCtrl+zCtrl+d不起作用。

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

所以我的问题是,有没有一种简单的方法可以让 ssh 正常终止(即当管道“正常”失败时,它会退出并显示有关管道损坏的消息)?还是我必须弄清楚 PID 是什么并手动终止它?

答案1

常规键会在ssh会话期间转发,因此这些键均不起作用。相反,请使用转义序列。要终止当前会话,请依次输入Enter~.

(请记住,在国际键盘中,将~设置为组合字符,您必须按两次:Enter,,,,)~~.

Enter可以使用, ~,列出更多这样的转义序列?

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
     ~V/v - decrease/increase verbosity (LogLevel)
     ~^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.)

您可以通过点击 来关闭转义序列列表Enter

请注意,因为击中~~会导致ssh发送~而不是拦截它,所以你可以解决ssh通过点击嵌套连接~ 次。(这仅适用于~紧跟在 之后的 s Enter。)也就是说,Enter~~~~~.终止ssh5 层深度的会话,而保持其他 4 层不变。

答案2

您可能还想设置应用程序级保持活动通过 SSH 连接防止它会因为连接问题而冻结。我的~/.ssh/config包含以下内容:

Host *
ServerAliveInterval 15
# ServerAliveCountMax 3

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

与其他选项相反TCPKeepAlive,这是在加密通道内检查的,并且不可伪造。


值得注意的是,这些保持活动也有助于保持长时间怠速连接处于活动状态,即阻止您拥有半闭tcp 会话挂起数小时而未受到影响。

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

答案3

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

相关内容