Gerar uma chave SSH (se você não tiver uma)
Se acontecer de você usar o GNOME, o aplicativo cavalo-marinho ("Senhas e chaves de criptografia") pode fazer isso por você: Arquivo - > Novo - > Secure Shell Key .
Se você preferir terminal, execute ssh-keygen -t <type>
para gerar um par de chaves. Os tipos de par de chaves válidos são:
- rsa: o padrão
- dsa: mais ou menos equivalente, exceto restrito a chaves de 1024 bits
- ecdsa: mesma segurança com chaves menores, mas relativamente nova e um pouco rara no software SSH.
- ed25519: Alta segurança (mais resistente a ataques de canal lateral e geradores de números aleatórios fracos). Geração de assinatura muito rápida. Muito novo. Disponível somente em OpenSSH > = 6.5 .
O programa solicitará uma senha longa e um local onde salvar a nova chave. Recomenda-se usar o caminho padrão sugerido, porque todas as outras ferramentas o procurarão lá.
Envie a chave pública para o servidor remoto
Mais uma vez, o cavalo-marinho pode fazer isso por você - em My Personal Keys , clique com o botão direito na chave SSH e escolha Configurar chave para shell seguro .
Ou, ssh-copy-id -i ~/.ssh/id_rsa.pub remote-user@remote-host
no terminal.
Ou, completamente manualmente, passo a passo:
- Crie um diretório (se já não existir) chamado
.ssh
no diretório inicial do usuário remoto no host remoto. - Nesse diretório, crie um arquivo chamado
authorized_keys
(se ainda não existir). - Caso seu controle remoto
umask
seja mais liberal que o normal, deixe o arquivo não gravável em grupo:chmod go-w ~/.ssh ~/.ssh/authorized_keys
. - Finalmente, copie (anexando) o conteúdo da sua chave pública local (
~/.ssh/id_rsa.pub
) no arquivo~/.ssh/authorized_keys
remoto.
Carregue a chave no agente ssh
Se você carregar sua chave privada em um agente ssh , ela manterá a chave descriptografada na memória. Queremos que isso evite reinserir a senha sempre que entrarmos em um servidor.
Primeiro, o agente deve ser iniciado ou o caminho de um soquete de comunicação iniciado deve ser carregado em uma variável. Executar o ssh-agent em um terminal gerará comandos para atribuir e configurar as variáveis do agente. Esses comandos podem ser salvos em um arquivo para uso em um terminal diferente. Como alternativa, pode-se executar esses comandos e esquecer de reutilizar o mesmo agente em outro terminal. por exemplo: eval $(ssh-agent)
.
Carregar a chave é uma simples questão de executar ssh-add
e passar a senha.
Se você estiver usando o GNOME, o gnome-keyring-daemon geralmente fornece a mesma funcionalidade de agente SSH que o ssh-agent, então você não precisa iniciar nada. O GNOME também carregará e desbloqueará automaticamente a chave no login.
Shell no servidor remoto sem uma senha
Se tudo foi feito corretamente, usar ssh user@server
não solicitará uma senha. Se algo estiver errado com o agente e não com a chave, você será solicitado a digitar a frase secreta da chave e não a senha da conta do usuário.
Qualquer coisa que use ssh para comunicação funcionará sem inserir a senha da conta de usuário quando a chave correta for carregada no agente. Programas como scp , sftp e rsync fazem uso disso.
Notas:
- Você só precisa de uma chave SSHv2, pois o SSHv1 é muito inseguro e não é usado.
- Você também precisa apenas de um tipo de chave - o RSA ou o DSA é suficiente. (O ed25519 e o ECDSA são recentes e, portanto, não são suportados em todos os lugares).
- Todas essas etapas são as mesmas para as chaves RSA e DSA. Se você usar o DSA, use
id_dsa
em vez deid_rsa
e o ECDSA teráid_ecdsa
. - Os servidores OpenSSH anteriores ao 3.0 usaram
authorized_keys2
- mas é improvável que você encontre algo com mais de 5.0 em uso. - Estas instruções aplicam-se apenas ao OpenSSH versão 3.0 e mais recente.
lsh
,ssh.com
e outros (Unix e não) servidores SSH não estão incluídos neste tutorial.
Exemplos:
-
Copiando a chave pública para um host remoto:
ssh-copy-id -i ~/.ssh/id_rsa.pub myaccount@remotehost # this cat ~/.ssh/id_rsa.pub | ssh myaccount@remotehost \ 'mkdir -p ~/.ssh ; cat >> ~/.ssh/authorized_keys' # or this
- Salvando variáveis do agente para reutilizar (exemplo elaborado)
ssh-agent > ~/.ssh/cross-terminal-agent . ~/.ssh/cross-terminal-agent