Criando acesso ssh sem senha – Relacao de confianca ssh

Resumo:

Servidor A acessar o servidor B sem que (b) solicite senha.

Sendo a chave ja criada no servidor A (id_rsa.pub) copia-la para o servidor B colocando-a em .ssh/authorized_keys
Dar a permissão chmod 640 authorized_keys

Lembrando que o usuário de acesso tem que ser o usuário no qual contem a chave.

——————————————

Creditos: Angelo – http://blogdonerd.com.br/2010/09/estabelecendo-relacao-de-confianca-ssh-entre-servidores-linux/#passo1

Caso nao consiga visualizar o link acima:

Quando se realiza backup de um servidor linux para outro através de scripts via SSH, é extremamente importante a utilização de relação de confiança entre os servidores. A relação de confiança permite que um usuário de um servidor linux se conecte via ssh em outro servidor linux sem precisar digitar senha alguma.

Isto pode soar estranho num primeiro momento, mas é algo extremamente importante e seguro quando implementado corretamente.

É muito melhor ter a relação de confiança via SSH do que configurar senhas em texto puro em scripts de automatização de backup e outras atividades. Aliás, não é só para backup que a relação de confiança pode ser utilizada. Já configurei este tipo de confiança para melhorar a segurança de conexões inseguras como MySQL e permitir uma conexão permanente de um servidor a outro na Internet. Também já utilizei este tipo de relação para acesso remoto a servidores, porém neste caso adicionando uma senha extra no certificado de autenticação da relação de confiança.

Este pequeno tutorial descreve os passos para estabelecer relação de confiança entre servidores Linux Ubuntu, porém pode ser aplicado para outras distribuições também, inclusive para outros sistemas operacionais. Ele faz parte da série de tutoriais sobre Backup de servidores Linux.

Pré-Requisitos
Você vai precisar de dois servidores Linux Ubuntu com o serviço de SSH instalado e habilitado e também do utilitário ssh-keygen, que normalmente já vem instalado junto com o SSH. Se você não tiver o SSH instalado execute:

$ sudo apt-get install ssh
Além disso você vai precisar das credencias de acesso de duas contas de usuário, uma em cada servidor onde será configurada a relação de confiança.

Tutorial
Iremos utilizar dois servidores: Servidor1 e Servidor2 e dois usuários: usuário1 e usuário2, onde usuário1 é uma conta de usuário do Servidor1 e usuário2 uma conta de usuário do Servidor2.

A idéia é configurar uma relação de confiança de modo que o usuário1 consiga, a partir de uma sessão no Servidor1, acessar o Servidor2 utilizando as credenciais do usuário2, sem digitar nenhuma senha. Em outras palavras, o usuário2 do Servidor2 confia no usuário1 do Servidor1, e por isso não pede senha.

Isto é feito baseado em criptografia assimétrica, onde o usuário1 possui duas chaves: uma pública e uma privada. O conceito é simples: tudo o que for criptografado com a chave pública só pode ser descriptografado com a chave privada e vice-versa (o que for criptografado com a chave privada só pode ser descriptografado com a chave pública).

A chave pública do usuário1 é colocada em um lugar específico da conta do usuário2, de forma que o serviço de SSH do Servidor2 consiga verificar a autenticidade do usuário1 através da criptografia e descriptografia de mensagens utilizando o par de chaves pública e privada do usuário1.

O que vamos fazer é:

Gerar o par de chaves (pública/privada) do usuário1
Copiar a chave pública do usuário1 para o Servidor2
ATENÇÂO: Jamais configure relação de confiança onde o usuário2 possua privilégios administrativos ou pior ainda se ele for o root do Servidor2. Se alguém conseguir comprometer o Servidor1, poderá facilmente acessar o Servidor2 através da relação de confiança. É claro que o atacante precisa saber que esta relação existe, mas isso não é muito difícil de se descobrir pesquisando em logs de execução, agendamento de scripts e outros arquivos. Também não recomendo que o usuário2 tenha privilégios para executar comandos como root (sudo). Apesar de ainda ser necessário digitar a senha do usuário2 para permitir a execução de comandos como root, um outro tipo de falha com o sudo poderia comprometer o servidor.

