SSH: Chave privada e pública = ssh sem senha

Aproveitando o post do Franklin “SSH: confiança entre servidores” de Janeiro de 2009, vou explicar outro aspecto em que é válido usar a chave SSH…

Resumindo serve para não pedir senha na hora de acessar outra máquina via SSH partindo de sua estação de trabalho, ou, para efeito de maior segurança, permitir que outras máquinas sejam acessadas via SSH sem senha, mas apenas após você digitar uma passphrase (senha da sua chave) em sua estação de trabalho.Existe a chave privada (que fica na sua máquina) e a pública (que você distribui nas outras máquinas).

Tudo começa executando com seu usuário local o comando ssh-keygen (sim, somente ele sem parametros mesmo ja serve) para gerar sua chave privada do SSH, que por padrão é de criptografia RSA e fica em sua estação de trabalho no ~seu_home/.ssh/id_rsa

A chave pública (que deverá ser distribuída nas demais máquinas linux da rede) fica em sua estação de trabalho no ~seu_home/.ssh/id_rsa.pub logo após a execução do comando ssh-keygen e digitação de sua senha.

O conteúdo do arquivo ~seu_home/.ssh/id_rsa.pub da sua estação de trabalho (sua chave pública) deve ser colocado dentro do arquivo ~seu_home/.ssh/authorized_keys de todas as máquinas que você deseja acessar via SSH com chave.

Comando automatizado que uso para concatenar minha chave nas outras máquinas como usuário root:
unset HISTFILE && mkdir -p ~hudson/.ssh/ && file ~hudson/.ssh/authorized_keys && read -p "-----------------------" aaa && echo "ssh-rsa AAAAB3NzaC1yc2EAAABBIwAAAQEArHp3nfz59IEtWGwVquBRtPFxlgK4WPmRgdR0DSbdsvkLC/SzQ4jTE/NLrjw4cO4Bf3+KRhK3xyWTUOapdgcJj3J+ZGRmj/MjTCSyHj3+wT3tr2fKtdrk1gqO6iOx5JkjJQ3UPqhL1b2Oyoc1CfFUh34mW7246lm6MYKsCW1I/Cr/0qSn1BMJf/n4wKb+TegxRkmcf9KAwj8a0nyEBv+la2HGh9gB1kMQ/6N6EHWyPYVTFvdJouzR/s0/yy5V9zTxFk5FmrhKRZTluYzB79yVtaCdopOlzQZiiCSvbhnvLGuCQD4jR+GW0vKQSqmFqtxXCFg2HKG+ZHEZbOg1UXMFDw== hudson@vostrolab.localdomain.com.br" > ~hudson/.ssh/authorized_keys && chmod 600 ~hudson/.ssh/authorized_keys && chown hudson:hudson ~hudson/.ssh/authorized_keys && ls -la ~hudson/.ssh/authorized_keys
A explicação para o comando é:

1. Limpa o histórico (unset HISTFILE);
2. Cria o diretório ~hudson/.ssh/ caso não exista (-p);
3. Verifica o tipo do arquivo authorized_keys com o comando file;
4. Joga na tela um “—————–” e fica esperando seu <Enter> para continuar (pode dar um ctrl+c caso já exista um arquivo);
5. Coloca a chave pública dentro do authorized_keys (aqui, dentro das “aspas” você coloca o conteúdo exato do seu id_rsa.pub);
6. Configura as permissões 600 no arquivo authorized_keys;
7. Configura o dono/grupo para hudson:hudson no arquivo authorized_keys;
8. Lista o arquivos authorized_keys para você conferir o tamanho dele e ver se está com as permissões/dono/grupo corretos;

Caso você tenha configurado alguma senha em sua chave privada (na hora do ssh-keygen) basta digitar ssh-add e digitar sua senha da chave antes de acessar alguma máquina por SSH.

Caso não tenha configurado uma senha em sua chave privada, basta acessar alguma máquina por SSH e verá os resultados.
Possivel problema que você pode enfrentar:

[hudson@vostrolab ~]$ ssh-add
Could not open a connection to your authentication agent.

Isso acontece porque o ssh-agent (agente de autenticação ou authentication agent) não está iniciado com seu usuário. Para abrir, basta digitar:

[hudson@vostrolab ~]$ ssh-agent bash

Para verificar que o ssh-agent está rodando:

[hudson@vostrolab ~]$ ps aux | grep ssh-agent
hudson 25451  0.0  0.1  53852   792 ?        Ss   15:45   0:00 ssh-agent bash

Após isso, o comando ssh-add pode ser digitado que funcionará normalmente.

Por: Hudson Murilo dos Santos

Referências: Robson Fernandez
man ssh
man ssh-keygen
man ssh-agent
man ssh-add
https://www.cs.indiana.edu/Facilities/FAQ/Security/openssh.html

One thought on “SSH: Chave privada e pública = ssh sem senha

  1. Lembrando que as configurações do /etc/ssh/ssh_config na máquina cliente devem estar conforme padrão:

    GSSAPIAuthentication yes
    ForwardX11Trusted yes
    SendEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
    SendEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
    SendEnv LC_IDENTIFICATION LC_ALL LANGUAGE
    SendEnv XMODIFIERS

    E também as permissões do diretório .ssh da máquina destino devem ser 700 conforme padrão:

    drwx—— 2 hudson hudson 136 Jul 19 12:17 .ssh

    Atenciosamente,

Leave a Comment

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *