Artigo original: The Ultimate Guide to SSH - Setting Up SSH Keys

Boas-vindas ao guia definitivo de configuração de chaves SSH (do inglês, Secure SHell). Este tutorial mostrará para você o básico para a criação de chaves SSH e como gerenciar várias chaves e pares de chaves.

Criando um par de chaves SSH

Abra o terminal e execute o seguinte comando:

ssh-keygen

Você verá o texto a seguir:

Generating public/private rsa key pair.
Enter file in which to save the key (/home/username/.ssh/id_rsa):

Pressione Enter para salvar suas chaves no diretório /home/username/.ssh padrão.

Em seguida, será solicitada a inserção de uma senha:

Enter passphrase (empty for no passphrase):

Recomendamos inserir uma senha aqui para garantir uma camada a mais de segurança. Ao configurar uma senha, você pode evitar o acesso não autorizado aos seus servidores e contas caso alguém ponha as mãos em sua chave privada de SSH ou em sua máquina.

Depois de inserir sua senha e de confirmá-la, você verá o seguinte:

Your identification has been saved in /home/username/.ssh/id_rsa.
Your public key has been saved in /home/username/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:/qRoWhRcIBTw0D4KpTUyK6YepyL6RQ2CQrtWsaicCb4 username@871e129f767b
The key's randomart image is:
+---[RSA 2048]----+
| .o=+....        |
|+.*o+o .         |
|+X.=o o          |
|@.=.oo .         |
|=O ...o S        |
|o.oo . .         |
|.E+ . . . .      |
|oo . ... +       |
|=.. .o. . .      |
+----[SHA256]-----+

Você, agora, tem um par de chaves, pública e privada, de SSH, que você pode usar para acessar servidores remotos e para lidar com a autenticação em programas de linha de comando, como o Git.

Gerenciando diversas chaves SSH

Embora seja considerada uma boa prática ter apenas um único par de chaves pública e privada por dispositivos, há situações nas quais você necessita ter diversas chaves ou nas quais você tem nomes de chave não incomuns. Por exemplo, você pode estar usando um par de chaves SSH para trabalhar nos projetos internos de sua empresa, mas usará um par diferente de chaves para acessar os servidores de um cliente. Além disso, você pode usar um par diferente de chaves para acessar seu próprio servidor privado.

Gerenciar chaves SSH pode acabar sendo trabalhos quando você precisa usar uma segunda chave. Tradicionalmente, você usaria ssh-add para armazenar suas chaves no ssh-agent, digitando a senha para cada chave. O problema é que você precisaria fazer isso sempre que você reiniciasse seu computador, o que pode se tornar entediante bem rápido.

Uma solução melhor seria automatizar a adição de chaves e o armazenamento de senhas, especificando que chave usar ao acessar um servidor específico.

config no SSH

É aí que aparece o config do SSH, que é um arquivo de configuração por usuário para a comunicação por meio do SSH. Crie um arquivo ~/.ssh/config e abra-o para a edição:

nano ~/.ssh/config

Gerenciando chaves de SSH com nomes personalizados

A primeira coisa que vamos resolver ao usar esse arquivo config é evitar ter de adicionar chaves de SSH com nomes personalizado usando o ssh-add. Assumindo que sua chave de SSH privada seja chamada de ~/.ssh/id_rsa, adicione o seguinte ao arquivo config:

Host github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa
  IdentitiesOnly yes

Em seguida, certifique-se de que ~/.ssh/id_rsa não esteja no ssh-agent abrindo outro terminal e executando o seguinte comando:

ssh-add -D

Esse comando removerá todas as chaves da sessão do ssh-agent ativa neste momento.

Se, agora, você tentar fechar um repositório do GitHub, seu arquivo config usará a chave que está em ~/.ssh/ida_rsa.

Aqui temos alguns exemplos úteis de configuração:

Host bitbucket-corporate
        HostName bitbucket.org
        User git
        IdentityFile ~/.ssh/id_rsa_corp
        IdentitiesOnly yes

Você, agora, pode usar git clone git@bitbucket-corporate:company/project.git

Host bitbucket-personal
        HostName bitbucket.org
        User git
        IdentityFile ~/.ssh/id_rsa_personal
        IdentitiesOnly yes

Também é possível usar git clone git@bitbucket-personal:username/other-pi-project.git

Host myserver
        HostName ssh.username.com
        Port 1111
        IdentityFile ~/.ssh/id_rsa_personal
        IdentitiesOnly yes
        User username
        IdentitiesOnly yes

Por fim, você pode usar o SSH em seu servidor com ssh myserver. Já não é mais necessário inserir uma porta e um nome de usuário sempre que precisar do SSH para acessar seu servidor privado.

Gerenciamento de senhas

A última dica tem a ver com o gerenciamento de senhas. Pode ser um tédio ter de inserir uma senha sempre que você inicia sua conexão com o SSH. Para contornar isso, podemos usar o software de gerenciamento de senhas que vem com o macOS e com várias distribuições do Linux.

Para este tutorial, usaremos o programa Keychain Access do macOS. Comece adicionando sua chave ao Keychain Access passando a opção -K ao comando ssh-add:

ssh-add -K ~/.ssh/id_rsa_whatever

Você, agora, pode ver sua chave de SSH no Keychain Access.

Se, no entanto, você remover as chaves do ssh-agent com ssh-add -D ou se reiniciar seu computador, será solicitada a sua senha novamente quando você tentar usar o SSH. Ocorre que ainda é necessário fazer mais uma configuração. Abra seu arquivo config do SSH com o comando nano ~/.ssh/config e adicione o seguinte:

Host *
  AddKeysToAgent yes
  UseKeychain yes

Com isso, sempre que você executar o ssh, ele buscará pelas chaves no Keychain Access. Se encontrar uma, sua senha não será mais solicitada. As chaves também serão adicionadas automaticamente ao ssh-agent sempre que você reiniciar sua máquina.

Agora que você sabe o básico sobre a criação de chaves SSH se sobre o gerenciamento de diversas chaves, fique à vontade para usar o ssh sempre que você quiser!