我正在通过SSH连接到服务器,以使用以下命令将消息发送到套接字服务器:




建立连接后,我编写消息并发送,但无法退出文本模式。仅允许我输入更多文本。

是否存在允许我返回命令模式的命令或按键组合?

#1 楼


如何退出SSH连接?

两种方法:

通常会退出Shell会话,例如:

使用shell内置命令exit,然后按Enter或



(如果有)连接不良并且外壳无响应,请按Enter键,然后键入~.,然后ssh应该立即关闭并返回命令提示符。

第一个选项应该很直观,但是我们怎么知道后一种选择?
我们可以通过仔细阅读手册页来学习此信息。
 $ man ssh
 

为我们提供了帮助SSH文档中包含以下转义字符部分:
 
ESCAPE CHARACTERS
     When a pseudo-terminal has been requested, ssh supports a number of
     functions through the use of an escape character.

     A single tilde character can be sent as ~~ or by following the tilde by
     a character other than those described below.  The escape character
     must always follow a newline to be interpreted as special.  The escape
     character can be changed in configuration files using the EscapeChar
     configuration directive or on the command line by the -e option.

     The supported escapes (assuming the default ‘~’) are:

     ~.      Disconnect.

     ~^Z     Background ssh.

     ~#      List forwarded connections.

     ~&      Background ssh at logout when waiting for forwarded connection
             / X11 sessions to terminate.

     ~?      Display a list of escape characters.

     ~B      Send a BREAK to the remote system (only useful if the peer sup‐
             ports it).

     ~C      Open command line.  Currently this allows the addition of port
             forwardings using the -L, -R and -D options (see above).  It
             also allows the cancellation of existing port-forwardings with
             -KL[bind_address:]port for local, -KR[bind_address:]port for
             remote and -KD[bind_address:]port for dynamic port-forwardings.
             !command allows the user to execute a local command if the
             PermitLocalCommand option is enabled in ssh_config(5).  Basic
             help is available, using the -h option.

     ~R      Request rekeying of the connection (only useful if the peer
             supports it).

     ~V      Decrease the verbosity (LogLevel) when errors are being written
             to stderr.

     ~v      Increase the verbosity (LogLevel) when errors are being written
             to stderr.
 

exit与ssh没什么特别的,只是一种退出外壳程序的方法,该方法导致关闭ssh会话:
您想知道自己在做语义上正确的事情,并且知道它可以工作。然后后来“修复”。继续支持在语义上正确的事情。

评论


我觉得“我们怎么知道”部分没有特别的帮助,因为对我而言,这意味着存在某种显而易见的解决方案,而当我觉得“手动ssh ”找到如何断开连接。例如,我如何找到“出口”?我同意最好在可能的情况下再次检查手册页。

–亚历山大·普里查德(Alexander Pritchard)
17-10-11在15:49

@AlexanderPritchard我已经更新了答案,以更仔细地解释我们在这里所做的事情。如果您发现手册页难以理解,向维护者提出问题,或者甚至更好,请提交具有((不合格))改进的请求请求。

–亚伦·霍尔
17-10-11在17:01



从理论上讲,这听起来不错,但是在实践中,许多人都在努力寻找如何导航这些命令的方法,因为即使知道如何查找所需的信息,也会假设人们没有上下文。向维护人员提出问题并提交具有改进功能的拉取请求远远不止于此。我并不认为手册页很有用,但是如果它们确实像某些人认为的那样有用,那么我就不会使用Stack Exchange。我想明确地说,我认为您的回答很好,人们应该检查手册页,但是它们并不是全部有用。

–亚历山大·普里查德(Alexander Pritchard)
17-10-12在17:54



“如果它们确实像某些使它们看起来一样有用,那么我就不会使用Stack Exchange。”我同意,这就是为什么我尝试编写好的答案。引用和引用参考资料来源并不是为了使任何人都因为从未阅读过该参考资料而感到愚蠢或不好,而是为了提供进一步的证据来证明可能是事实的事实断言,并告知用户更多相关信息可以被存储。您想知道自己在做语义上正确的事情,并且知道它可以工作。

–亚伦·霍尔
17-10-12在18:20

有时我在进入exit之后必须按Ctrl-c,这是正常现象吗?

–警报
20 Jul 15 '13:21

#2 楼

简短的答案:类型exit

如果这不起作用,那么...

SSH转义字符和断开顺序

大多数SSH实现都实现了交互式会话的转义字符,类似于telnet的Ctrl-]组合。 SSH的默认转义字符是~,在行的开头输入。在远程端,您可以输入exit,然后输入点~。为了确保在输入行的开头输入转义字符,应首先按Enter。
因此,以下序列在大多数情况下将终止SSH会话:

Enter〜。

其他转义序列

例如,OpenSSH除了.之外还提供其他转义序列。在会话期间输入~.应该会给您一个列表。一些示例:


~?跟着~暂停了会话,

Ctrl-Z直接将其置于后台,给出此会话中转发连接的列表。
如果只想在行首输入波浪号,则必须将其翻倍:~&

可以使用命令行选项~#更改转义字符。如果设置特殊值~~,则会禁用转义并且会话是完全透明的。

另请参见-e命令行下ssh上的OpenBSD手册页(从www.openssh.org进行引用)。选项

评论


当您使它变得无用的复杂时,为什么要使其简单?

– MariusMatutiae
2014年6月6日12:14

@MariusMatutiae OP请求一种情况,即没有远程shell可以进入exit或Ctrl-D,而只是一个侦听过程。我明确指出,我的解决方案适用于卡住且无法退出的会话。我试图进一步澄清这一点,希望现在可以更容易地看到。

–杜布
2014年6月10日9:47



我很怀疑,但是〜。没有空间正是我所需要的,谢谢! :)

–贾米
2014年6月25日14:38

在瑞士德语键盘布局中,波浪号是通过按AltGr + ^(加上它是阻止键)生成的。因此,转义序列似乎不起作用。有人知道如何在瑞士德语中键入默认转义吗?

–丹尼尔·奥尔德(Daniel Alder)
2014年12月1日12:14



@Dobu找到了以前不起作用的原因。如果您已经在同一行中键入〜(在测试中很容易发生),请输入以下〜。序列将被忽略。必须先按回车键...

–丹尼尔·奥尔德(Daniel Alder)
2015年5月20日13:16

#3 楼

是否要退出SSH Shell?

您可以键入exit并按Enter键,或使用Ctrl + D

评论


“退出”对我有帮助,因为ctrl + d在VNC查看器中不起作用...谢谢

–raj gupta
2013年6月10日7:57

在计算机死机或消失或应用程序未响应任何输入的情况下,此方法不起作用

–丹尼尔·奥尔德(Daniel Alder)
15年5月20日在11:36

#4 楼

只需输入exitlogout(然后按Enter键,当然都可以)。

#5 楼

这些受支持的字符提供了各种选项,您可以在其中使用ssh。

支持的转义序列:

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


(请注意,转义只能在换行符后立即识别。)
您可以通过按Enter键来关闭转义序列列表。

#6 楼

您可以在控制台行中编写logout(当然,然后按Enter键。)。

#7 楼

MacOS:当ssh挂起时,请使用以下顺序:

ENTER 
SHIFT+`
.


其中:shift +`产生〜(波浪号)