Olá pessoal,
Hoje, por causa de uma necessidade muito específica, resolvi postar uma forma de credenciar nas configurações ssh de um servidor, para que um client o acesse, sem que senha seja solicitada, para que, por exemplo, scripts de backup possam transferir dados via ssh, sem problemas.
Você pode até pensar que isso pode ser inseguro, mas não é, pois na verdade o acesso via SSH será realizado através da leitura de chave pública e privada, estabelecendo uma confiança entre o servidor e o cliente, permitindo o acesso somente quando validadas as chaves.
1 – Gerando as chaves
Vamos usar o comando ssh-keygen no servidor de origem para fazer isso:
$ ssh-keygen -t rsa -C "Minha_Chave_SSH" Enter passphrase: Enter same passphrase again:
Ele irá pedir para confirmar o caminho, então aperte “Enter” para o padrão. E em seguida ele lhe pedirá a senha, não digite nada, aperte apenas a tecla “Enter” nas duas vezes.
Parâmetros que usamos:
-t -> Especifica o tipo de chave, no nosso caso uma chave RSA
-C -> Comentário da chave
A saída do comando deverá se parecer com isso:
Serão gerados dois arquivos, id_rsa (Chave Privada) eid_rsa.pub (Chave Pública).
Você poderá checá-los:
ls ~/.ssh id_rsa id_rsa.pub known_hosts
2 – Copiando a chave pública para o servidor
Agora vamos enviar a chave pública para o servidor destino com o comando scp:
cd ~/.ssh/
scp id_rsa.pub cleuber@ip-do-servidor:/home/cleuber/.ssh/
Pronto copiada!
3 – Checando se a chave pública foi transferida
Vamos fazer um acesso ssh (ainda com senha por enquanto) para checar a chave pública
ssh cleuber@ip-do-servidor
Agora estamos logados remotamente no servidor, cheque com o mesmo comando.
ls ~/.ssh
id_rsa.pub known_hosts
4 – Criando o arquivo “authorized_keys” com o conteúdo da chave pública nele.
Para fazer isso, você precisa continuar logado no servidor remoto, e usaremos o seguinte comando:
cat id_rsa.pub > authorized_keys
5 – Editando as configurações do Serviço SSH
Ainda não acabamos, vamos agora configurar o SSH do servidor para aceitar autenticação baseado em chave.
Você pode usar seu editor de texto favorito. Eu aqui usarei o nano.
sudo nano /etc/ssh/sshd_config
Obs. Se você precisar configurar isso no HP-UX que usa o Unix, o arquivo de configuração através do caminho /opt/ssh/etc/sshd_config.
Verifique se as seguintes não estão comentadas, ou seja, com um símbolo “#” no início delas, e com o “yes”, na primeira linha, conforme abaixo.
PubkeyAuthentication yes AuthorizedKeysFile %h/.ssh/authorized_keys
Como estou usando o nano, salvei com “Ctrl+O” e saí com o “Ctrl+x”
Obs. Opcional
Existem restrições de segurança para que isso funcione, caso as permissões de arquivo requeridas no campo “StrictModes" estiver habilitado e com o “yes”.
No exemplo abaixo, por padrão o StrictModes está comentado com “#” então está desabilitado.
Caso isso esteja habilitado (sem o “#” e com o “yes”),você precisará se certificar que a pasta .ssh tenha a permissão 700, e o arquivo id_rsa esteja com 600, no servidor e no client.
Se precisar, então, faça isso nos dois lados (no cliente e no servidor)
$ chmod 700 ~/.ssh $ chmod 600 ~/.ssh/id_rsa
6 – Reinicie o serviço do SSH
Agora, ainda logado no servidor destino, reinicie o serviço SSH.
O comando pode variar dependendo do seu Linux
sudo /etc/init.d/ssh restart sudo service sshd restart
Obs. Se você estiver usando o HP-UX, reinicie o serviço do SSH com os seguintes comandos:
Parar
# /sbin/init.d/secsh stop
Iniciar
# /sbin/init.d/secsh start
7 – Teste o acesso SSH sem senha
Agora, a hora da verdade… Faça logoff do acesso ssh que está fazendo em seu servidor remoto e login novamente.
ssh cleuber@ip-do-servidor
Se você fez tudo certo, desta vez não irá pedir-lhe senha.
É isso aí pessoal,
Cleuber
Boa tarde!
Parabéns pelo seu trabalho! Tem me ajudado muito.
Eu consigo fazer essa autorização nas duas pontas? Ou seja permitir o acesso sem senha de ambos os lados?
Obrigado meu amigo, seja sempre bem vindo. Consegue sim.
Este ano retomarei a publicação de muitos artigos novos. Abraço!