如何退出SSH连接?


245

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

ssh 181.169.1.2 -p 5566

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

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

Answers:


156

如何退出SSH连接?

两种方式:

  • 关闭shell会话,例如,用,exit后跟EnterCtrl- d通常可以让您ssh正常退出会话,
  • 如果您的连接不良并且外壳无响应,请按下Enter键,然后键入~.and 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.

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

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

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

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

278

简短答案:类型 exit

如果那不起作用,但是...

SSH转义符和断开顺序

大多数SSH实现都为交互式会话实现转义字符,类似于telnet的Ctrl-]组合。SSH的默认转义字符是~,在行的开头输入。

如果您想终止交互式OpenSSH会话,该exitCtrlD会话被卡住了,无法通过进入进入远程端的Shell 来退出,则可以输入~一个加点号.。为确保在输入行的开头输入转义字符,应首先按Enter。因此,在大多数情况下,以下顺序将终止SSH会话:

Enter~.

其他转义序列

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

  • ~然后Ctrl-Z暂停会话,
  • ~& 将其直接放入背景
  • ~# 提供此会话中转发连接的列表。
  • 如果您只想在行首输入波浪号,则必须将其加倍~~

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

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


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

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

5
我很怀疑,但是~.没有空格正是我所需要的,谢谢!:)
Jamey 2014年

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

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

32

您要退出SSH Shell吗?

您可以输入exit并点击Enter,也可以使用Ctrl+D


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

1
在机器死机或消失或应用程序未响应任何输入的情况下,此方法不起作用
Daniel Alder 2015年

11

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


4

这些是受支持的字符,这些字符提供了各种选项,您可以在这些选项中使用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


3

您可以logout在控制台行中写(Enter当然要命中)。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.