Estou vendo atrasos nos logins SSH. Especificamente, existem dois pontos em que vejo uma variação de atrasos instantâneos a vários segundos.
- Entre emitir o comando ssh e obter um prompt de login e
- entre digitar a senha e ter o shell carregado
Agora, especificamente, estou vendo detalhes ssh apenas aqui. Obviamente, a latência da rede, a velocidade do hardware e dos sistemas operacionais envolvidos, scripts de login complexos etc. podem causar atrasos. Para o contexto, eu ssh para uma grande variedade de distribuições linux e alguns hosts Solaris usando principalmente Ubuntu, CentOS e MacOS X como meus sistemas clientes. Quase o tempo todo, a configuração do servidor ssh permanece inalterada em relação às configurações padrão do sistema operacional.
Em quais configurações de servidor ssh devo me interessar? Existem parâmetros de SO / kernel que podem ser ajustados? Truques de shell de login? Etc?
Respostas:
Tente configurar
UseDNS
ano
em/etc/sshd_config
ou/etc/ssh/sshd_config
.fonte
ssh -vvv
)./etc/ssh/sshd_config
! Eu estava adicionando/etc/sshd_config
e não vendo nenhuma diferença !!Quando executei
ssh -vvv
em um servidor com desempenho lento semelhante, vi um travar aqui:Ao editar
/etc/ssh/ssh_config
e comentar esse método de autenticação, obtive o desempenho do login de volta ao normal. Aqui está o que eu tenho no meu/etc/ssh/ssh_config
servidor:Você pode configurá-lo globalmente no servidor, para que ele não aceite o GSSAPI para autenticação. Basta adicionar
GSSAPIAuthentication no
a/etc/ssh/sshd_config
no servidor e reiniciar o serviço.fonte
GSSAPIAuthentication no
eUseDNS no
no/etc/ssh/sshd_config
arquivo.Para mim, o culpado era a resolução IPv6, estava chegando ao tempo limite. (Configuração ruim de DNS no meu provedor de host, eu acho.) Descobri isso fazendo
ssh -v
, o que mostrava qual etapa estava travando.A solução é
ssh
com a-4
opção:ssh -4 [email protected]
fonte
debug2: resolving "thing.net.au" port 22
sem erro, mas isso não acontece com -4, indicando que é um problema de IPv6 do DNS.Com 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
Vi isso no debian 8, arch linx e em uma lista de suse
fonte
Você sempre pode começar
ssh
com a-v
opção que exibe o que está sendo feito no momento.Com as informações que você forneceu, só posso sugerir algumas configurações do lado do cliente:
Como você escreve que está inserindo senhas manualmente, sugiro que você 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 X com o encaminhamento de
-x
autenticação com-a
(eles já podem estar desativados por padrão). Desabilitar o encaminhamento de X especialmente pode oferecer uma grande melhoria de velocidade se o seu cliente precisar iniciar um servidor X para ossh
comando (por exemplo, no OS X).Todo o resto depende realmente de que tipo de atraso você experimenta onde e quando.
fonte
Quanto ao ponto 2., aqui está uma resposta que não requer modificação do servidor nem requer privilégios de administrador / raiz.
Você precisa editar o arquivo "user ssh_config", que é:
(Nota: você precisaria criar o diretório $ HOME / .ssh se ele não existir)
E adicione:
Você pode fazer isso por host, se necessário :) exemplo:
Verifique se o endereço IP corresponde ao IP do servidor. Uma vantagem interessante é que agora o ssh fornecerá o preenchimento automático para este servidor. Então você pode digitar
ssh lin
+Tab
e ele deve ser preenchido automaticamentessh linux-srv
.fonte
Verifique
/etc/resolv.conf
no servidor para garantir que o servidor DNS listado neste arquivo funcione bem e exclua qualquer DNS que não esteja funcionando.Às vezes é muito útil.
fonte
Além dos problemas de DNS já mencionados, se você estiver transferindo para um servidor com muitas montagens NFS, pode haver um atraso entre a senha e o prompt, pois o
quota
comando verifica seu uso / cota em todos os sistemas de arquivos não montados com onoquota
. Nos sistemas Solaris, você pode ver isso no padrão/etc/profile
e ignorá-lo executandotouch $HOME/.hushlogin
.fonte
Funciona bem.
UseDNS não, não funciona com o OpenIndiana !!!
Leia "man sshd_config" para todas as opções
"LookupClientHostnames no" se o servidor não puder resolver
fonte
Se nenhuma das respostas acima funcionar e você estiver enfrentando problemas de pesquisa reversa do DNS, também poderá 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 possui cache de DNS e, toda vez que você consulta um nome de host que não esteja no seu arquivo de host, você envia a pergunta ao servidor de nomes em vez de procurar no cache
Tentei todas as opções acima e a única alteração que funcionou foi o início
nscd
.Você também deve verificar a ordem de resolução da consulta DNS
/etc/nsswitch.conf
para usar o arquivo hosts primeiro.fonte
Provavelmente isso é específico apenas para o Debian / Ubuntu OpenSSH, que inclui os modos de grupo de usuários.patch escritos por um dos mantenedores de pacotes Debian. Esse patch permite que os arquivos ~ / .ssh tenham o conjunto de bits graváveis do grupo (g + w) se houver apenas um usuário com o mesmo gid que o arquivo. A função secure_permissions () do patch faz essa verificação. Uma das fases da verificação é passar por cada entrada de senha usando getpwent () e comparar o gid da entrada com o gid do arquivo.
Em um sistema com muitas entradas e / ou autenticação NIS / LDAP lenta, essa verificação será lenta. O nscd não armazena em cache as chamadas getpwent (), portanto, toda entrada de senha será lida pela rede se o servidor não for local. No sistema que encontrei, foram adicionados cerca de 4 segundos para cada chamada do ssh ou login no sistema.
A correção é remover o bit gravável em todos os arquivos em ~ / .ssh fazendo isso
chmod g-w ~/.ssh/*
.fonte
Eu descobri que reiniciar o systemd-logind.service apenas curou o problema por algumas horas. Alterar o UsePAM de yes para no no sshd_config resultou em logins rápidos, embora o motd não seja mais exibido. Comentários sobre problemas de segurança?
fonte
Para concluir todas as respostas que mostram que as resoluções DNS podem retardar o seu login ssh, às vezes falta uma regra de firewall. Por exemplo, se você DROP todos os paquets INPUT por padrão
então você terá que aceitar INPUT para porta ssh e solicitação de DNS
fonte
ssh -vvv
a conexão funcionou muito bem até travar no sistema, tentando obter o terminal por pelo menos 20 segundos:Depois de fazer um
systemctl restart systemd-logind
no servidor , tive conexão instantânea novamente!Isso foi no debian8 ! Então systemd foi o problema aqui!
Nota: Bastien Durel já deu uma resposta para esse problema, no entanto, faltam as informações de depuração. Espero que isso seja útil para alguém.
fonte
session [default=1] pam_lastlog.so nowtmp showfailed
no/etc/pam.d/postlogin
. Aparentemente, a atualização do arquivo lastlog foi incrivelmente lenta no meu OpenVZ VPS baseado em contêiner.Eu encontrei recentemente outra causa de logins ssh lentos.
Mesmo se você tiver
UseDNS no
participado/etc/sshd_config
, o sshd ainda poderá realizar pesquisas reversas no DNS se/etc/hosts.deny
houver uma entrada como:Isso pode acontecer se você tiver o DenyHosts instalado no seu sistema.
Seria ótimo se alguém soubesse como fazer o DenyHosts evitar colocar esse tipo de entrada
/etc/hosts.deny
.Aqui está um link, para as perguntas frequentes do DenyHosts , sobre como remover entradas de
/etc/hosts.deny
- consulte Como remover um endereço IP que o DenyHosts bloqueou?fonte
Podemos achar que o método preferido de resolução de nomes não é o arquivo host e depois o DNS.
Por exemplo, essa seria a configuração usual:
Primeiro, o arquivo hosts é atingido (opção: arquivos) e depois o DNS (opção: dns), no entanto, podemos descobrir que foi adicionado outro sistema de resolução de nomes que não está operacional e está nos causando lentidão ao tentar executar a resolução reversa.
Se a ordem de resolução de nomes não estiver correta, você poderá alterá-la em:
/etc/nsswitch.conf
Extraído de: http://www.sysadmit.com/2017/07/linux-ssh-login-lento.html
fonte
Eu tentei todas as respostas, mas nenhuma delas funcionou. finalmente descubro o meu problema:
primeiro eu corro
sudo tail -f /var/log/auth.log
para poder ver o log do ssh e depois em outra sessão rodarssh 172.16.111.166
e notei esperandodepois de pesquisar, localizei esta linha em / etc / ssd / ssh_config
Eu comentei e o atraso se foi
fonte
Nota: Isso começou como um tutorial "Como depurar", mas acabou sendo a solução que me ajudou em um servidor Ubuntu 16.04 LTS.
TLDR : execute
landscape-sysinfo
e verifique se esse comando leva muito tempo para terminar; é a impressão das informações do sistema em um novo login SSH. Observe que este comando não está disponível em todos os sistemas, olandscape-common
pacote o instala. ("Mas espere, tem mais ...")Inicie um segundo servidor ssh em outra porta na máquina com o problema, faça-o no modo de depuração, o que não tornará a bifurcação e imprimirá as mensagens de depuração:
conecte-se a esse servidor a partir de outra máquina no modo detalhado:
Meu cliente gera as seguintes linhas antes de começar a dormir:
Pesquisando no Google realmente não é útil, mas os logs do servidor são melhores:
Percebi que, quando mudo
UsePAM yes
paraUsePAM no
, esse problema é resolvido.Não relacionado a
UseDNS
ou a nenhuma outra configuração,UsePAM
afeta apenas esse problema no meu sistema.Eu não tenho idéia por que, e eu também não vou sair
UsePAM
emno
, porque eu não sei quais os efeitos colaterais são, mas isso me permite continuar investigando.Portanto, não considere que isso seja uma resposta, mas um primeiro passo para começar a descobrir o que há de errado.
Então continuei investigando e corri
sshd
comstrace
(sudo strace /usr/sbin/sshd -ddd -p 44321
). Isso produziu o seguinte:A linha
/etc/update-motd.d
me deixou desconfiada, aparentemente o processo aguarda o resultado das coisas que estão em/etc/update-motd.d
Então eu
cd
'd em/etc/update-motd.d
e passou asudo chmod -x *
fim de inibir a PAM para executar todos os arquivos que geram essa dinâmicaMessage Of The Day
, que inclui carga do sistema e se os pacotes precisam ser atualizados, e isso resolveu o problema.Este é um servidor baseado em uma CPU N3150 "com baixo consumo de energia", que tem muito trabalho a ser feito 24 horas por dia, sete dias por semana, por isso acho que coletar todos esses dados motd foi demais para isso.
Posso começar a habilitar scripts nessa pasta seletivamente, para ver quais são menos prejudiciais, mas a chamada especialmente
landscape-sysinfo
é muito lenta e50-landscape-sysinfo
chama esse comando. Eu acho que é o que causa o maior atraso.Depois de reativar a maioria dos arquivos cheguei à conclusão de que
50-landscape-sysinfo
e99-esm
foram a causa de meus problemas.50-landscape-sysinfo
demorou cerca de 5 segundos para executar e99-esm
cerca de 3 segundos. Todos os arquivos restantes duram cerca de 2 segundos.Nem
50-landscape-sysinfo
e99-esm
são cruciais.50-landscape-sysinfo
imprime estatísticas interessantes do sistema (e também se você estiver com pouco espaço!) e99-esm
imprime mensagens relacionadas aUbuntu Extended Security Maintenance
Finalmente, você pode criar um script
echo '/usr/bin/landscape-sysinfo' > info.sh && chmod +x info.sh
e obter essa impressão mediante solicitação.fonte
Este tópico já está fornecendo várias soluções, mas o meu não é fornecido aqui =). Então aqui está. Meu problema (demorou cerca de 1 minuto para o login do ssh no meu raspberry pi) foi devido a um arquivo .bash_history corrompido. Como o arquivo é lido no login, isso estava causando o atraso do login. Depois que removi o arquivo, o tempo de login voltou ao normal, como instantâneo.
Espero que isso ajude outras pessoas.
fonte
Para mim, eu precisava do GSSAPI e não queria desativar as pesquisas reversas de DNS. Isso não parecia uma boa ideia, então verifiquei a página principal do resolv.conf. Acontece que um firewall entre mim e os servidores aos quais eu estava usando SSH estava interferindo nas solicitações de DNS, porque não estavam no formato esperado pelo firewall. No final, tudo o que eu precisava fazer era adicionar esta linha ao resolv.conf nos servidores aos quais eu estava SSH:
options single-request-reopen
O que outras pessoas estão dizendofonte
Notavelmente, uma atualização do pacote de ligação no CentOS 7 quebrou o nome, agora declarando no log que /etc/named.conf teve um problema de permissão. Funcionou bem por meses com 0640. Agora ele quer 0644. Isso faz sentido, pois o daemon nomeado pertence ao usuário 'nomeado'.
Com o nome desativado, tudo ficou lento, desde logins ssh a páginas servindo a partir do servidor web local, aplicativos LAMP lentos, etc., provavelmente porque cada solicitação atingia o tempo limite no servidor local morto antes de procurar um DNS secundário externo configurado.
fonte
Para mim, houve um problema no meu
/etc/hosts
arquivo local . Então,ssh
estava tentando dois IP diferentes (um errado) que levaram uma eternidade para atingir o tempo limite.Usando
ssh -v
fez o truque aqui:fonte
/etc/hosts
do servidor?