Por mais seguras que sejam as senhas, sempre existe uma pequena possibilidade de que alguém em busca de um ataque descubra alguma delas.
Ao invés de depender da senha para acessar o servidor SSH, pode-se utilizar 1 par de chaves de autenticação, onde a chave pública é instalada nos servidores que serão acessados e a chave privada (que nunca sai de sua máquina local) é protegida por uma "passphrase", sem a qual a chave privada de torna inútil.
Gerando o par de chaves no cliente:
ssh-keygen -t rsa
$ sudo chmod 600 .ssh/id_rsa (ajustando as permissões do arquivo)
Esse comando deve ser executado usando seu login de usuário, ou seja, o mesmo login utilizado para acessar o servidor remoto.
Depois de executado o comando, será necessário cadastrar a "passphrase", e após isso, serão gerados 2 arquivos, .ssh/id_rsa (chave privada) e .ssh/id_rsa.pub (chave pública) dentro do seu diretório home.
Depois de gerar o par de chaves, temos que instalar a chave pública no servidor, permitindo que ela seja usada para autenticação. Segue o comando:
ssh-copy-id -i ~/.ssh/id_rsa.pub dan@192.168.1.10
Neste exemplo 192.168.1.10 é o endereço IP ou domínio do servidor.
Esse processo de cópia faz com que o conteúdo do arquivo .ssh/id_rsa.pub da máquina cliente seja copiado para o arquivo .ssh/authorized_keys do servidor remoto, permitindo assim a conexão de ambos. Isso também pode ser feito manualmente, em caso de problemas.
Com isso, podemos desativar o uso de senhas e desativar qualquer outra forma de autenticação com exceção das chaves, incluindo as duas opções abaixo no arquivo de configuração do servidor SSH (/etc/ssh/sshd_config):
PassWordAuthentication no #elimina o uso de senhas
UsePAM no #elimina o uso de qualquer tipo de autenticação, ao menos que sejam as chaves
Para essas configurações entrar em vigor, basta reiniciar o servidor SSH:
# /etc/init.d/ssh restart (no Debian e seus derivados);
# service sshd restart (no Red Hat, Mandriva, Fedora e CentOS);