SSH com login automático

Se você abre conexões SSH com frequência, sempre com as mesmas máquinas, já deve estar cansado de ter que ficar digitando seu password ou sua passphrase a cada nova conexão. A boa notícia é que existem não apenas uma, mas duas formas diferentes de automatizar o login no SSH, sem com isso abrir mão da segurança.

Para isso, deixaremos de utilizar senhas de acesso e passaremos a utilizar um par de chaves. Nesse sistema, a chave pública é instalada nos servidores que serão acessados e a chave privada (que nunca sai da sua máquina) é protegida por uma passphrase, sem a qual a chave se torna inútil.

Para gerar o par de chaves, use (no cliente) o comando:

$ ssh-keygen -t rsa

Ele deve ser executado usando seu login de usuário (o mesmo que você usa para acessar os servidores remotos), não como root:

Generating public/private rsa key pair.
Enter file in which to save the key (/home/morimoto/.ssh/id_rsa):
Created directory ‘/home/morimoto/.ssh’.
Enter passphrase (empty for no passphrase): ********
Enter same passphrase again: ********
Your identification has been saved in /home/morimoto/.ssh/id_rsa.
Your public key has been saved in /home/morimoto/.ssh/id_rsa.pub.

The key fingerprint is:
ff:28:26:f6:87:67:9f:4c:9a:c8:0a:3b:21:81:88:b4 morimoto@athenas

A passphrase pode ser desde uma senha “normal”, com de 8 ou 12 caracteres, até uma frase complexa, sem limite de tamanho. O importante é que não seja algo fácil de adivinhar. A passphrase é, na verdade, um componente da chave de encriptação; sem ela é impossível usar a chave.

O comando gerará os arquivos “.ssh/id_rsa” e “.ssh/id_rsa.pub” dentro do seu diretório home, que são, respectivamente, sua chave privada e sua chave pública. O “.ssh/id_rsa” é um arquivo secreto, que deve usar obrigatoriamente o modo de acesso “600” (que você define usando o chmod), para evitar que outros usuários da máquina possam lê-lo. Muitos servidores recusam a conexão caso os arquivos estejam com as permissões abertas.

Depois de gerar seu par de chaves, falta o comando final, que instala a chave pública no servidor, permitindo que ela seja usada para autenticação:

$ ssh-copy-id -i ~/.ssh/id_rsa.pub login@servidor

Como o nome sugere, o comando “ssh-copy-id” copia sua chave pública, instalando-a no servidor. Ao usá-lo, substitua o “login” pelo seu login de usuário e o “servidor” pelo endereço IP ou o domínio do servidor.

Ao ser executado, ele abrirá uma conexão via SFTP (ainda utilizando seu login e senha de acesso), que é usada para instalar a chave pública (o arquivo “.ssh/id_rsa.pub”, dentro do seu home) no diretório correspondente do servidor. Naturalmente, para que a transferência funcione, é necessário que o SFTP esteja ativo na configuração do servidor.

A partir daí, ao invés de pedir sua senha, o servidor envia um “desafio” encriptado usando a chave pública. Para respondê-lo, o cliente SSH na sua máquina precisa usar a chave privada, que por sua vez precisa ser destravada usando a passphrase. Mesmo que alguém consiga roubar sua chave privada, não conseguirá conectar sem saber a passphrase e vice-versa.

Com a chave instalada, chegamos ao tema principal da dica, que é como automatizar os logins, fazendo com que você não precise mais digitar a passphrase a cada conexão.

A primeira opção, menos segura, é simplesmente deixar a passphrase em branco na hora de gerar as chaves, o que faz com que o login passe a ser automático. Isso torna as coisas muito práticas, pois você pode escrever até mesmo scripts para copiar arquivos via SFTP, sem precisar se preocupar com senhas, mas não é necessariamente uma boa idéia, pois alguém que consiga copiar sua chave privada poderia ganhar acesso irrestrito a seu servidor. Isso não é algo tão corriqueiro quanto pode parecer, pois a chave privada nunca sai do seu micro. Para roubar sua chave privada, seria necessário que alguém efetivamente invadisse o sistema, ou tivesse acesso físico ao seu micro (para dar boot com o live-CD e copiar o arquivo para um pendrive), mas, de qualquer forma, não é bom dar sopa para o azar.

Chegamos então à segunda opção, que consiste em usar o ssh-agent para salvar as passphrases na memória, sem com isso abrir mão da segurança. Ele funciona como uma espécie de “cache”, onde você digita a passphrase apenas uma vez, depois de inicializar o sistema, e ela fica gravada na memória até que a sessão seja encerrada. A segurança não é prejudicada, pois a passphrase não é salva em lugar algum; fica apenas armazenada (de forma encriptada) em uma área protegida de memória, acessível apenas ao ssh-agent. Ao desligar o micro, tudo é perdido.
Para usar o ssh-agent, abra um terminal e use os comandos:

$ ssh-agent
$ ssh-add

Ele vai solicitar sua passphrase, como neste exemplo:

Enter passphrase for /home/morimoto/.ssh/id_rsa: ********
Identity added: /home/morimoto/.ssh/id_rsa (/home/morimoto/.ssh/id_rsa)

A partir daí ela fica carregada na memória e você não precisa mais se preocupar até o próximo reboot. Uma forma prática de fazer com que os dois comandos sejam executados automaticamente durante a abertura do sistema, é adicioná-los em um atalho dentro da pasta “.kde/Autostart”, dentro do seu diretório home, de forma que eles sejam executados automaticamente e você tenha apenas o trabalho de digitar a chave e dar Enter. Note que os comandos não devem ser adicionados no “/etc/rc.local” ou outro arquivo de inicialização, pois precisamos que os comandos sejam executados dentro do seu login de usuário e não pelo root.

Concluindo, depois de gerar a chave e conseguir se conectar através dela, você pode desativar a possibilidade de fazer logins normais, usando senha. Nesse caso, apenas você, que possui a chave gerada, conseguirá se conectar ao servidor.

Outras pessoas, mesmo que descubram a senha de alguma das contas, não terão como se conectar e nem como instalar uma nova chave para fazê-lo, a menos que tenham acesso físico ao servidor, a fim de copiar a chave manualmente. Isso significa que, mesmo alguém com a senha de root do seu servidor em mãos não conseguirá fazer nada remotamente (o sonho de todo administrador ;). Isso pode ser usado para incrementar a segurança.

Para isso, mude as opções “PasswordAuthentication” e “UsePAM” para “no” no arquivo “/etc/ssh/sshd_config” do servidor:

PasswordAuthentication no
UsePAM no

A opção “PasswordAutentication no” permite desativar o uso das senhas, como esperado, enquanto a “UsePAM no” reforça a configuração, desativando qualquer outra forma de autenticação com exceção das chaves.

Para que as alterações entrem em vigor, reinicie o servidor SSH:

# /etc/init.d/ssh restart

ou:

# service sshd restart

Sobre o Autor

Redes Sociais:

Deixe seu comentário

X