quarta-feira, 14 de março de 2012

Login SSH com chave privada

Para evitar o fato de memorizar senhas dos usuário para fazer login SSH, ou ficar adicionando as chaves públicas ao authorized_keys do servidor, uma saída é utilizar chave privada para fazer o login via SSH. Este é o método utilizado para fazer login nos servidores da Amazon.

Vamos começar configurando as permissões de acesso no servidor, depois passaremos para o cliente (máquina local).
O primeiro passo é criar um diretório chamado .ssh na pasta home do usuário (no servidor).

sauron@mordor:~$ mkdir .ssh

Quando o diretório é criado, ele fica com permissão do tipo 755 (drwxr-xr-x). Mas nehum outro usuário deve ter acesso a esse arquivo (nem mesmo para leitura). Então nós alteramos as permissões do diretório com o comando chmod:

sauron@mordor:~$ chmod 700 .ssh

Agora só o dono do diretório (o usuário atual) é que tem permissão no diretório (drwx------).

O próximo passo é gerar a chave privada. Para isso nó utilizamos um aplicativo que vem junto com o ssh chamado ssh-keygen:

sauron@mordor:~$ ssh-keygen -f private-key
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in private-key.
Your public key has been saved in private-key.pub.
The key fingerprint is:
21:b3:c9:31:a3:c4:00:5c:fe:a6:c2:4e:57:75:87:e8 sauron@mordor
The key's randomart image is:
+--[ RSA 2048]----+
|o.o.             |
| ..o    . .      |
|   .o *o.o .     |
|   ..ooO...      |
|    .++ES        |
|.   +            |
| + o             |
|o o              |
| .               |
+-----------------+

A opção -f serve para indicar o nome do arquivo, neste caso eu chamei de private-key. Vai ser pedido uma passphrase para gerar a chave, mas você pode deixar em branco.
Depois disso serão criados os arquivos private-key e private-key.pub, representando a chave privada e chave pública, respectivamente.

Agora devemos renomear o arquivo private-key.pub para authorized_keys, e colocá-lo no diretório .ssh que nós criamos.

sauron@mordor:~$ mv private-key .ssh/authorized_keys

Este arquivo vai estar com a permissão do tipo 644, devemos deixá-lo como 600:

sauron@mordor:~$ chmod 600 .ssh/authorized_keys

Sobrou o arquivo private-key, que será utilizado como chave de acesso ao servidor. Então devemos copiá-lo para a máquina local (cliente). Você pode utilizar o comando scp para fazer a transferência do arquivo do servidor para o cliente. Mas podemos evitar esse trabalho simplesmente copiando o conteúdo do arquivo para a área de transferência e depois criar um arquivo no cliente (com o mesmo nome, private-key) e colar o conteúdo copiado nele.

sauron@mordor:~$ cat private-key
-----BEGIN RSA PRIVATE KEY-----
MIIEoQIBAAKCAQEAwDg2czXOQX7Ns6GYL+luTTFXeHewumb866VcUX9eHBzXSFBY
NyBcOGq2tlm289JLMZHxo4YIObFRfTZ9IOnpQEmYtBV5x+ypTBcPXOkFLivj5bAT
t1PNK1AkHjXzUZY0eTTLkMuNSW0rD4vV7E3HqIb3UIZ7PiDCefzrMMUeytRXbUd0
2OyXxsqX7ROWtsoaykOc/0IGGItyG5NTcPepKMPGYixkKWeicFlvJUBQAItuMRBq
kSBMssD0j1IYeYlCmkRk7eLecKuI3edwqKvbpntSgbSlmsff5AHA+vhW99nfkiWz
8UOeEuqZOncVYjP655lJZIdgk+hkDtCLfIkVwwIBIwKCAQEAurpDhdx/OE9Le0yF
Ndtydt95ivftgeBjaJIB6MTfE/7CgMMT3ceqCutSZ/9hRKBmTWkz4K4WnnG84AkL
1tSZcaaUVyrOEqtiobAAS6CIsIJoW3fYo3X6gdjSoQE1gnSoALbxopnZtQr2oWNE
1ux4z5kNgWyyPFpWhSGUA32o4kjuRl9pput+iDd/USu/HYBjc1FpDOvpiUq0LJpd
7PP6Wh52BAhzY2hOeMpMLQacbp4ZEAQMVU+wRugCLyuzfSZhmOgV1+WjHdROyso0
glkzogIa1g4RaggVMMPnmWI2mWfe3G2ESki+ne9o2/DwnjK8J3t4BLxmWM2QdIox
m9yR+wKBgQDr5Fdn7nHO2NCBOQ7qMWfOYeHx8c87Ass4LFi3GuyhMcNEbiGdSEpo
i5ne2yZGq1FH1TWBQ53o7QXP/xDyx1KYhn4kA5n6yDBjB3yq5+5G5AbgEo4tix+U
VoOBG6dDClsSSCgE8h4zNGSGG/rEPsejslFmnr13mBSQPX66XxbazwKBgQDQmtkg
KA/kyype74TRMk8TNW++6Y8AU7cXDJu0Hlsr5YbMOy9BCdd/s7MUslb+41sqrUAn
5qFMba4xX7JHR/iQ50/QE5E0NvNrUPT5HHDQjJ907ScLyCeBCHhY/ag2E1ekG8ku
WFMA/7VFSyJogJJ3Zv19z/jpCdMKaGk0oqXCzQKBgFDgkv8P7IFu6GbRu/iF97R5
VMf7Inqh30Z1msJvoZZaNFH536Ojwb1xsRk1MbHUVmHFcW4lz72TF++KprmjbMaU
gwUIjJB/JohaVqD/D93KhgOulyWOyP+ooh2jFMaHNSrW6SZEYiAvOGh+nx62cFVh
tYJFDcKairUcZfbBhC3DAoGAEeFjEWKFBPt4qQ03RSGRv9FhWYG7zNP5wCWm8i58
1+B5RLSdpn0vun0d+nWvr3KSySTK/BsVI87jC4vcFL0GrVWnwWDDTZ5PYPhPgxEQ
++7L1tJ/sI1/uppTdVeSE0N8imjIGepQQeoIOSOyffxkU2CZYo4rRyy6UVloGnRX
WdcCgYBhCMnOJ80wTWnFDfZ6VJwxnkcPf6V9G/P0EP5BpWnP355pjnhhSDyGk+eJ
tkDxKPy7l18+sLqV8PNbeHdQpA4YGBkP1CSiPhPcap4jYOot+hcLu7fn7ApVl/jd
yhAR7GpXE0x/5VE4zyB3vEqTPQTggZ/nuUUqbU5HFj83iFDgzg==
-----END RSA PRIVATE KEY-----

Copie o conteúdo do seu arquivo e cole no novo arquivo na máquina local.
Este novo arquivo do cliente deve ter a permissão do tipo 600:

sauron@local:~$ chmod 600 private-key

Depois que fizer isso você deve excluir o arquivo private-key do servidor:

sauron@mordor:~$ rm private-key

Agora você já tem a chave privada na máquina local (arquivo private-key), e o servidor já está preparado para aceitar essa chave como válida (através do arquivo .ssh/authorized_keys).

Para logar no servidor, utilizamos o seguinte comando:

sauron@local:~$ ssh -i private-key sauron@ip_do_servidor

Pronto, logando no servidor com chave privada.

Nenhum comentário:

Postar um comentário