SSH & SSH-Agent
Conforme mencionado no artigo SSH sem senha, algumas implicações de segurança existem, como por exemplo o fato da segurança da chave ser tão boa quanto a sua própria senha ou segurança da máquina em que está a tua conta.
Para obter um grau maior de segurança, o processo de geração de chaves é um pouco diferente. No artigo SSH sem senha há explicações para a geração de chaves RSA e DSA. Neste artigo incluirei apenas exemplos para chaves DSA. A geração de chaves RSA pode ser feita de maneira similar e com as mesmas diferenças mostradas no artigo anterior.
Gerando as chaves
[godoy@wintermute godoy]$ ssh-keygen -t dsa Generating public/private dsa key pair. Enter file in which to save the key (/home/godoy/.ssh/id_dsa): Enter passphrase (empty for no passphrase): (digite sua frase-senha) Enter same passphrase again: (digite a mesma frase-senha) Your identification has been saved in /home/godoy/.ssh/id_dsa. Your public key has been saved in /home/godoy/.ssh/id_dsa.pub. The key fingerprint is: c7:ca:21:1c:99:c2:63:dd:6b:dd:8e:f6:47:2a:8b:03 godoy@wintermute.g2ctech [godoy@wintermute godoy]$
Foram gerados dois arquivos: id_dsa e id_dsa.pub.
Entendendo o que acontece
A diferença principal é que ao fornecer uma senha no instante da geração da chave pública você adicionou um nível a mais de segurança.
Sua chave estará, agora, tão segura quanto forem a máquina e a frase-senha estipulada. Frases como "João escreveu isto." são interessantes mas podem apresentar problemas caso você encontre uma máquina que não pode gerar o "ã" corretamente. Isso pode ser algo ignorável se a intenção for administrar uma máquina numa rede interna, mas pode ser algo primordial se você planeja acessar sua máquina de um outro país, por exemplo.
Procure misturar letras maiúsculas e minúsculas, pontuação, números, sinais, etc. de modo a dificultar a adivinhação ou testes onde os caracteres são tentados um a um.
Uma desvantagem aparente nesta abordagem é a necessidade de se digitar a senha toda vez que uma conexão com um servidor remoto for solicitada. Mas, esta desvantagem é apenas aparente. Há meios de se eliminar este inconveniente.
Instalando a chave
Como no artigo anterior, após gerar as chaves é necessário colocá-las nos lugares corretos.
A chave privada (no nosso exemplo é a que está no arquivo id_dsa) deve ser guardada com o máximo de zelo possível. Se ela for comprometida, deverá ser substituída o mais rápido possível em todas as máquinas onde ela esteja instalada. Esta chave deverá ser renomeada para ~/.ssh/identity. O mesmo pode ser feito com a chave pública, para facilitar a associação e a finalidade de cada uma delas, renomeando-a para ~/.ssh/identity.pub.
A chave pública (id_dsa.pub) deverá ser instalada em todas as máquinas remotas. A chave deverá ser instalada com o nome de authorized_keys2 (para chaves RSA o arquivo chama-se apenas authorized_keys). Uma maneira de fazer isso é simplesmente executar o comando
scp ~/.ssh/id_dsa.pub maquina.remota:~/.ssh/authorized_keys2
Antes da instalação da chave será necessário digitar sua senha na máquina remota. Após a instalação da chave, você será questionado quanto à frase-senha (até que o próximo "truque" seja realizado) para concretizar o acesso.
Conexões sem digitação de senhas de maneira segura
O programa responsável por evitar que tenhamos que digitar nossa enorme e complicada frase-senha sempre é o programa ssh-agent. Tal programa encontra-se no pacote com os clientes do SSH (geralmente é o openssh-clients no Linux).
O comando a seguir é responsável pela criação de um cache de senhas:
eval `ssh-agent`
Por uma questão de conveniência, este comando pode ser colocado num dos arquivos de inicialização do shell. No zsh, por exemplo, é o arquivo ~/.zshrc e no bash é o ~/.bash_login. Caso estes arquivos não existam, crie-os com a linha acima como conteúdo.
Entretanto, antes de usarmos o ssh devemos cadastrar nossa frase-senha no cache:
[godoy@wintermute godoy]$ ssh-add ~/.ssh/identity Enter passphrase for /home/godoy/.ssh/identity: Identity added: /home/godoy/.ssh/identity (/home/godoy/.ssh/identity) [godoy@wintermute godoy]$
Este processo deve ser repetido em cada login, portanto pode-se adicionar a linha do ssh-add no mesmo arquivo de inicialização utilizado para o ssh-agent.
Um exemplo de arquivo seria:
eval `ssh-agent` ssh-add ~/.ssh/identity
Os resultados, num login, seriam:
A cada login será solicitada sua frase-senha e para todas as conexões estabelecidas ali você não precisará digitar a frase novamente.
O incômodo de digitá-la várias vezes ficou reduzido a uma só digitação, aumentando-lhe a segurança e permitindo a mesma flexibilidade que era obtida sem a presença de senhas.
Sobre este documento
Autor: Jorge Godoy
Data: 28 de novembro de 2002
Última atualização: 28 de novembro de 2002