Questão Por que meu login SSH está lento?


Estou vendo atrasos no SSH Logins. Especificamente, há dois pontos em que vejo um intervalo de atrasos instantâneos a vários segundos.

  1. Entre a emissão do comando ssh e a obtenção de um prompt de login e
  2. entre a entrada da senha e ter a carga da casca

Agora, especificamente estou olhando para detalhes ssh apenas aqui. Obviamente, latência de rede, velocidade do hardware e sistemas operacionais envolvidos, scripts de login complexos, etc, podem causar atrasos. Para o contexto eu ssh para uma vasta variedade de distribuições linux e alguns hosts Solaris usando principalmente Ubuntu, CentOS e MacOS X como meus sistemas cliente. Quase o tempo todo, a configuração do servidor ssh é inalterada a partir das configurações padrão do sistema operacional.

Em quais configurações do servidor ssh devo me interessar? Existem parâmetros do sistema operacional / kernel que podem ser ajustados? Truques de shell de login? Etc


84


origem


você está usando contas locais? - Às vezes eu acho que a autenticação pam pode adicionar um atraso para fazer login com o ssh - Sirex
Geralmente contas locais. Às vezes, NIS. - Peter Lyons


Respostas:


Tente definir UseDNS para no dentro /etc/sshd_config ou /etc/ssh/sshd_config.


107



+1 que é a causa mais comum de atraso ao efetuar login no ssh - matthias krull
"Nota do Solaris 11: Eu tentei a configuração UseDNS no Solaris 11 e ela corrompeu o início do serviço. Não exatamente uma resposta amigável do serviço. YMMV com outras variantes * Nix mas parece que o UseDNS no pode não ser uma opção válida no Solaris 11 " - comentar por Keith Hoffman - Sathya♦
Eu estava cético como eu uso para fazer o login usando o endereço IP (LAN doméstica), mas esta solução resolveu o meu problema. Para o bem do Google, embora estivesse ocorrendo logo após, o atraso não teve nada a ver com a mensagem "key: /home/mylogin/.ssh/id_ecdsa ((nil))" (ao executar ssh -vvv). - Skippy le Grand Gourou
1 para tornar explícito o arquivo /etc/ssh/sshd_config ! Eu estava adicionando /etc/sshd_config e não vejo diferença alguma !! - vyom
@SkippyleGrandGourou: Algumas versões do Solaris estavam usando um OpenSSH modificado, chamado SunSSH, que tinha algumas incompatibilidades irritantes. O Solaris 11.3 adiciona o OpenSSH de volta e o SunSSH eventualmente será removido ... - Gert van den Berg


Quando eu corri ssh -vvv em um servidor com um desempenho lento semelhante, vi um jeito aqui:

debug1: Next authentication method: gssapi-with-mic

Editando /etc/ssh/ssh_config e comentando esse método de autenticação, obtive o desempenho de login de volta ao normal. Aqui está o que eu tenho na minha /etc/ssh/ssh_config no servidor:

GSSAPIAuthentication no

Você pode definir isso globalmente no servidor, por isso não aceita GSSAPI para autenticar. Basta adicionar GSSAPIAuthentication no para /etc/ssh/sshd_config no servidor e reinicie o serviço.


33



Eu encontrei este para ser o caso com meus servidores RHEL5, uma vez winbind / ad logins foram configurados. - Chad
Trabalhou para mim graças a +1. - racic
Isso funciona para mim em um servidor Ubuntu 14.04. - Penghe Geng
Para o CentOS 7, é necessário definir GSSAPIAuthentication no e UseDNS no dentro /etc/ssh/sshd_config Arquivo. - Sunry


Para mim, o culpado foi a resolução IPv6, que estava expirando. (Configuração de DNS ruim no meu provedor de hospedagem, eu acho). Eu descobri isso fazendo ssh -v, que mostrou qual passo estava pendurado.

A solução é ssh com o -4 opção:

ssh -4 me@myserver.com


12



Eu suspeito que mais e mais de nós vamos ver isso com o passar do tempo e as coisas (mal e) lentamente acomodam o IPV6. Obrigado! - sage
... e esta resposta é particularmente inútil sem a mensagem de depuração que confirma que este é o problema. - E.P.
É minha experiência que este é um problema muito comum quando o SSH está escutando em interfaces dualstack e a primeira coisa que eu verifico quando consigo logar, mas leva mais tempo do que o esperado. - Mogget


