ssh 锁定时如何突破?

Way*_*ner 422 ssh

我经常从学校 ssh 到我家里的盒子,但通常当我换课并且我的电脑挂起时,管道会被打破。但是, ssh 只是锁定 - Ctrl+ cCtrl+zCtrl+d没有效果。

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

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

gee*_*aur 599

普通密钥通过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.)
Run Code Online (Sandbox Code Playgroud)

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

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

  • 对于`~` 是[死键](http://en.wikipedia.org/wiki/Dead_key) 的键盘布局,按键顺序是`Enter` `~` `Space` `.`。 (48认同)
  • @Hitechcomputergeek `Enter` `~` `~` `.` 由于 `~` `~` 通过您的 SSH 会话发送文字 `~`,第二个 SSH 会话将其作为单个波浪号接收并解释`.`作为逃跑的一部分。要发送到第 5 个嵌套的 ssh 会话,只需在转义序列中使用 5 个波浪号。 (6认同)
  • 请注意,您需要取消注释`/etc/ssh/ssh_config`(或`~/.ssh/ssh_config`,如果您愿意)中的行`EscapeChar ~`。 (5认同)
  • 改变生活;) (5认同)
  • 我以前怎么没听说过这个?这些转义序列甚至可以动态更改端口转发,这是我经常需要的。我的心彻底崩溃了 (2认同)

uli*_*tko 61

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

Host *
ServerAliveInterval 15
# ServerAliveCountMax 3
Run Code Online (Sandbox Code Playgroud)

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

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


值得注意的是,那些保持连接也有助于,嗯,保持长时间空闲的连接有效,即防止您将半关闭的tcp 会话挂起数小时而不受影响。

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

  • 安全原因。您可以去喝酒并打开 ssh sessio,而您在过去 20 年与您一起工作的实验室伙伴可能会使用您的会话来劫持服务器并摧毁它……而您在 10 分钟的休息时间喝酒。 (3认同)
  • 您还可以用 Mosh(移动外壳)替换 SSH。Mosh 通过 SSH 连接到服务器,然后建立一个基于 UDP 的通道,可以抵御连接问题。Mosh 还有一个本地回显,因此即使服务器没有应答,您也可以看到您正在输入的内容。当击键被传递时,Mosh 标记回显的文本。https://mosh.mit.edu/ (3认同)
  • @CYREX,嗯?默认情况下关闭选项如何防止您拥有不公平的实验室合作伙伴?`%)` (2认同)
  • @gertvdijk:谢谢。对我来说,即使没有 `Host` 行它也能工作。此外,“高级加密标准等现代密码目前不易受到已知明文攻击。” (来自您添加的链接)... (2认同)

sco*_*ttl 46

如 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.)
Run Code Online (Sandbox Code Playgroud)

  • 你不,在它打印转义序列列表后,它准备接受下一个。 (4认同)