我经常从学校在家放到箱子里,但是通常当我换课并且计算机挂起时,管道会坏掉。但是,ssh只是锁定- Ctrl+ c,Ctrl+ z和Ctrl+ d无效。
必须重新启动终端很烦人,而不得不关闭并重新创建新的屏幕窗口更令人烦恼。
所以我的问题是,有没有一种简单的方法可以使ssh正确终止(即,当管道“正常”发生故障时,它将退出并显示有关管道损坏的消息)?还是我必须找出PID是什么并手动将其杀死?
screen -x
:P
我经常从学校在家放到箱子里,但是通常当我换课并且计算机挂起时,管道会坏掉。但是,ssh只是锁定- Ctrl+ c,Ctrl+ z和Ctrl+ d无效。
必须重新启动终端很烦人,而不得不关闭并重新创建新的屏幕窗口更令人烦恼。
所以我的问题是,有没有一种简单的方法可以使ssh正确终止(即,当管道“正常”发生故障时,它将退出并显示有关管道损坏的消息)?还是我必须找出PID是什么并手动将其杀死?
screen -x
:P
Answers:
普通密钥在ssh
会话中转发,因此这些密钥都不起作用。而是使用转义序列。杀当前会话命中随后Enter ↵,~,.。
多种这些转义序列可与列出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。
注意,由于命中~~导致ssh
发送~
而不是拦截它,因此您可以通过命中N次来解决N个嵌套ssh
连接。(这仅适用于直接跟随的。)也就是说,终止会话的深度为5层,并保持其他4层不变。~ ~enterenter~~~~~.ssh
EscapeChar ~
的/etc/ssh/ssh_config
(或者~/.ssh/ssh_config
,如果你喜欢)。
Enter
~
~
.
由于通过您的SSH会话~
~
发送文字~
,因此第二个SSH会话将以单个波浪号的形式接收该文字,并将其解释.
为转义的一部分。要发送到第5个嵌套ssh会话,只需在转义序列中使用5个波浪号即可。
您可能还想为SSH 设置应用程序级保持活动,以防止它因连接问题而冻结。我~/.ssh/config
包含:
Host *
ServerAliveInterval 15
# ServerAliveCountMax 3
这使ssh客户端每15秒发送一次应用程序级的keep-alive。每当其中三个连续失败时(默认设置为ServerAliveCountMax
),客户端就会将连接视为已挂起并关闭连接。
与其他选项相反TCPKeepAlive
,此选项在加密通道中被检查并且不可欺骗。
要注意的是,这些保持活动状态还有助于保持长时间空闲的连接保持活动状态,即防止您半小时关闭 tcp会话挂起。
我强烈建议您定期运行此功能,但是您也应该知道它可能带来的轻微安全风险。一个已知明文攻击,如果攻击者知道了间隔和空闲连接的内容可能会变得更加容易。这可能是默认情况下未启用它的原因。
%)
ServerAliveInterval
为1以便立即检测到丢失的连接的原因?
Host
。另外,“诸如高级加密标准之类的现代密码目前不易受到已知明文攻击。” (通过您添加的链接)...
如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.)