Como faço para sair de uma conexão SSH?

245

Estou conectando a um servidor via SSH para enviar uma mensagem para um servidor de soquete usando um comando como:

ssh 181.169.1.2 -p 5566

Depois que a conexão é estabelecida e eu escrevo a mensagem e a envio, não consigo sair do modo de texto. Só posso inserir mais texto e é isso.

Existe um comando ou uma combinação de teclas que me permite retornar ao modo de comando?

Andreea
fonte

Respostas:

156

Como faço para sair de uma conexão SSH?

Dois caminhos:

  • fechar a sessão do shell, por exemplo, com exitseguido por Enter, ou Ctrl- dgeralmente permite que você saia da sshsessão normalmente,
  • no caso de você ter uma conexão ruim e o shell não responder, pressione a Entertecla Enter, digite ~.ssh e feche imediatamente e retorne ao prompt de comando.

A primeira opção deve ser intuitiva, mas como sabemos a última opção?

Poderíamos aprender essas informações com uma leitura cuidadosa da página de manual.

$ man ssh

nos fornece a documentação SSH , que possui a seguinte seção sobre caracteres de escape:

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.
Aaron Hall
fonte
Não acho a seção "como sabemos isso" particularmente útil, porque para mim isso implica que existe algum tipo de solução óbvia para encontrar, quando não acho particularmente intuitivo que eu fosse "homem ssh "para descobrir como desconectar. Como eu teria encontrado "exit", por exemplo? Concordo que é bom reafirmar a verificação das páginas de manual quando puder.
111117 Alexander Pritchard
@AlexanderPritchard Atualizei minha resposta para explicar com mais cuidado o que estamos fazendo aqui. Se você achar que a página de manual é difícil de entender, arquive um problema com o mantenedor ou, melhor ainda, envie uma solicitação de recebimento com uma melhoria (inquestionavelmente boa).
Aaron Hall
1
Isso parece bom em teoria, mas, na prática, muitas pessoas lutam para descobrir como navegar por esses comandos, porque mesmo sabendo como procurar as informações desejadas, pressupõe o contexto que as pessoas não têm. Arquivar um problema com os mantenedores e enviar solicitações pull com melhorias vai muito além disso. Não discuto que as páginas de manual sejam úteis, mas se elas fossem definitivamente úteis como alguns fazem parecer, eu não usaria o Stack Exchange. Quero deixar claro que acho que sua resposta é boa e que as pessoas devem verificar as páginas de manual, mas elas não são totalmente abrangentes.
Alexander Pritchard
6
"se eles fossem definitivamente úteis como alguns fazem parecer, eu não usaria o Stack Exchange". Eu concordo, e é por isso que tento escrever boas respostas. Citar e citar fontes de referência não é para fazer com que alguém se sinta burro ou mal por não ter lido essa fonte; isso é feito para fornecer mais evidências do que de outra forma seria uma afirmação de fato talvez demonstrável, além de informar ao usuário onde mais informações relevantes podem ser armazenadas. Você quer saber que está fazendo semanticamente a coisa correta, além de saber que funciona.
Aaron Hall
278

Resposta curta: Tipo exit

Se isso não funcionar, no entanto ...

Caractere de escape SSH e sequência de desconexão

A maioria das implementações SSH implementa um caractere de escape para sessões interativas, semelhante à Ctrl-]combinação do telnet . O caractere de escape SSH padrão é ~inserido no início de uma linha.

Se você deseja encerrar uma sessão interativa do OpenSSH que está paralisada e não pode ser encerrada entrando exitou CtrlDem um shell no lado remoto , é possível inserir ~seguido de um ponto .. Para ter certeza de inserir o caractere de escape no início de uma linha de entrada, pressione Enter primeiro. Portanto, a seguinte sequência terminará na maioria dos casos uma sessão SSH:

Enter~.

Outras seqüências de escape

O OpenSSH, por exemplo, oferece outras seqüências de escape além ~.. A entrada ~?durante uma sessão deve fornecer uma lista. Alguns exemplos:

  • ~seguido Ctrl-Zsuspende a sessão,
  • ~& coloca diretamente em segundo plano,
  • ~# fornece uma lista de conexões encaminhadas nesta sessão.
  • Se você quiser basta digitar um til no início de uma linha, você tem que dobrá-lo: ~~.

O caractere de escape pode ser alterado usando a opção de linha de comando -e. Se você definir o valor especial -e none, o escape será desativado e a sessão será totalmente transparente.

Veja também a página de manual do OpenBSD no ssh (que é referenciada em www.openssh.org ) sob a -eopção de linha de comando

Dubu
fonte
2
Por que simplificar quando você pode complicar inutilmente?
MariusMatutiae
7
@MariusMatutiae O OP solicitou um caso em que não houvesse shell remoto para entrar exitou Ctrl-D, mas apenas um processo de escuta. Afirmei claramente que minha solução é adequada para uma sessão que está travada e não pode ser encerrada . Eu tentei esclarecer isso mais, espero que seja mais fácil ver agora.
Dubu
5
Eu era cético, mas ~.sem espaços era exatamente o que eu precisava, obrigado! :)
Jamey
2
No layout do teclado alemão suíço, o til é gerado pressionando AltGr + ^ (além de ser uma tecla de bloqueio). Por isso, parece que a sequência de escape não funciona. Alguém sabe como digitar o escape padrão em alemão suíço?
Daniel Alder
4
@Dobu Encontrei a razão pela qual não funcionou antes. Se você já digitou ~ na mesma linha (o que acontece facilmente se você estiver testando), o seguinte ~. seqüências são ignoradas. Teve que apertar retorno pela primeira vez ...
Daniel Alder
32

Deseja sair do shell SSH?

Você pode digitar exite clicar Enterou usar Ctrl+D

Jeroen Vermeulen - MageHost
fonte
1
"exit" me ajudou como ctrl + d não trabalhou em VNC viewer ... obrigado
Gupta raj
1
Isso não funciona nos casos em que a máquina freezed ou desapareceram ou a aplicação não responde a qualquer entrada
Daniel Alder
11

Basta digitar exitou logout(em seguida, pressionar Enter, é claro), ambos funcionarão.

octa
fonte
4

Estes são os personagens suportados que oferecem várias opções com as quais você pode brincar com o ssh.

Sequências de escape suportadas:

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

(Observe que escapes são reconhecidos apenas imediatamente após uma nova linha.) Você pode fechar a lista de seqüências de escape pressionando Enter.

0_o
fonte
3

Você pode escrever logoutna linha do console (e clicar, é Enterclaro).

Etienne
fonte
1

MacOS : quando o ssh travar, use a seguinte sequência:

ENTER 
SHIFT+`
.

onde: shift + ` produz ~ (caractere til)

Kamil Kiełczewski
fonte