Se você tem um servidor Linux disponível na web, provavelmente deve ter acesso a ele por SSH (Secure Shell). Apesar de um método bastante seguro, se não configurado corretamente seu servidor pode ser alvo de ataques de brute force para acesso não autorizado. Existem várias maneiras para contornar essa situação, sendo uma das mais comuns é a técnica de proibir o acesso por senha, permitindo apenas chaves públicas.

Se o acesso por chave pública estiver ativo, será necessário realizar a combinação de uma chave no computador cliente e no servidor. Clientes só serão autenticados se a combinação das chaves for positiva. A autenticação será feita sem a necessidade de uma senha, mas você também poderá aumentar ainda mais a segurança da chave pública protegendo-a com uma senha, nesse caso será necessário digitar uma senha para destravar a chave, só então a combinação da chave cliente com a do servidor serão verificadas.

Neste tutorial vou detalhar como gerar uma chave pública em computadores cliente com Linux e Windows, porém, no Windows você irá precisar de um software chamado Putty.

Então vamos lá.

Gerando a chave no Linux

Se você tem um computador com Linux que faz acesso ao seu servidor remoto via SSH, acesse o terminal e digite o seguinte:

ssh-keygen -t rsa

Você será requisitado a escolher o arquivo onde a chave será gravada (normalmente em ~/.ssh/id_rsa) não precisa mudar isso se não quiser, simplesmente pressione “ENTER”.

Em seguida, será necessário digitar uma senha para a chave pública. Se quiser, poderá deixar a chave sem uma senha, neste caso o acesso ao servidor será direto, sem a necessidade de senha alguma (só do computador onde você está gerando a chave, é claro). Após escolher ou não digitar uma senha, você precisará confirmar digitando novamente a mesma (salvo se você tiver deixado uma senha em branco).

Feito isso está pronto, se quiser checar para saber se sua chave foi criada com sucesso, digite:

ls ~/.ssh

Você verá algo assim:

id_rsa  id_rsa.pub  known_hosts

Agora será necessário copiar a chave pública que você acabou de gerar para o servidor, para isso digite o seguinte:

ssh-copy-id [email protected]_do_host

Após digitar o comando acima, será necessário entrar com a senha do usuário escolhido para acesso no servidor remoto.

Observação: Você também poderá copiar a chave pública manualmente para o arquivo “~/.ssh/authorized_keys” da home do usuário desejado no servidor remoto (você vai ver como fazer isso mais adiante quando formos falar do Windows).

Após entrar com a chave pública no cliente e copiá-la no servidor (conforme descrito acima) seu acesso agora poderá ser baseado apenas na chave, com isso você poderá remover o acesso via senha do servidor para aumentar a segurança. Veremos mais sobre isso mais adiante neste tutorial quando formos configurar o arquivo /etc/ssh/sshd_config.

Gerando a chave com o Putty para Windows

Conforme descrevi, para configurar uma chave pública no Windows vamos precisar de um software que tenha suporte para isso, em minha opinião o melhor de todos é o Putty (para acesso ao servidor) e o Puttygen para gerar a chave. Faça o download do pacote no site putty.org. Observe que existe um arquivo compactado que trás todos os programas relacionados com o Putty de maneira portátil, ou como instalador.

Se você baixou a pasta compactada (.zip) extraia seu conteúdo, caso tenha utilizado o instalador, faça a instalação do Putty no seu Windows. De qualquer maneira que você tenha escolhido, deverá ver um programa chamado “Puttygen”, este é o programa que irá gerar a chave pública para seu Windows.

Abra o Puttygen e clique em “Generate”; Não pare de mexer o mouse até que a chave tenha sido criada.

Chave gerada com o Puttygen

Chave gerada com o Puttygen

Em “Key passphase” e “Confirm passphrase”, digite uma senha conforme preferir. Este campo também pode ser deixado em branco, mas você terá menos segurança caso o faça, pois não existirá nenhum senha para acesso ao seu servidor.

Quando terminar, você vai precisar da chave privada, já que ela servirá para você autenticar seu computador ao servidor quando precisar fazer o acesso. Portanto, clique em “Save private key” (já já vamos utiliza-la). Sem fechar a janela, copie o texto que está no quadrado “Key”, começando com “ssh-rsa”.

Essa é a chave que vamos colar dentro servidor remoto, no arquivo "autorized_keys"

Essa é a chave que vamos colar dentro servidor remoto, no arquivo “authorized_keys”

Agora utilize o Putty para abrir seu servidor:

Troque os dados pelos dados do seu servidor

Troque os dados pelos dados do seu servidor

Já dentro do seu servidor (com o usuário desejado), digite:

vi ~/.ssh/authorized_keys

Cole o texto que você copiou anteriormente na última linha (se não tiver nada nele, pode ser na primeira mesmo). Note que este arquivo pode não existir, mas o comando acima irá criá-lo.

Se você tiver dificuldades com o “vi”, troque por “nano” no comando, ficando assim:

nano ~/.ssh/authorized_keys

Nano é um editor de texto mais simples para ser utilizado.

Após a inclusão da chave, salve o arquivo e volte para o seu computador cliente com o Windows.

Para realizar o acesso, abra a chave privada que você achou com o programa “PAGEANT.EXE” (também pertence ao pacote do Putty). Quando você abrir a chave, o programa irá requisitar que você digite a senha que escolheu quando a gerou, digite-a corretamente e verá o seguinte símbolo perto do relógio do Windows.

Ícone do Putty Agent indicando que você pode acessar seu servidor

Ícone do Putty Agent indicando que você pode acessar seu servidor

Agora é só voltar ao Putty e acessar seu servidor normalmente.

Configurando o arquivo /etc/ssh/sshd_config

Agora que você já tem a chave de segurança pública e já realizou o teste para acesso ao servidor sem ter a necessidade de digitar uma senha, vamos remover essa opção para que ele se torne mais seguro.

Atenção: Não continue se não conseguiu criar e testar a chave pública com sucesso em pelo menos um sistema operacional, caso contrário você ficará sem acesso SSH no seu servidor.

Digite o seguinte dentro do servidor remoto:

sudo nano /etc/ssh/sshd_config

Já dentro do arquivo de configuração, edite as linhas indicadas abaixo:

# ...
PermitRootLogin no
# ...
PubkeyAuthentication yes
# ...
PasswordAuthentication no
# ...

A primeira linha remove completamente o acesso do root ao servidor SSH, a segunda permite o acesso via chave pública e a terceira remove o acesso via senhas de texto. Pense bem antes de seguir a diante, isso é uma medida de segurança, caso algo dê errado, não terá como voltar atrás.

Pressione CTRL+O para salvar e digite:

sudo service ssh restart

Para reiniciar o servidor SSH. Por fim, digite:

exit

Para sair e tente refazer o acesso. Se tudo correu conforme descrevi, você conseguirá acessar o servidor sem a necessidade de digitar a senha do usuário, utilizando apenas a chave pública.

Lembre-se que essa chave agora é como se fosse a sua senha, portanto, não deixe qualquer um acessar seu computador ou copiá-la.

Finalizando

Este foi um tutorial relativamente simples, mas pode ser que gere dúvidas para muitos usuários. Caso as tenha, não hesite em deixar nos comentário.

Até o próximo.