A figura abaixo ilustra as relações de confiança que podem e as que não devem ser feitas:

1. Gerar o par de chaves (pública/privada) do usuário1
Abra uma janela do shell ou se conecte via SSH ou console no Servidor1 com as credenciais do usuário1 e digite o seguinte comando:

$ ssh-keygen -t rsa
O ssh-keygen irá solicitar um caminho para armazenar a chave privada. Pressione enter para deixar o padrão. Irá solicitar também uma senha (passphrase) para proteger o par de chaves. Deixe em branco simplesmente pressionando enter. É importante que a passphase seja em branco pois senão teriamos que digitá-la toda vez que nos conectarmos ao Servidor2, e é justamente o que não queremos. Seu par de chaves será gerado e a saída (para o Ubuntu 10.04) será a seguinte:

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/usuário1/.ssh/id_rsa):
Created directory ‘/home/usuário1/.ssh’.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/usuário1/.ssh/id_rsa.
Your public key has been saved in /home/usuário1/.ssh/id_rsa.pub.
The key fingerprint is:
ef:55:a6:8c:dc:21:02:78:e4:d5:b0:45:42:a9:ae:c4 usuário1@Servidor1
The key’s randomart image is:
+–[ RSA 2048]—-+
| … oo |
| ..+ . .. |
| .o = o |
| . o + |
|.. S . . o |
| A. + = = |
|.. + = |
|. . . |
| . |
+—————–+
Dois arquivos são gerados:

/home/usuário1/.ssh/id_rsa: Contém a chave privada e deve ser mantido em segredo.
/home/usuário1/.ssh/id_rsa.pub: Contém a chave pública e deverá ser exportado para onde precisarmos da relação de confiança.
2. Copiar a chave pública do usuário1 para o Servidor2
No Servidor2 crie a pasta /home/usuário2/.ssh, caso ela ainda não exista, e configure permissão 700. Para fazer isso, digite, no Servidor2:

$ mkdir /home/usuário2/.ssh
$ chmod 700 /home/usuário2/.ssh
Copie o conteúdo do arquivo id_rsa.pub do usuário1 para o arquivo /home/usuário2/.ssh/authorized_keys. Você pode fazer isso digitando, no Servidor1, o seguinte comando:

$ cat /home/usuário1/.ssh/id_rsa.pub | ssh usuário2@Servidor2 ‘cat – >> ~/.ssh/authorized_keys’
Agora é só logar no Servidor2 a partir do Servidor1, sem precisar de senha:

$ ssh usuário2@Servidor2
A primeira vez que se conectar no Servidor2 uma mensagem informando que a autenticidade do host não pode ser estabelecida será mostrada. Você terá que responder yes para prosseguir. Isso irá guardar uma cópia da chave pública do Servidor2 no arquivo /home/usuário1/.ssh/know_hosts do Servidor1. Uma vez armazenada esta chave a pergunta de autenticidade nunca mais será solicitada, a não ser que o servidor ou seu hostname sejam alterados.

Para copiar um arquivo do Servidor1 para o Servidor2 você pode utilizar o scp:

$ scp arquivo_de_origem usuário2@Servidor2:caminho_de_destino
Por exemplo, para copiar o arquivo /etc/issue do Servidor1 para a pasta /tmp do Servidor2 digite:

$ scp /etc/issue usuário2@Servidor2:/tmp
Observações
Em caso de falhas de autenticação, verifique o final do arquivo /var/log/auth.log no Servidor2:

$ tail /var/log/auth.log
As falhas mais comuns estão relacionadas à permissão e propriedade das pastas. A pasta home do usuário tem que pertencer a ele mesmo e não pode ter permissão de escrita para grupos e outros. A pasta .ssh não pode ter permissão alguma para grupos e outros.

Você pode criar relações de confiança de vários servidores para um único, bastando para isso adicionar mais chaves públicas no arquivo authorized_keys utilizando o mesmo comando mostrado no passo 2.

Espero que o artigo tenha sido útil. Qualquer dúvida, sugestão ou relato de erros é só postar nos comentários.

Deixe um comentário