Infotech Notes

9/Junho/2009

Autenticação por chaves

Arquivado em: Uncategorized — Gustavo @ 2:18 pm

Para quem não tem muita paciencia em ficar digitando a sua senha cada vez que se loga em uma máquina linux/unix, ou para quem executa scripts que vez ou outra necessitam obter informações de máquinas remotas, existe uma maneira de realizar um acesso seguro, através de SSH, para obter estas informações.

O legal do SSH, é que voce pode realizar um acesso com o comando e obter o resultado facilmente.

Por exemplo, imagine que voce criou um script chamado script.sh e que roda no servidor A e que este script necessita obter alguma informação que está no servidor B. Só que para obter esta informação, é necessário que voce se logue no servidor B, execute um comando, e pegue este resultado para continuar trabalhando.

Isto pode ser feito assim:

[user@serv-a ~]$ ssh -l user@serv-b

user@serv-b’s password:
Last login: Tue Jun  9 12:07:20 2009 from serv-c

[user@serv-b ~]$

[user@serv-b ~]$ ps -ef | grep nscd

nscd     22431     1  0 Apr28 ?        00:00:03 /usr/sbin/nscd

[user@serv-b ~]$ exit

[user@serv-a ~]$

Em resumo, voce loga na maquina remota, informa seu usuario e senha, executa o comando e volta pra sua maquina anterior.

Se isto for feito uma única vez, então não há qualquer problema, mas imagine realizar isto várias vezes ao dia, ou então usar um script para verificar se o NSCD está no ar, e se não estiver, então o processo deve ser re-iniciado.

O grande problema aqui é a autenticação. Não é possível executar comandos de shell usando HTTP (não de maneira simples ou automatizada) ou FTP. Deve-se utilizar o SSH.

Para fazer com que este “problema” de autenticação não atrapalhe o seu script, voce deve usar chaves para realizar a autenticação.

Faça assim:

[user@serv-a ~]$ ssh-keygen -t rsa -b 2048
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/id_rsa.
Your public key has been saved in /home/user/.ssh/id_rsa.pub.
The key fingerprint is:
6d:9f:70:8a:b1:78:ea:12:85:49:d1:ac:ef:15:74:c7 user@serv-a
[user@serv-a ~]$

Este comando vai gerar um par de chaves pública/privada, com o algoritmo RSA, com tamanho 2048 bits.

Os arquivos estão localizados em /home/user/.ssh

O arquivo id_rsa é a chave privativa e o arquivo id_rsa.pub é a chave pública.

Agora faça um login no servidor b, e copie o conteúdo do arquivo id_rsa.pub para o arquivo /home/user/.ssh/authorized_keys

Salve e saia, deslogue do servidor B e refaça o login no servidor B. Voce verá que a sua senha não será mais pedida.

Aqui vai uma dica. Para executar o seu comando mostrado acima, execute o comando e veja o resultado:

[user@serv-a ~]$ ssh -l user@serv-b “ps -ef | grep nscd”

nscd     22431     1  0 Apr28 ?        00:00:03 /usr/sbin/nscd

[user@serv-a ~]$

O único cuidado que voce precisa ter é que se alguém obtiver uma cópia de seu arquivo id_rsa, esta pessoa poderá usar seu login para acesso a qualquer máquina que tenha a sua chave pública.

É por isso que o arquivo id_rsa tem modo 0600 e o diretório .ssh tem modo 700.

Blog no WordPress.com.