A conexão ssh leva uma eternidade para iniciar, presa à "promessa: rede"


44

A conexão com um dos meus servidores usando ssh leva mais de 20 segundos para iniciar.

Isso não está relacionado às condições da LAN ou WAN, uma vez que a conexão consigo mesma é a mesma (ssh localhost). Depois que a conexão é finalmente estabelecida, é super rápido interagir com o servidor.

O uso de -vvv mostra que a conexão está travada após dizer "penhor: rede". Neste ponto, a autenticação (aqui usando a chave) já está concluída, como visível aqui:

...
debug1: Authentication succeeded (publickey).
Authenticated to myserver.mydomain.com ([xx.xx.xx.xx]:22).
debug1: channel 0: new [client-session]
debug2: channel 0: send open
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug1: pledge: network

(... preso aqui por 15 a 25 segundos ...)

debug1: client_input_global_request: rtype hostkeys-00@openssh.com want_reply 0
debug2: callback start
debug2: fd 3 setting TCP_NODELAY
debug2: client_session2_setup: id 0
...

O servidor é o Ubuntu 16.04. Já aconteceu comigo no passado com outro servidor (era o Ubuntu 12.04), o nerver encontrou a solução e o problema desapareceu depois de um tempo ...

sshd_config é o padrão fornecido pelo Ubuntu.

Até agora eu tentei:

  • usando -o GSSAPIAuthentication = no no comando ssh
  • usando senha em vez de uma chave
  • usando UsePrivilegeSeparation no em vez de yes, em sshd_config

1
Normalmente, para mim, conexões SSH lentas são problemas de DNS, pode ser esse o caso aqui? Por exemplo, o servidor pode ser preso tentando fazer um DNS reverso para o IP do cliente e à espera de que o limite de tempo
Eric Renouf

Na verdade não: por padrão, o UseDNS não está definido no sshd_config e a página de manual diz que essa opção é "não" por padrão.
M-Jack

3
Alguns autores sugerem que isso pode ser causado pela atualização do systemd sem a reinicialização. E houve uma atualização do systemd para o xenial em 12 de julho . systemctl restart systemd-logindresolve o problema apenas por um curto período de tempo para mim.
Ivan Kozik

Ou se você está vendo pam_systemd(sshd:session): Failed to create session: Connection timed outcomo mencionado em uma resposta, isso pode ser github.com/systemd/systemd/issues/2925
Ivan Kozik

Eu vim aqui tendo esse problema após uma atualização, e a sugestão de @ IvanKozik corrigiu o problema - ou seja, systemctl restart systemd-logind - então obrigado por isso.
Paul M

Respostas:


43

Provavelmente, esse é um problema com D-Buse systemd. Se o dbusserviço for reiniciado por algum motivo, você também precisará reiniciar systemd-logind.

Você pode verificar se esse é o problema abrindo o log do daemon ssh (no Ubuntu deveria ser /var/log/auth.log) e verifique se ele possui estas linhas:

sshd[2721]: pam_systemd(sshd:session): Failed to create session: Connection timed out

Se sim, basta reiniciar o systemd-logindserviço:

systemctl restart systemd-logind

Eu tive esse mesmo problema no CentOS 7, porque o messagebusfoi reiniciado (que é como o D-Busserviço é chamado no CentOS).


Tentei reiniciar o systemd-logind, mas depois de um tempo diz o daemon PolicyKit desconectado do barramento. Não somos mais um agente de autenticação registrado. A tarefa do systemd-logind.service falhou porque um tempo limite foi excedido. Consulte "status do systemctl systemd-logind.service" e "journalctl -xe" para obter detalhes.
Kun Ren

@KunRen você provavelmente precisará reiniciar o polkitserviço usando systemctl restart polkit.
Strahinja Kustudic

16

encontrou a resposta:

mudou o UsePAM de yes para no no arquivo sshd_config

Após reiniciar o serviço ssh, a conexão agora é imediata para o servidor. Nesse servidor, o PAM está vinculado ao ldap, e esse é provavelmente o motivo, mesmo que aqui esteja me conectando com um usuário declarado no próprio servidor, e não no LDAP.

Bem, essa é mais uma maneira de contornar o problema, não é realmente uma solução ... Eu tenho outros servidores configurados da mesma maneira que não estão tendo esse problema.

Espero que isso possa ajudar alguém ...


1
alterar o UsePAM para no tem outros efeitos. Veja essa discussão Então eu tive que definir uma senha para o usuário, porque eu tenho erros como nagios usuário não permitido porque a conta está bloqueada
M-Jack

4
Isso realmente não é uma boa ideia.
Jakuje 28/07

1
porque ?? alguma alternativa?
M-Jack

8
O PAM é usado para outras coisas relacionadas ao gerenciamento de contas em sistemas modernos. Em vez de desativá-lo, é melhor investigar o que está acontecendo na pilha do PAM e por que leva tanto tempo.
Jakuje 29/07

