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.
- Sobre SSH
- Sobre Chaves Assimétricas
- 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
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
______ _ _ _ (____ \(_) | (_) ____) )_ ____ _ _ ____| |_ ____ _ _ _ _ | __ (| |/ _ | | | |/ _ | | | _ \| | | ( \ / ) | |__) ) ( ( | | |_| ( ( | | | | | | | |_| |) X ( |______/|_|\_|| |\____|\_||_|_|_|_| |_|\____(_/ \_) (_____|
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