Publicado por: Rafael Guedes | 7 julho 2009

SSH autenticando com chaves assimétricas

OpenSSH Project

A intenção deste artigo é prover a autenticação de usuários via SSH sem a utilização de senhas, mas sim com a utilização de chaves assimétricas, facilidade que pode prover a execução de comandos através de scripts remotos… Ou ainda utilizar chaves assimétricas + uma senha, o que pode dar uma camada a mais de segurança à sua administração remota.

  1. Sobre SSH
  2. Sobre Chaves Assimétricas
  3. Sobre o OpenSSH

Sobre SSH

A grosso modo, o SSH é um protocolo e conjunto de programas que veio para solucionar problemas de segurança com relação à administração remota de servidores em uma época onde as senhas e comandos eram passados através de texto puro em redes ethernet (o que torna a escuta e captura de dados possível). Um exemplo desta falha de segurança é o telnet. Ou ainda uma conexão poderia ser autenticada através de arquivos que diziam o que seria seguro através do IP ou nome de uma máquina, como o rlogin por exemplo. Já o SSH traz toda comunicação através de um canal criptografado. Basicamente os programas do SSH são: sshd, ssh, scp, sftp, ssh-keygen, ssh-agent.

Sobre Chaves Assimétricas

Uma comunicação baseada em chaves assimétricas consiste num par de chaves: uma chave pública e uma privada. A chave pública pode e deve ser divulgada para a parte remota da comunicação, enquanto a chave privada, como o próprio nome diz deve permancer guardada a sete chaves. Numa comunicação deste tipo o dados cifrados pela chave pública pode ser apenas decifrados pela sua chave privada.

Sobre o OpenSSH

O projeto OpenSSH provê uma implementação aberta do protocolo SSH. A suíte de programas OpenSSH substitui o rlogin e o telnet pelo ssh, o rcp  pelo scp, e o ftp pelo sftp. OpenSSH é desenvolvido em paralelo com o OpenBSD Project e conta apenas com donativos de usuários para sua continuidade. CURIOSIDADE: um dos dois mirrors oficiais brasileiros do projeto está em Florianópolis, na UFSC.

AMBIENTE: O ambiente de testes utilizado para a criação deste arquivo consistiu em um servidor Debian Lenny (instalado via Netinstall com perfil básico) e um cliente Ubuntu 9.04.

  • Instalação do servidor:

A instalação do servidor foi executada através de apt-get.

#apt-get update ; apt-get install openssh-server

  • Criação do par de chaves:

O para de chaves foi gerado no cliente. O tipo de chaves criada foi o RSA, que consiste por default de 2048 bits ( o mínimo pode ser 768 ), enquanto o tipo RSA tem que ser exatamente 1024 bits.

root@suporte:~# ssh-keygen -t rsa

Generating public/private rsa key pair.

Enter file in which to save the key (/root/.ssh/id_rsa): [ENTER]

Enter passphrase (empty for no passphrase): [SE QUISER COLOQUE UMA SENHA]

Enter same passphrase again: [SE TIVER COLOCADO A SENHA ANTERIORMENTE, REPITA]

Your identification has been saved in /root/.ssh/id_rsa.

Your public key has been saved in /root/.ssh/id_rsa.pub.

The key fingerprint is:

de:00:38:c9:cf:1c:ea:6a:c9:e4:2c:bd:1d:57:78:e0 root@suporte

Considerações:

  • Passprase é a “palavra senha” que protege a chave privada. Caso seja suprimida a autenticação será provida apenas pela própria chave, ou seja, sem senha.
  • id_rsa é a chave privada. id_rsa.pub é a chave que deve ser copiada para o servidor, ou seja, a pública.
  • Os diretórios ~/.ssh do servidor e do cliente deverão ter permissão octal modo 0700, e o conteúdo do diretório 0600.
  • O key fingerprint é uma identificação visual da chave.
  • Copiando a chave publica para o servidor:

A chave pode ser copiada através de um meio seguro e colocada em ~/.ssh/authorized_keys no servidor, porém existe um método bem mais fácil. O uso do script ssh-copy-id no cliente.

root@suporte:~# ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.3.4

The authenticity of host ‘192.168.3.4 (192.168.3.4)’ can’t be established.

RSA key fingerprint is fb:6e:b5:5f:1c:d1:95:49:b4:17:ac:30:ff:2f:9d:c8.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added ‘192.168.3.4’ (RSA) to the list of known hosts.

root@192.168.3.4’s password:

Now try logging into the machine, with “ssh ‘root@192.168.3.4′”, and check in:

.ssh/authorized_keys

to make sure we haven’t added extra keys that you weren’t expecting.

root@suporte:~#

  • Testando:

A partir de agora pode-se fazer o login sem senha, não tenhao colocado nenhuma passphrase.

root@suporte:~# ssh root@192.168.3.4 [REALIZANDO A CONEXÃO DO CLIENTE PARA O SERVIDOR]

Enter passphrase for key ‘/root/.ssh/id_rsa’: [COMO EU COLOQUEI PASSPHRASE, FOI SOLICITADA]

Linux aspire 2.6.26-2-686 #1 SMP Sun Jun 21 04:57:38 UTC 2009 i686

The programs included with the Debian GNU/Linux system are free software;

the exact distribution terms for each program are described in the

individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent

permitted by applicable law.

Last login: Mon Jul  6 17:05:41 2009

aspire:~# [JÁ LOGADO NO SERVER]

  • Refinando as configurações do servidor:

No arquivo /etc/ssh/sshd_config

Port 2522

Protocol 2

PermitRootLogin without-password

AllowUsers root suporte

Password-Authentication no

No arquivo /etc/pam.d/sshd foi comentada a seguinte linha:

#session optional pam_motd.so

(Comentar esta linha faz com que o login fique mais limpo, pois não será imprimida a mensagem motd, apenas a Last Login)

Reiniciar o SSH:

#/etc/init.d/ssh restart

  • Execução Remota de Comandos:

Para testar a execução remota de comandos criei um arquivo uma chave privada sem a passphrase, as outras configurações são idênticas.

root@suporte:~# ssh -p 2522 192.168.3.4 ifconfig eth0

 ______  _                   _ _
(____  \(_)                 | (_)
 ____)  )_  ____ _   _  ____| |_ ____  _   _ _   _
|  __  (| |/ _  | | | |/ _  | | |  _ \| | | ( \ / )
| |__)  ) ( ( | | |_| ( ( | | | | | | | |_| |) X (
|______/|_|\_|| |\____|\_||_|_|_|_| |_|\____(_/ \_)
          (_____|                                 
eth0      Link encap:Ethernet  Endereço de HW 08:00:27:a9:49:6a
inet end.: 192.168.3.4  Bcast:192.168.3.7  Masc:255.255.255.248
endereço inet6: fe80::a00:27ff:fea9:496a/64 Escopo:Link
UP BROADCASTRUNNING MULTICAST  MTU:1500  Métrica:1
RX packets:8662 errors:0 dropped:0 overruns:0 frame:0
TX packets:4839 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:1000
RX bytes:9165200 (8.7 MiB)  TX bytes:428348 (418.3 KiB)
IRQ:11 Endereço de E/S:0xc020

OBS: Para utilizar um banner de boas vindas como este basta descomentar a linha banner do arquivo /etc/ssh/sshd_config no servidor. Existem sites como o http://www.network-science.de/ascii/ que são capazes de fazer ASCII art via web.

Num próximo artigo sobre SSH irei abordar a utilização do putty, geração de chaves com o puttygen e execução remota de comandos com o plink, para uma integração com programas Windows.


Deixe um comentário

Categorias