Início > Programação > SSH Com Chave Pública

SSH Com Chave Pública

Recentemente, decidimos utilizar a classe Robot do AWT em associação com o fest para automatizar os testes da interface gráfica. Falarei sobre a implementação do teste automatizado em outro artigo. Nesse artigo falarei sobre um problema que tive com a autenticação do SSH e como resolvi utilizando chave pública e privada.

SSH

Alguns módulos do nosso sistema rodam em servidores remotos. Para que algumas ações possam ser realizadas por um usuário (no caso dos testes automatizados o usuário é o próprio Robot), outras ações – esplícitas, dependentes de terceiros ou dependentes de temporização – devem ocorrer nos servidores. Para simular as chamadas “ações de terceiros”, precisamos executar scripts nos servidores via SSH.


O SSH (Secure Shell) é um protocolo de rede que permite a troca de dados entre dois dispositivos de rede através de um canal seguro. Servidores SSH necessitam de usuário e senha. Como nossos servidores utilizam um usuário fixo e os scripts que rodam lá dependem de permissões atribuídas a esse usuário, não seria a melhor escolha criar um usuário para cada desenvolvedor em cada servidor. Para emular um login automático, decidimos utilizar chave pública e privada. De acordo com a wikipedia:

A criptografia de chave pública ou criptografia assimétrica é um método de criptografia que utiliza um par de chaves: uma chave pública e uma chave privada. A chave pública é distribuída livremente, enquanto a chave privada deve ser conhecida apenas pelo seu dono.

Basicamente, quem detém a chave pública – criada no mesmo momento que a chave privada – pode acessar o dispositivo de rede, que é o detentor da chave privada.

Abaixo, segue o processo para criação do par de chaves pública e privada. Não é necessário repetir esse processo para cada host remoto. Basta fazer apenas uma vez e copiar a chave privada para o diretório .ssh de cada host remoto. Detalhe: segurança não é nosso objetivo :) .

Passos Para Criação das Chaves Pública e Privada

1. Autenticar no ssh server

$ ssh -l [USER] [HOST_NAME]

2. Criar o par de chaves pública/privada

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/atc/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/atc/.ssh/id_rsa
Your public key has been saved in /home/atc/.ssh/id_rsa.pub
$ cd ~/.ssh
$ cat id_rsa.pub >> authorized_keys
$ chmod 600 authorized_keys

Obs.: Não utilize passphrase.

3. Faça log out e crie, caso não exista, o diretório .ssh

$ cd ~
$ mkdir .ssh
$ chmod 700 .ssh

4. Copie o arquivo id_rsa gerado no servidor para o diretório local .ssh

$ cd ~/.ssh
$ rcp atc@[HOST_NAME]:/home/atc/.ssh/id_rsa .

5. Faça o login via ssh

$ ssh -l [USER] [HOST_NAME]

Agora não é mais necessário fornecer o password.

Resolvendo Problemas

Caso você enfrente algum problema, faça a autenticação em modo debugg para ter o mínimo de informações:

$ ssh -v -l [USER] [HOST_NAME]

Caso esteja tudo certo, algo assim será exibido no terminal:

debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug1: Next authentication method: publickey
debug1: Offering public key: /Users/res/.ssh/res-rsa
debug1: Server accepts key: pkalg ssh-rsa blen 151
debug1: PEM_read_PrivateKey failed
debug1: read PEM private key done: type
Enter passphrase for key '/Users/res/.ssh/res-rsa':
debug1: read PEM private key done: type RSA
debug1: Authentication succeeded (publickey).

Enfrentei dois problemas na primeira vez em que tentei gerar as chaves: falta da permissão 700 no diretório .ssh do servidor e falta da permissão 600 no conteúdo do diretório .ssh. No processo para criação das chaves já coloquei os passos para alteração de permissão.

Referências

http://www.snailbook.com/faq/publickey-userauth.auto.html
http://magicmonster.com/kb/net/ssh/auto_login.html
http://www.linuxquestions.org/questions/linux-security-4/ssh-public-private-key-authentication-problems-454445/

  1. Jorge
    22/11/2011 às 11:22 AM | #1

    Otimo post, obrigado. Adiciono a este um outro problema que enfrentei:
    O diretório do home user no server remoto não pode estar com FULL permissão ( 777)
    Altere esta permissao para 755 (chmod 755 )

  1. Nenhum trackbacks ainda.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Sair / Alterar )

Imagem do Twitter

You are commenting using your Twitter account. Sair / Alterar )

Foto do Facebook

You are commenting using your Facebook account. Sair / Alterar )

Connecting to %s

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.