ssh com multiplas chaves no osx

Uma das formas mais interessantes, práticas e seguras de acessar um host por ssh é fazer isto através de chaves, o processo de configuração de chaves é rápido e eficiente, contudo, muita gente tem dúvida de como utilizar múltiplas chaves, abaixo vou mostrar como fazer isto.

1. Gerando chaves

Estou utilizando OSX Mavericks para esse exemplo. Abra seu terminal para começarmos a gerar a primeira chave, por exemplo para o provedor dreamhost.

ssh-keygen

Digite o local e nome da chave quando consultado

/Users/gutocarvalho/.ssh/dreamhost

Especifique uma senha em formato de frase (passphrase), não use senhas em branco.

Generating public/private rsa key pair.
Enter file in which to save the key (/Users/gutocarvalho/.ssh/id_rsa): /Users/gutocarvalho/.ssh/dreamhost
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/gutocarvalho/.ssh/dreamhost.
Your public key has been saved in /Users/gutocarvalho/.ssh/dreamhost.pub.
The key fingerprint is:
3a:21:f4:9b:12:6c:0f:4f:87:d7:ce:1a:f0:e3:2b:b2 gutocarvalho@kaiten.local
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|    .            |
|   o . . .       |
|    * * S .      |
|   . B X o       |
|    . B + o      |
|    ...o +       |
|    Eo .+.       |
+-----------------+

Agora vamos criar uma segunda chave para outro provedor, por exemplo digitalocean.

ssh-keygen

Digite o local e nome da chave quando consultado

/Users/gutocarvalho/.ssh/digitalocean

Especifique uma senha em formato de frase, não use senhas em branco.

Generating public/private rsa key pair.
Enter file in which to save the key (/Users/gutocarvalho/.ssh/id_rsa): /Users/gutocarvalho/.ssh/digitalocean
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/gutocarvalho/.ssh/digitalocean.
Your public key has been saved in /Users/gutocarvalho/.ssh/digitalocean.pub.
The key fingerprint is:
a0:34:03:59:c5:59:12:13:af:85:a3:1c:eb:18:08:f0 gutocarvalho@kaiten.local
The key's randomart image is:
+--[ RSA 2048]----+
|. .o.o*=.        |
|....  o=         |
|. E = + o        |
|.. o B =         |
|. . = . S        |
|   +             |
|  . .            |
|                 |
|                 |
+-----------------+

2. Configurando acessos

Maravilha, as duas chaves foram criadas, agora vamos criar o arquivo config dentro de /Users/gutocarvalho/.ssh em seu OSX, é neste arquivo que vamos configurar qual chave deve ser utilizada para cada host, veja o exemplo.

Host dreamhost
	HostName gutocarvalho.net
	PreferredAuthentications publickey
	IdentityFile ~/.ssh/dreamhost
	User gutocarvalho

Host digitalocean
	HostName mesintogravida.com.br
	PreferredAuthentications publickey
	IdentityFile ~/.ssh/digitalocean
	User gutocarvalho

3. Autorizando acessos

Agora acesse o host de destino gutocarvalho.net e adicione o conteúdo do arquivo gutocarvalho.pub - que foi criado no OSX - ao arquivo /home/gutocarvalho/.ssh/authorized_keys do servidor remoto (dreamhost), o conteúdo da chave púbica será algo assim

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDOTGdNlaMrOtUTpKsWyhM3h0Hw4Kym2mtIO95pxZN8JKCMHTb9xn2ZqA87wTPDHXYQVDNYHyZMiRrTX+dYQcGx+d+W9qZncxWPZtrqOyxWIT9WrTn4M40nFTB0tyBD+0XnD8WZdef5L+/wueRqC+T8zLgZb6peHSkGWuj2tdnf/LcGzZ7CgK6r0yVSUFxCEFr9wtYx0rtV0rovTwHJVpvv8jbA9N8QFfA7WCv/Xtz3UpJL1tuj0/IN+VPXyHYKU9u9fq28U1lU3MfPR3nVayQyh+Ddp6ZzKLW2PwmSRdth/6BTYSdQ+9OiwQxYj3A+QsXcJ3M6UNPTuOcLFuTTvFJJ gutocarvalho@domain

Depois acesse o segundo host de destino (digitalocean), aqui no exemplo mesintogravida.com.br e faça o mesmo procedimento, desta vez com o conteúdo do arquivo mesintogravida.pub criado no OSX.

Se o arquivo já existir, apenas acrescente a linha.

Após criar ou modificar o arquivo, inserindo a chave pública, deslogue do servidor.

4. Testando acessos

Agora vamos tentar acessar o servidor

ssh dreamhost

Se tudo der certo o OSX vai pedir a senha da chave, digite a senha e ela será salva no chaveiro (keychain), uma vez no keychain, a senha não será solicitada em futuros acessos.

Last login: Sun Jun  8 03:34:36 2014 from 191.176.xxx.xxx
[gutocarvalho.net]$

mais um teste

ssh digitalocean

Acompanhe a saída

Last login: Sun Jun  8 05:34:36 2014 from 191.176.xxx.xxx
[mesintogravida.com.br]$

Beleza, funcionou perfeitamente.

5. Conferindo Permissões

As chaves privadas devem ter permissão 600.

As chaves públicas devem ter permissão 644.

O arquivo authorized_keys deve ter permissão 600.

Se as permissões não estiverem corretas nestes arquivos o acesso por chaves não vai funcionar.

6. Referências