Deixar o módulo PAM normalmente não usado habilitado para acesso SSH é uma falha de segurança. Limitar o acesso a serviços críticos como SSH do ponto de vista de segurança também é sempre uma boa ideia para QUALQUER outro serviço. Quando você deseja que o módulo PAM coopere com o SSH? Por exemplo: quando você precisa integrá-lo ao diretório ativo via winbind, quando você precisa de autenticação de dois fatores com tokens do google, etc. Em outros casos (ao usar passwd e shadow), desligá-lo é perfeitamente seguro. Todo usuário do PAM deve ver isso: cve.mitre.org/cgi-bin/cvekey.cgi?keyword=pam
Michal Sokolowski

10

Isso aconteceu em dois dos meus servidores Fedora 25 e ocorreu devido a muitas tentativas falhas de login no SSH.

(As sugestões comuns de uso GSSAPIAuthentication=noe UseDNS=no/ ou reinicialização systemd-logindnão fizeram diferença.)

Nesses servidores, /etc/pam.d/postlogincontém:

session     optional      pam_lastlog.so silent noupdate showfailed

A página do manual pam_lastlogexplica que a showfailedopção irá:

Exibe o número de tentativas com falha de login e a data da última tentativa com falha de btmp.

Nesses servidores, os /var/log/btmparquivos eram enormes devido a muitas tentativas de login com falha. Os btmparquivos de log também não estavam sendo rotacionados.

Eu instalei o logrotatepacote para garantir que os arquivos de log sejam girados no futuro. (No Fedora, a configuração fornecida logrotatelida com a rotação de /var/log/btmp.)

Eu também apaguei os enormes btmparquivos de log; assim que eu fiz isso, a conexão com os servidores foi instantânea novamente.


Isso resolveu meu problema! Obrigado. Boa pegada. O SSH estava demorando de 5 a 10 segundos e agora é menos do que um piscar de olhos. Esta é uma VM que eu conectei à Internet pública há anos. Suas regras de firewall provavelmente poderiam ser ajustadas um pouco melhor, agora que penso nisso. Para outros, isso foi tudo o que fiz: sudo truncate -s 0 /var/log/btmp- O meu tinha 2,7G de tamanho.
Carl Bennett

2

No meu caso, o motivo foi um rsyslogd travado. Descobri isso porque não havia mais mensagens de log em / var / log / syslog ou /var/log/mail.log

Então service rsyslog restartresolvi o problema para nós.


A mesma causa em um servidor nosso executando o CentOS 6.10. A reinicialização do rsyslog cuidou disso. O problema é que não estava morto. Estava correndo, mas aparentemente não fazia nada de útil.
UtahJarhead

1

Para mim, esse problema é causado por um btmparquivo grande (centenas de MBs) . Este arquivo registra tentativas de login. Quando as pessoas estão tentando fazer força bruta com sua senha, esse arquivo pode ser grande e causar atrasos na "pledge: network"fase.

Tente limpar o arquivo de log

echo "" > /var/log/btmp

e veja se isso ajuda.


3
Isso precisa de muito mais explicações. Para iniciantes, por que você acha isso útil?
Sven

dica: basta digitar :> /var/log/btmpfaz o mesmo btw.
Marius

1

Para mim, a solução foi adicionar

UseDNS no

para o /etc/ssh/sshd_confige, é claro, service ssh restart(no nosso servidor Debian / Jessie). Nada mais...

antes :

ssh git@git.*****.de true  0.03s user 0.01s system 0% cpu 13.440 total
ssh git@git.*****.de true  0.03s user 0.01s system 0% cpu 20.990 total
ssh git@git.*****.de true  0.03s user 0.02s system 0% cpu 31.114 total
ssh git@git.*****.de true  0.03s user 0.01s system 0% cpu 25.898 total

depois de :

ssh git@git.*****.de true  0.03s user 0.02s system 5% cpu 0.832 total
ssh git@git.*****.de true  0.03s user 0.01s system 7% cpu 0.523 total
ssh git@git.*****.de true  0.03s user 0.01s system 7% cpu 0.574 total

Não, adicionar UseDNS noé uma solução para um problema completamente diferente.
kasperd

@kasperd Não importa. No meu caso, tive os mesmos sintomas (brevemente: travou após dizer "promessa: rede") e foi isso que finalmente ajudou; portanto, essa é uma solução para pelo menos um problema muito semelhante e tenho certeza de que ajudará um ou o outro em algum momento.
tamasgal

O mesmo aqui, dois trava durante a conexão, um depois sign_and_send_pubkeye outro mais longo pledge: network. A adição apenas de UseDNS nosubseqüentes service ssh restartresolveu o problema em uma instalação antiga do Ubuntu 14.04.5 LTS aqui.
Hound

0

Percebi a seguinte linha no meu feedback de depuração:

Control socket connect(/var/lib/jenkins/.ssh/USER@HOST:22): Permission denied

Qual era um arquivo pertencente a root:rootenquanto eu sou jenkins. A remoção deste arquivo resolveu meus problemas.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.