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


Estou me 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 for estabelecida e eu escrever a mensagem e enviá-la, não consigo sair do modo de texto. Só tenho permissão para inserir mais texto e é isso.

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


183


origem




Respostas:


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

Dois caminhos:

  • fechando a sessão de shell, por exemplo com exit Seguido por Entrarou Ctrl-d geralmente permite que você saia do ssh sessão normalmente,
  • no caso em que você tem uma conexão ruim e o shell não responde, pressione o Entrar chave e digite ~. e ssh deve imediatamente fechar e retornar ao seu prompt de comando.

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

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

$ man ssh

nos dá a documentação do SSH, que tem 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.

63



Eu não acho a seção "como sabemos isso" particularmente útil, porque para mim isso implica que há algum tipo de solução óbvia para encontrar, quando eu não acho particularmente intuitivo que eu "man" ssh "para descobrir como desconectar. Como eu encontraria "exit", por exemplo? Eu concordo que é bom reafirmar a verificação das man pages quando você puder. - Alexander Pritchard
@AlexanderPritchard Eu atualizei minha resposta para explicar mais cuidadosamente o que estamos fazendo aqui. Se você achar que a página de manual é difícil de entender, registre um problema com o mantenedor, ou melhor ainda, envie uma solicitação de recebimento com uma melhoria (sem reservas). - Aaron Hall
Isso soa bem na teoria, mas na prática, muitas pessoas lutam para descobrir como navegar nesses comandos, porque mesmo sabendo como procurar as informações que você quer, o contexto que as pessoas não têm. Arquivar um problema com mantenedores e enviar solicitações de pull com melhorias vai além disso. Eu não argumento que as man pages são úteis, mas se elas fossem definitivamente úteis, como algumas fazem parecer, eu não estaria usando o Stack Exchange. Quero deixar claro que sua resposta está bem e que as pessoas devem verificar as páginas do manual, mas não são abrangentes. - Alexander Pritchard
"Se eles fossem definitivamente úteis, como alguns fazem parecer, eu não estaria usando o Stack Exchange." Eu concordo, e é por isso que tento escrever boas respostas. Citar e citar fontes de referência não é fazer com que ninguém se sinta estúpido ou mal por não ter lido a partir dessa fonte, é feito para fornecer mais evidências do que de outra forma seria uma afirmação de fato demonstrável, bem como informar ao usuário onde mais informações relevantes podem ser armazenadas. Você quer saber que você está fazendo semanticamente a coisa correta, assim como saber que isso funciona. - Aaron Hall


Resposta curta: Type exit

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

Sequência de Caracteres e Desconexão do SSH Escape

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

Se você quiser encerrar uma sessão interativa do OpenSSH que está preso e não pode ser encerrado ao entrar exit ou CtrlD em uma concha no lado remoto, pode entrar ~ seguido por um ponto .. Para ter certeza de inserir o caractere de escape no início de uma linha de entrada, você deve pressionar Enter primeiro. Portanto, a sequência a seguir irá, na maioria dos casos, encerrar uma sessão SSH:

Entrar~.

Outras seqüências de escape

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

  • ~ seguiu Ctrl-Z suspende a sessão,
  • ~& coloca diretamente no fundo,
  • ~# fornece uma lista de conexões encaminhadas nesta sessão.
  • Se você quiser simplesmente digitar um til no começo de uma linha, você precisa 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 é desativado e a sessão é totalmente transparente.

Veja também a página man do OpenBSD no ssh (que é referenciado de www.openssh.org) debaixo de -e opção de linha de comando


254



Por que simplificar quando você pode tê-lo inutilmente complicado? - MariusMatutiae
@MariusMatutiae O OP solicitou um caso em que não havia shell remoto para entrar exit ou Ctrl-D, mas apenas um processo de escuta. Eu afirmei claramente que a minha solução é adequada para uma sessão que está preso e não pode sair. Eu tentei esclarecer isso mais, espero que seja mais fácil de ver agora. - Dubu
Eu era cético, mas ~. sem espaços era exatamente o que eu precisava, obrigado! :) - Jamey
No layout de teclado alemão suíço, o til é gerado pressionando-se AltGr + ^ (além de ser uma tecla de bloqueio). Por causa disso, parece que a seqüência de escape não funciona. Alguém sabe como digitar o escape padrão no alemão suíço? - Daniel Alder
@Dobu Encontrou o motivo pelo qual não funcionou antes. Se você já digitou ~ na mesma linha (o que acontece facilmente se você está testando), o seguinte ~. seqüências são ignoradas. Tive que pressionar o retorno primeiro ... - Daniel Alder


Você quer sair do shell SSH?

Você pode digitar exit e acertar Entrarou use Ctrl+D 


33