Com o systemd, o login pode travar na comunicação do dbus com o logind após algumas atualizações, então você precisa reiniciar o logind

systemctl restart systemd-logind

Vi isso no debian 8, arch linx e em uma lista de suse


11



Oh wow, agora que foi o culpado! Muito obrigado! - mahatmanich
O mesmo para mim. Demorou um pouco para descartar todos os possíveis problemas de DNS e SSH primeiro. Nota: Se o problema se aplicar ao sudo lento também, tente primeiro. - Michael


Você sempre pode começar ssh com o -v opção que mostra o que está sendo feito no momento.

$ ssh -v you@host

Com as informações fornecidas, posso sugerir apenas algumas configurações do lado do cliente:

  • Como você escreve que está inserindo senhas manualmente, sugiro que use a autenticação de chave pública, se possível. Isso remove você como um gargalo de velocidade.

  • Você também pode desativar o encaminhamento de X com -x e encaminhamento de autenticação com -a (estes podem já estar desativados por padrão). Especialmente a desativação do X-forwarding pode lhe dar uma grande melhoria de velocidade se o seu cliente precisar iniciar um X-server para o ssh comando (por exemplo, no OS X).

Tudo o mais depende realmente dos tipos de atrasos que você sente quando e onde.


9



Boa dica sobre a verbosidade, você também pode aumentá-lo por ter mais v's. Até 3 IIRC. - vtest


Em relação ao ponto 2., aqui está uma resposta que não requer modificar o servidor nem requer privilégios root / administrativos.

Você precisa editar o arquivo "user ssh_config" que é:

vi $HOME/.ssh/config

(Nota: você teria que criar o diretório $ HOME / .ssh se ele não existe)

E adicione:

Host *
  GSSAPIAuthentication no
  GSSAPIDelegateCredentials yes

Você pode fazer isso por host, se necessário :) exemplo:

Host linux-srv
  HostName 192.158.1.1
  GSSAPIAuthentication no
  GSSAPIDelegateCredentials yes

Verifique se o endereço IP corresponde ao seu IP do servidor. Uma vantagem interessante é que agora o ssh fornecerá autocomplete para este servidor. Então você pode digitar ssh lin+ Tab e deve completar automaticamente ssh linux-srv.


7





Verifica /etc/resolv.conf no servidor para ter certeza de que o servidor DNS, listado neste arquivo, funciona bem e exclua qualquer DNS não funcional.

Às vezes é muito útil.


4





Além dos problemas de DNS já mencionados, se você estiver ssh'ing em um servidor com muitas montagens NFS, então pode haver um atraso entre a senha e o prompt como o quota comando verifica seu uso / cota em todos os sistemas de arquivos não montados com o noquota. Nos sistemas Solaris, você pode ver isso no padrão /etc/profile e pule-o correndo touch $HOME/.hushlogin  .


2





Funciona bem.

# uname -a
SunOS oi-san-01 5.11 oi_151a3 i86pc i386 i86pc Solaris
# ssh -V
Sun_SSH_1.5, SSH protocols 1.5/2.0, OpenSSL 0x009080ff
# echo "GSSAPIAuthentication no" >> /etc/ssh/sshd_config
# echo "LookupClientHostnames no" >> /etc/ssh/sshd_config
# svcadm restart ssh

UseDNS não não trabalhe com o OpenIndiana !!!

Leia "man sshd_config" para todas as opções

"LookupClientHostnames no" se o seu servidor não puder resolver


1





Se nenhuma das respostas acima funcionar e você estiver enfrentando problemas de pesquisa reversa do DNS, você também pode verificar se nscd (daemon de cache do serviço de nomes) está instalado e em execução.

Se esse é o problema, é porque você não tem cache de DNS, e toda vez que você consulta um nome de host que não está em seu host, você envia a pergunta para seu servidor de nomes ao invés de procurar em seu cache.

Eu tentei todas as opções acima e a única mudança que funcionou foi começar nscd.

Você também deve verificar o pedido para tornar a resolução de consulta do DNS /etc/nsswitch.conf para usar o arquivo de hosts primeiro.


1