Truques interessantes e truques SSH

Algumas dicas sobre o uso eficiente do SSH. Vamos falar sobre como:

  • Use autenticação de dois fatores para conexões SSH
  • é seguro usar "encaminhamento de chave" (encaminhamento de agente);
  • sair de uma sessão SSH interrompida;
  • deixe o terminal aberto quando sair ou desconectar;
  • Compartilhe o terminal remoto com um amigo (sem o zoom!).

imagem

Autenticação multifator SSH


Existem cinco maneiras de adicionar um segundo fator para autenticação no SSH:

  1. OpenSSH ( ).

    2020 OpenSSH FIDO U2F (Universal Second Factor). , .

    , 8.2 . ssh -V, nc [servername] 22.

    ecdsa-sk ed25519-sk ( ). $ ssh-keygen -t ecdsa-sk -f ~/.ssh/id_ecdsa_sk. , U2F . U2F , .

    . OpenSSH -sk-«» . U2F . , . $ ssh-keygen -t ecdsa-sk -O resident -f ~/.ssh/id_ecdsa_sk. , $ ssh-add -K. .
  2. PIV+PKCS11 Yubikey. , SSH-, . Yubikey U2F+SSH with PIV/PKCS11. , FIDO U2F. , .
  3. ssh- yubikey-agent. Filippo Valsorda SSH- Yubikeys. .
  4. Touch ID sekey. Sekey — SSH- , secure enclave MacOS Touch ID.
  5. Single Sign On SSH. . Single Sign On SSH , , .


(agent forwarding)


O encaminhamento de uma chave no SSH fornece ao host remoto acesso ao seu agente SSH local. Quando o seu cliente SSH usa o encaminhamento de chave (geralmente ativado pela opção ssh -A), existem 2 canais na conexão - sua sessão interativa e o canal de encaminhamento de chave. O agente SSH local cria um soquete IPC que se conecta ao host remoto através deste canal. Isso é perigoso porque Um usuário com privilégios de root em um host remoto tem acesso ao seu agente SSH local e pode usá-lo para acessar recursos de rede em seu nome. Com o agente SSH padrão que acompanha o OpenSSH, você nunca sabe o que aconteceu. Mas se você usar uma chave U2F (ou Sekey ), poderá interromper qualquer tentativa de usar seu agente SSH.

Mesmo com essa limitação, o uso periódico do encaminhamento de chaves é perfeitamente aceitável. Não use esse método para todas as suas conexões. Use somente se tiver certeza de sua necessidade em situações específicas.

Saindo de uma sessão SSH suspensa


As sessões SSH geralmente congelam devido a interrupções na rede, perda de controle por um programa executável ou por uma das seqüências de controle do terminal que bloqueiam a entrada do teclado.

Aqui estão algumas maneiras de sair de uma sessão interrompida:

  1. Saída automática quando a rede quebra. Na sua configuração SSH, .ssh/configvocê precisa adicionar: ele verificará a conexão enviando solicitações de eco ao host remoto a cada segundo. Se mais do que essas solicitações não forem respondidas, o SSH fechará a conexão.

    ServerAliveInterval 5
    ServerAliveCountMax 1


    sshServerAliveIntervalServerAliveCountMax
  2. . ssh ~ . ~. ( ).

    ~? , . , ~ , .

?Quando a Internet foi inventada, os computadores não eram particularmente móveis. Quando você trabalha em um laptop e alterna entre redes IPv4 WiFi, seu endereço IP é alterado. Como o SSH é baseado em uma conexão TCP, e as conexões TCP dependem dos pontos de conexão com endereços IP fixos, cada vez que você se conecta a outra rede, sua conexão SSH é perdida. Quando o seu endereço IP é alterado, leva algum tempo até a pilha de rede detectar que a conexão está perdida. Uma conexão TCP não implica o desligamento rápido de uma das partes em caso de problemas na rede; portanto, tentará tentar enviar novamente os dados por mais algum tempo. No seu terminal, a sessão parecerá travada. O IPv6 adiciona funcionalidade que permite que os dispositivos mantenham seu endereço IP ao alternar entre redes.Então, algum dia isso deixará de ser um problema.

Como deixar um terminal aberto em um host remoto


Existem duas opções para salvar uma sessão quando você alterna entre redes ou deseja se desconectar por um tempo:

  1. Use o Mosh ou o Terminal Eterno . Se você realmente precisa de uma conexão que não trava , mesmo que alterne entre redes, use o shell Mosh-mobile. Mosh é um shell seguro que usa o SSH para inicializar uma sessão (handshake), após o qual alterna para seu próprio canal criptografado. Este canal é muito estável. Ele pode lidar com várias situações, incluindo desconexões da Internet, alterando o endereço IP do seu laptop, grandes atrasos na transmissão pela rede e outras. Graças à magia do UDP e ao protocolo de sincronização usado pelo Mosh.

    Mosh , 60000–61000 UDP . mosh user@server .

    Mosh , SSH, - . , . SSH , , Mosh .
  2. tmux. , , tmux. SSH- , tmux attach, tmux. — , macOS .

    tmux Byobu — , . Byobu Ubuntu macOS Homebrew.



Quando você resolve um problema complexo com servidores, eu gostaria de compartilhar uma sessão SSH com outra pessoa que esteja em outro lugar. O tmux é a melhor ferramenta de terminal de compartilhamento.
Então, você precisa fazer o seguinte:

  1. Verifique se ele está tmuxinstalado no servidor na DMZ (ou onde você deseja se conectar).
  2. Vocês dois precisam se conectar ao servidor via SSH usando a mesma conta .
  3. Um de vocês deve executar tmuxpara criar uma tmuxsessão.
  4. Outro deve executar o comando tmux attach.
  5. Voila! Você compartilhou o terminal.

Se você precisar de um ajuste mais fino das sessões multiusuário, use o tmate, este fork tmux, que permite facilitar ainda mais as sessões compartilhadas.

Traduzido por Andrey Zinchenko, chefe do departamento de análise da Rexoft

All Articles