"exit" me ajudou como ctrl + d não funcionou no VNC viewer ... obrigado - raj gupta
Isso não funciona nos casos em que a máquina congelou ou desapareceu ou o aplicativo não responde a nenhuma entrada - Daniel Alder


Apenas digite exit ou logout (então pressione Enter, é claro) ambos irão funcionar.


11





Você pode escrever logout na linha do console (e pressione Entrar claro).


4





Eu vejo a pergunta é respondida adequadamente, mas eu gostaria de acrescentar que vejo que você está se conectando a este servidor via ssh na porta 5566. Eu li uma vez em esse site que a comunicação via SSH em portas não privilegiadas (sendo tudo acima de 1023) não é segura.

Quando você está logado em um sistema como um usuário não root (qualquer um que não seja 0), você não pode criar uma porta listando TCP ou UDP abaixo de 1024. Isto é porque os números de porta abaixo de 1024 são chamados de portas privilegiadas e só podem ser aberto pelo root ou processos que estão rodando como root. Então, por exemplo, quando o seu servidor web (apache, nginx etc) for iniciado, ele fará isso como o usuário root privilegiado para abrir uma conexão de escuta na porta 80 (a porta que por padrão será usada para o tráfego HTTP). Agora, assim que a porta é aberta e tudo o que precisa ser feito como root é feito, o servidor web irá retornar para um usuário não privilegiado (o usuário www-data, apache ou nobody). A partir daí, quando algo de ruim está acontecendo, é limitado apenas aos direitos que esse usuário possui. Agora, voltando ao SSH: quando iniciamos o SSH na porta 22, sabemos que isso é feito pelo root ou pelo processo raiz, já que nenhum outro usuário poderia abrir essa porta. Mas o que acontece quando movemos o SSH para a porta 2222? Essa porta pode ser aberta sem uma conta privilegiada, o que significa que posso escrever um script simples que ouça a porta 2222 e imite o SSH para capturar suas senhas. 

Então, quando eu mudo a porta eu sempre uso uma porta abaixo de 1024 que ainda não é usada por outro software padrão. Há uma boa lista sobre Wikipedia por esta.

O autor do artigo também acredita que a alteração da porta SSH não deve ser feita por motivos de compatibilidade.

Outra questão: muitas empresas têm firewalls de entrada e saída, o que significa que você não pode ir a qualquer site para qualquer porta aleatória e esperar que funcione. Algumas portas seguras, como a porta 22, são frequentemente isentas disso, enquanto outras portas, como a porta 25 ou 110, são bloqueadas.

Eu pessoalmente acho que há casos de uso em que é útil. Por exemplo, quando você ou um pequeno grupo de pessoas é o único que se conecta ao servidor via SSH, você registra ataques automatizados de força bruta e deseja manter o log limpo.


4



Claro ... É muito texto e eu não queria spam. :) Mas seu argumento é bom. - Ogier Schelvis
Pela minha experiência, o que você está escrevendo aqui é parcialmente correto, mas sim, todos deveriam considerar esses fatos sobre portas reservadas, de qualquer forma, esse não era o problema aqui. Obrigado pela sua resposta, embora! - Andreea
Se há uma parte que não está certa, estou curioso para saber o que é. - Ogier Schelvis
Eu só vou te dar o primeiro: você não deve usar uma porta abaixo de 1024; a lista de portas usadas começa em zero. É recomendado usar as portas acima de 63737. Mas você deve considerar o fato de que, se você não tiver instalado em seu servidor, por exemplo, Polipo que usa a porta 8123, é aceitável usá-lo, até que o polipo seja instalado (e então ninguém se lembra de mudar a porta: P) - Andreea
Aqui está o que pode estar errado: A preocupação descrita é alguém realizando um ataque local. Espera-se que os administradores conectados aos principais dispositivos de infra-estrutura sejam confiáveis. Há muito mais portas acima de 1024 do que abaixo. Portanto, ocultar um serviço em uma porta mais alta pode ajudar a impedir / atrasar a visualização de scanners de portas remotas que se concentram nas portas usadas com mais frequência. Se alguém estiver fazendo a varredura na porta de suas portas mais altas, um IDS pode disparar um alerta (e talvez implantar técnicas IPS). Limitar a <1024 restringe seus defensores (administradores locais confiáveis) e restringe as coisas para o vetor de ataque mais provável e menos confiável: remoto - TOOGAM


Estes são os caracteres suportados que fornecem 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 as fugas são reconhecidas apenas imediatamente após uma nova linha). Você pode fechar a lista de seqüências de escape pressionando Entrar.


3





Mac OS: quando o ssh trava use a seguinte sequência:

ENTER 
SHIFT+`
.

Onde: turno + `  produz ~ (caractere til)


1