Control-p congela sessão SSH

3

Encontrei uma situação estranha em uma das minhas máquinas SSH ARM que uso diariamente. Toda vez que eu me conecto ao servidor e pressiono Ctrl + P para invocar a função previous-history BASH, a conexão SSH congela. Eu só posso sair usando sequências SSH til. Eu tentei investigar possíveis razões para essa situação:

  1. não é culpa BASH porque pressionar a seta para cima que também invoca previous-history funciona corretamente

  2. O Ctrl + P não está associado a nada incomum de acordo com bind -p :

    $ bind -p | grep previous-history
    "\C-p": previous-history
    "\eOA": previous-history
    "\e[A": previous-history
    
  3. ligação Ctrl + P para uma função diferente como esta não ajuda - Ctrl + P ainda congela SSH:

    $ bind '"\C-p":"\necho hi\n"''
    
  4. caractere bruto para Ctrl + P é impresso corretamente por BASH, Ctrl + V < kbd> Ctrl + P imprime ^P

  5. $TERM está definido como screen , /etc/termcap que o readline BASH usa como padrão está correto - por exemplo, Ctrl + L limpa a tela . Depois de definir $TERM para xterm ou linux Ctrl + P ainda congela o SSH

  6. Eu tentei iniciar o BASH com --noprofile e --nobashrc , mas Ctrl + P ainda não funciona

  7. Eu conectei-me ao servidor com -vvv , mas não notei nada de novo nas mensagens de log

  8. quando a conexão SSH congela, posso conectar-me ao mesmo servidor em outro subshell sem problemas. Depois de fazer isso, a sessão que estava congelada na subcamada anterior volta à vida novamente - posso ver o que digito, mas não consigo ver tudo o que eu digitei quando a sessão foi congelada

  9. Eu conectei a este servidor de várias máquinas para excluir problemas locais, mas Ctrl + P nunca funciona

Versão do bash:

GNU bash, version 4.1.5(1)-release (armv7l-unknown-linux-gnueabi)

Versão do SSH:

OpenSSH_5.3p1, OpenSSL 1.0.1c 10 May 2012

kernel do Linux:

3.10.30

Eu não sei o que pode ser o motivo de tal comportamento. Eu me acostumei com o Ctrl + P keybining. Alguém tem uma pista?

    
por user1042840 24.09.2014 / 13:41

1 resposta

1

Ao depurar em ssh usando ssh -vvv remotehost para habilitar a saída máxima de depuração: para cada pressionamento de tecla enviado para a extremidade remota, você deve ver "debug3: Escreveu 48 bytes para um total de NNNN". Se você não vê-lo para Ctrl-P, isso é uma indicação de que o problema está no lado local (cliente) ao invés do controle remoto.

Você tem privilégios para controlar o daemon no lado remoto? As opções -D e -d do sshd (novamente, -ddd para saída máxima de depuração) podem ajudá-lo a isolar o problema para aquela metade da conexão.

No lado local, há alguma ligação de tecla de terminal incomum? stty -a ou stty -a | fgrep '^D' deve mostrar se o Ctrl-P tinha uma ligação lá. (O que é obrigado a "parar"?)

Depois que o lado do cliente congela:

  1. Se você emitir um comando como touch /tmp/foo , isso afetará o servidor? (ou seja, é apenas mostrar que congelado, ou execução).
  2. Você consegue emitir escutas do cliente ssh? Você pode digitar <enter>~? e obter uma lista de "Sequências de escape suportadas"? Você pode digitar <enter>~. e terminar a conexão? Se sim, qualquer congelamento é definitivamente no servidor.

Você pode ter uma ideia melhor do que o servidor está fazendo com strace: strace -fo /tmp/strace.out sshd -ddd -D

    
por 24.09.2014 / 15:44