我经常从学校通过 ssh 进入家里的电脑,但通常当我换课并且我的电脑挂起时,管道就会中断。但是,ssh 只是锁定 - Ctrl+ c、Ctrl+z和Ctrl+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~~~~~.终止ssh
5 层深度的会话,而保持其他 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.)