Missão

Desenvolvermos soluções acessíveis e de qualidade, solucionando os problemas e agregando valor ao serviço prestado por nossos clientes.

Visão

Sermos reconhecidos como profissionais de excelência em nossas áreas de atuação.

Compromisso

Fornecer aos clientes o melhor serviço e com a melhor qualidade.

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

“Um novo conceito em prestação de serviços”