Neste artigo, reunimos nossas melhores dicas para usar o SSH de forma mais eficaz. Nele, você descobrirá como:
- Adicionar um segundo fator ao login SSH
- Usar com segurança o agent forwarding
- Sair de uma sessão SSH travada
- Manter um terminal sempre aberto
- Compartilhar uma sessão de terminal remota com um amigo (sem Zoom!)
Adicionando um segundo fator ao seu SSH
Você pode adicionar um segundo fator de autenticação às suas conexões SSH de cinco maneiras diferentes:
- Atualize seu OpenSSH e use a chave de criptografia. Em fevereiro de 2020, o OpenSSH adicionou suporte para chaves de criptografia FIDO U2F (Universal Second Factor). Esta é uma nova funcionalidade excelente, mas há um detalhe: apenas aqueles clientes e servidores que foram atualizados para a versão OpenSSH 8.2 ou superior poderão usar as chaves de criptografia, uma vez que a atualização de fevereiro introduz novos tipos de chaves para eles. Você pode verificar a versão do cliente SSH com o comando
ssh –Ve a versão do servidor com o comandonc [servername] 22
A versão de fevereiro adicionou dois novos tipos de chaves — ecdsa-sk e ed25519-sk (junto com os certificados correspondentes). Para gerar o arquivo de chave, basta inserir sua chave de criptografia e executar o comando:$ ssh-keygen -t ecdsa-sk -f ~\/ .ssh\/id_ecdsa_skIsso criará chaves pública e privada e as vinculará ao seu dispositivo U2F. A função da chave privada no dispositivo U2F é descriptografar o descritor secreto da chave no disco quando a chave de criptografia estiver ativada.
Além disso, como segundo fator, você pode fornecer uma frase secreta para suas chaves.
A chave residente é outro tipo de geração de chaves -sk- suportado pelo OpenSSH. Com essa abordagem, o descritor é armazenado no dispositivo U2F e permite que você o tenha com a chave de criptografia quando necessário. Você pode criar uma chave residente com o comando:
$ ssh-keygen -t ecdsa-sk -O resident -f ~\/ .ssh\/id_ecdsa_skEm seguida, para retornar o descritor à memória em um novo dispositivo, insira a chave de criptografia e execute o comando:
$ ssh-add -KAo se conectar ao host, você ainda precisará ativar a chave de criptografia.
- Use PIV+PKCS11 e Yubikey. Para se conectar a dispositivos com versões anteriores do SSHD usando a chave de criptografia, você precisará de uma abordagem diferente. A Yubico possui um guia sobre o uso de U2F+SSH com PIV\/PKCS11 (inglês). Isso não é a mesma coisa que FIDO U2F, e embora o método funcione, dá muito trabalho entender qual mágica está por trás dele.
- Aplique o agente ssh yubikey-agent personalizado. Filippo Valsorda escreveu um agente SSH para Yubikeys. Ele é completamente novo e contém um conjunto mínimo de funcionalidades.
- Use Touch ID e sekey. Sekey é um agente SSH de código aberto, que armazena chaves secretas em um enclave protegido do Mac e permite usar o Touch ID para a função de acesso.
- Use SSH Single Sign On. Eu escrevi um tutorial para ajudar na configuração desse método (inglês). Uma das vantagens do SSH single sign on é a possibilidade de utilizar as políticas de segurança do seu provedor de identidade — incluindo suporte para autenticação multifatorial (MFA).
Uso seguro do agent forwarding
No SSH, o agent forwarding permite que um nó remoto acesse o agente SSH do seu dispositivo local. Quando você utiliza SSH com o agent forwarding ativado (normalmente via ssh -A), a conexão terá dois canais: sua sessão interativa e o canal para o agent forwarding. Através deste canal, um socket Unix, criado pelo seu agente SSH local, se conecta ao nó remoto. Este é um método arriscado, pois um usuário com acesso root no dispositivo remoto pode acessar seu agente SSH local e potencialmente se passar por você na rede. Ao usar o agente SSH padrão do pacote Open SSH, você pode nem perceber que isso aconteceu. A posse de uma chave U2F (ou Sekey) ajudará a bloquear efetivamente qualquer tentativa de acesso ao seu agente SSH a partir do exterior.
Mesmo com essa medida de precaução, será uma boa ideia usar o agent forwarding o menos possível. Evite usá-lo em todas as sessões — utilize o agent forwarding apenas quando tiver certeza de sua necessidade para a sessão atual.
Saída de uma sessão travada
Interrupção da rede, comportamento descontrolado de programas ou uma sequência de controle que bloqueia a entrada do teclado — todos são possíveis motivos para a quebra de uma sessão SSH.
Você pode encerrar uma sessão travada de várias maneiras:
- Saia automaticamente ao interromper a rede. No seu .ssh/config, adicione o seguinte:
ServerAliveInterval 5 ServerAliveCountMax 1O ssh enviará um echo ao nó remoto a cada ServerAliveInterval segundos para verificar a conexão. Se mais de ServerAliveCountMax ecos não receberem resposta, o ssh encerrará a conexão por timeout e sairá da sessão.
- Sair da sessão. O ssh por padrão usa o símbolo ~ (til) como controlador. O comando ~. fecha a conexão aberta e o retorna ao terminal. (As sequências de controle podem ser digitadas apenas a partir de uma nova linha.) O comando ~? exibirá uma lista completa de comandos disponíveis nesta sessão. Tenha em mente que, para digitar o símbolo ~ em teclados internacionais, pode ser necessário pressionar a tecla ~ duas vezes.
Por que as sessões ficam penduradas? Na época da criação da internet, os computadores raramente eram movidos de um lugar para outro. Quando você usa laptops e alterna entre várias redes WiFi IPv4, seu endereço IP muda. Como o SSH depende de conexões TCP, que, por sua vez, se baseiam em um ponto final com um endereço IP estável, sempre que você alterna entre redes, suas conexões SSH perdem o descritor do socket e, de fato, se perdem. Quando seu endereço IP muda, seu stack de rede leva tempo para detectar a perda do descritor. Quando ocorrem problemas de rede, não queremos que um dos nós em uma conexão TCP a interrompa muito cedo. Portanto, o protocolo tentará re-enviar os dados algumas vezes antes de finalmente desistir. Nesse ínterim, no seu terminal, a sessão parecerá estar congelada. O IPv6 adiciona algumas características relacionadas à mobilidade que permitem que o dispositivo mantenha o endereço de casa durante a troca de rede. Talvez um dia isso deixe de ser um grande problema.
Como manter um terminal permanente aberto em um nó remoto
Existem duas abordagens diferentes para manter a conexão ao mudar entre diferentes redes ou quando você deseja se desconectar por um tempo.
1. Usar ou
Se você realmente precisa de uma conexão que não caia, mesmo ao alternar entre redes, use o Mosh. É um shell seguro que, primeiro, utiliza um handshake SSH, e depois muda para seu próprio canal criptografado durante toda a sessão. Assim, o Mosh cria um canal separado, altamente resistente e seguro, capaz de suportar interrupções de internet, mudança de IP do seu laptop, grandes perdas de conexão e muito mais, tudo graças à mágica das conexões UDP e ao protocolo de sincronização utilizado pelo Mosh.
Para usar o Mosh, você precisará instalá-lo tanto no cliente quanto no servidor e abrir as portas de 60000 a 61000 para o tráfego UDP não conectado até o seu host remoto. Depois, para se conectar, basta usar mosh user@server.
O Mosh opera no nível de telas e pressionamentos de tecla, o que lhe confere várias vantagens em relação à transmissão de um fluxo binário de entrada e saída padrão entre o cliente e o servidor SSH. Se precisamos sincronizar apenas telas e pressionamentos de tecla, então restaurar uma conexão interrompida se torna muito mais fácil. Enquanto o SSH irá armazenar em buffer e enviar tudo que aconteceu, o Mosh apenas precisa armazenar em buffer os pressionamentos de tecla e sincronizar o último quadro da janela do terminal com o cliente.
2. Usar tmux
Se você quer "entrar e sair quando quiser" e manter uma sessão de terminal em um nó remoto, utilize o , demônio. Eu adoro o tmux e o uso constantemente. Se a sua conexão SSH cair, para voltar à sua sessão do tmux, basta reconectar e digitar tmux attach. Além disso, ele possui recursos incríveis como abas e painéis dentro do terminal, semelhantes às abas no terminal do iOS, e a capacidade de compartilhar terminais com outras pessoas.
Alguns gostam de embelezar seu tmux com o Byobu, um pacote que melhora significativamente a facilidade de uso do tmux e adiciona várias combinações de teclas. O Byobu vem incluído com o Ubuntu, e é fácil de instalar no Mac através do Homebrew.
Compartilhando uma sessão remota de terminal com um amigo
Às vezes, ao depurar problemas complexos em seus servidores, pode surgir a necessidade de compartilhar uma sessão SSH com alguém que não está na mesma sala que você. O tmux é uma ótima ferramenta para essa tarefa! Basta seguir alguns passos simples:
- Certifique-se de que o tmux esteja instalado em seu nó de bastião ou em algum servidor com o qual você pretende trabalhar.
- Ambos precisarão se conectar via SSH ao dispositivo, usando uma única conta.
- Um de vocês deve iniciar o tmux para começar a sessão tmux.
- O outro deve executar o tmux attach.
- Voilà! Vocês têm um terminal compartilhado.
Se você deseja sessões tmux multijogador mais avançadas, experimente o tmate, é um fork do tmux que simplifica muito as sessões de terminal colaborativas.
Fonte: habr.com
