Criando e configurando chaves públicas no SSH
Transferir arquivos entre computadores utilizando
ssh e
scp é uma funcionalidade bastante útil em certos momentos. Porém essa transferência requer uma autenticação usualmente feita através de senha, isso impossibilita que a transferência de arquivos entre
hosts possa ser feita automaticamente, sem intervenções.
Para evitar a requisição de senhas nas transferências ou mesmo nas sessões ssh, é possível gerar chaves públicas de acesso e criptografar os dados de maneira direta. São geradas duas chaves: uma pública que ficará nos hosts que aceitarão o arquivo e uma privada, que pertencerá apenas ao host que envia. Dessa forma sempre que requisitar uma conexão ssh ou uma transferência scp entre os hosts que possuem as chaves, não será necessário digitar a senha.
Essa operação deve ser utilizada com cuidado, pois gera uma alta confiança entre os dois computadores envolvidos. E se a chave pública for compartilhada com outros hosts, ao comprometer a chave privada, automaticamente todos os outros também estarão vulneráveis.
Para configurar isso é necessário que o host de destino do arquivo possua um servidor ssh executando em uma determinada porta (geralmente a 22). Com isso devemos fazer algumas alterações no arquivo de configuração do servidor ssh:
# vi /etc/ssh/sshd_config
Nesse arquivo devemos ter essas linhas descomentadas:
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys
Por sua vez, no cliente, devemos observar o arquivo
/etc/ssh/ssh_config:
# vi /etc/ssh/ssh_config
E observar se as seguintes linhas estão presentes e descomentadas, caso não estejam, as inclua:
IdentityFile ~/.ssh/identity
IdentityFile ~/.ssh/id_rsa
IdentityFile ~/.ssh/id_dsa
Depois de confirmado a configuração do cliente e do servidor, agora é necessário gerar as chaves. Ainda no cliente, gere as chaves com o comando:
ssh-keygen -t dsa
O resultado deve ser assim:
Generating public/private dsa key pair.
Enter file in which to save the key (/home/rodrigo/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/rodrigo/.ssh/id_dsa.
Your public key has been saved in /home/rodrigo/.ssh/id_dsa.pub.
The key fingerprint is:
d7:b5:86:ec:53:19:53:49:93:1a:b1:57:94:b3:13:53 rodrigo@pandora
A "passphrase" é opcional, pode deixá-la em branco se preferir (eu não prefiro).
Agora verifique se as chaves foram geradas e se estão no diretório
.ssh do seu usuário:
cd /home/rodrigo/.ssh
$ ls
id_dsa id_dsa.pub known_hosts
Verificado que foi tudo gerado, é a hora de instalar s chaves no servidor ssh. Para isso vamos utilizar scp, mas nada impede que possa ser feito de outra maneira. Dessa vez ainda será requisitada a senha para transferência.
cd .ssh
$ scp id_dsa.pub rodrigo@servidor:/home/rodrigo/
Conecte-se ao servidor, observe o arquivo e instale ele no local exato. Primeiro observe se existe o diretório .ssh no seu usuário, para isso utilize o comando:
ls -la
Caso não exista, a crie:
mkdir /home/rodrigo/.ssh
$ chmod -R 700 /home/rodrigo/.ssh
Copie o arquivo da chave pública para o arquivo que o servidor irá observar:
cat /home/rodrigo/id_dsa.pub >> /home/rodrigo/.ssh/authorized_keys
Pronto, assim simples! Agora as conexões de ssh e scp não devem mais requerer senha. Faça alguns testes e observe o novo comportamento, caso ainda esteja requerendo senha, tente reiniciar o servidor ssh ou rever se foram feitos todos os passos.