Usando chaves

Ao invés de depender unicamente da senha como forma de autenticação, o SSH permite o uso de um par de chaves, onde 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.

Nesse caso, temos uma segurança de dois níveis, em que é preciso saber a passphrase e, além dela, ter a chave privada, um arquivo salvo no HD ou em um pendrive, algo similar ao sistema bancário, onde você precisa ter o cartão
e saber a senha. Para gerar o par de chaves, use o comando:

$ ssh-keygen -t rsa

Ele é sempre executado usando seu login de usuário, 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”, 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 a passphrase é impossível usar a chave.

Isso vai 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 a 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. Muito servidores recusam a conexão caso os arquivos estejam com as permissões abertas.

Agora vem o comando final, que grava a chave no servidor:

$ ssh-copy-id login@servidor

Substitua o “login” pelo seu login de usuário, e o “servidor” pelo endereço IP ou domínio do servidor. Isso abre uma conexão via SFTP, ainda utilizando seu login e senha de acesso, que é usada pelo ssh-copy-id para instalar a
chave pública (o arquivo .ssh/id_rsa.pub, dentro do seu home) no servidor. Caso você trabalhe com várias chaves diferentes, pode escolher qual instalar especificando o arquivo a ser instalado, como em:

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

A partir daí, ao invés de pedir sua senha, o servidor verifica a chave privada, instalada na sua máquina e em seguida pede a passphrase. Mesmo que alguém consiga roubar sua chave privada, não conseguirá conectar sem saber a
passphrase e vice-versa.

É possível ainda 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.

Não é algo tão corriqueiro quanto pode parecer, pois a chave privada nunca sai do seu micro. O servidor remoto envia um “desafio” para o cliente na sua máquina e a chave é apenas usada para processar a resposta. 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. De qualquer forma, não é bom dar sopa para o azar.

A melhor forma de usar chaves sem precisar ficar digitando a passphrase toda hora é usar o “ssh-agent“. 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 ícone dentro da pasta “.kde/Autostart”, dentro do seu diretório home. Note que eles não devem ser adicionados no bootmisc.sh, 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.

Até aqui, aprendemos como utilizar uma única chave. É comum que seja usada uma única chave para acessar vários micros. Isso não representa um risco de segurança, desde que você escolha uma boa passphrase.

Porém, muitos administradores preferem trabalhar com várias chaves distintas, uma para cada servidor que será acessado, por exemplo. Isso é perfeitamente possível, embora bem mais trabalhoso. Para gerar novas chaves, rode o
comando “ssh-keygen -t rsa“, prestando atenção para informar um nome de arquivo alternativo na hora que ele pergunta:

Enter file in which to save the key (/home/morimoto/.ssh/id_rsa):

Se você salvou a segunda chave como “id_rsa2”, por exemplo, o comando para instalá-la no servidor seria “ssh-copy-id -i ~/.ssh/id_rsa2.pub seu_login@servidor”. Na hora de adicionar a segunda chave no ssh-agent, você deve
também especificar o nome do arquivo, como em: “ssh-add /root/.ssh/id_rsa2”.

Este procedimento pode ser repetido para adicionar quantas chaves diferentes quiser, mas as coisas ficam mais trabalhosas a cada nova chave adicionada :).

Ao usar o ssh-agent para guardar suas passphrases, você pode ativar a opção ForwardAgent (no cliente) para permitir que o agente disponível na sua máquina possa ser usado para abrir novas sessões SSH quando estiver
logado em outras máquinas.

Imagine que você administra dois servidores remotos: servidor A e servidor B. Você instalou a sua chave pública em ambos e armazenou sua passphrase no ssh-agent, de forma que você pode logar em ambos, a partir da sua máquina
sem digitar senha. Porém, se você estiver logado no servidor A, e precisar copiar um arquivo via sftp para o servidor B, você precisaria fornecer a senha ou passphrase, pois o servidor A não tem acesso à sua chave privada, que está no seu micro.

O ForwardAgent resolve isso, permitindo que a partir da sessão aberta no servidor A, você possa se conectar no servidor B. Isso é feito de forma segura, criando um túnel temporário, diretamente entre a sua máquina e o
servidor B e fazendo a verificação da chave através dele, sem passar pelo servidor A. Desta forma, não existe a possibilidade de um keytrap, ou qualquer armadilha instalada no servidor A, ser usado para capturar sua chave ou passphrase.

Para ativar este recuso, abra o arquivo “/etc/ssh/ssh_config” (na sua máquina) e adicione a opção:

ForwardAgent yes

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 “ChallengeResponseAuthentication”, “PasswordAuthentication” e “UsePAM” para “no” no arquivo “/etc/ssh/sshd_config” do servidor:

ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM no

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