9.24.2012

Informação básica sobre OpenSSH


O protocolo ssh tornou-se o programa de eleição para conexões remotas, visto que a comunicação é encriptada ao contrário do que sucede com os velhinhos telnet ou rlogin.
O protocolo ssh usa o mecanismo de encriptação de chave pública. Nesta forma de criptografia necessitamos de duas chaves, uma chave pública e outra privada. A chave pública pode ser livremente divulgada e a chave privada deve ser protegida a todo o custo, visto ser esta a responsável pela efetiva segurança da encriptação. Para mais informação sobre este método clique aqui.

Do ponto de vista do administrador, deveremos sempre efetuar logins remotos recorrendo ao protocolo ssh e nunca por telnet. Tal aplica-se a máquinas Linux, routers e outros dispositivos onde exista essa opção. Saliente-se igualmente, que se deverá em analogia usar sempre o protocolo https ao invés do http para aceder a configurações de equipamentos. Deve-se ter igualmente em atenção o tamanho da chave.  Há alguns anos consideravam-se as chaves de 128 bits seguras. Hoje em dia deverão ser escolhidas chaves de 512 ou mesmo 1024 bits. Quanto maior é a chave mais lento se torna o processo de encriptação, sendo que actualmente tal não constituí um problema, mesmo para chaves de 1024 bits.

No mundo Linux a implementação mais conhecida do servidor de ssh é o OpenSSH.  Para efetuar ligações ssh existem em Linux aplicações nativas que o fazem. Para Windows, destaca-se o inevitável Putty e para administradores mais avançados recomenda-se a solução comercial SecureCrt (disponibiliza atualmente versões para Linux).

Numa instalação mínima RHEL ou CentOS  o OpenSSH virá instalado por defeito. Pode sempre verificar-se se está instalado
[root@serverA ~]# rpm  -qa | grep -i OpenSSH
OpenSSH-*
OpenSSH-server-*
………

Se por alguma incidência o OpenSSH não estiver instalado pode sempre fazê-lo com o comando:

[root@serverA ~]# yum  -y install OpenSSH-server

Em Ubuntu os commandos análogos são:

mm@ubuntu-serverA:~$ dpkg -l OpenSSH-server 

mm@ubuntu-serverA:~$ sudo apt-get  -y install OpenSSH-server

Se pretende que a máquina seja acedida por ssh deverá assegurar que o deamon está ativo. Em sistemas RHEL/CentOS confirme com 

[root@serverA ~]# service sshd status
sshd (pid 2242 2101) is running..

Caso não esteja a correr, execute o comando 

[root@serverA ~]# service sshd start

Para parar deverá usar stop para reinicializar, restart. 

Analogamente para Ubuntu:

pmatias@ubuntu-serverA:~$ sudo /etc/init.d/ssh start

e

pmatias@ubuntu-serverA:~$ sudo /etc/init.d/ssh stop

Conforme mencionado, o OpenSSH costuma estar instalado e a correr na maioria das distribuições de Linux. O ficheiro de configuração costuma estar localizado na diretoria /etc/ssh/ com o nome sshd_config. As instalações baseadas em Debian, como o Ubuntu, também costumam ter o ficheiro de configuração nessa localização. Alguns dos parâmetros de configuração: 

  • AuthorizedKeysFile:  Especifica o ficheiro que contém as chaves públicas. Geralmente /[directoria home]/.ssh/ authorized_keys
  • Ciphers: Lista de cifras permitidas para a versão 2 do protocolo.
  • Port: Porta utilizado pelo protocolo, por defeito é a 22.
  • Protocol: Versão do protocolo. Existindo dois, o 1 e o 2, deverá ser sempre utilizado o 2, visto que o 1 é atualmente considerado inseguro. 
  • AllowTcpForwarding : Especifica  se o encaminhamento do protocol TCP é permitido. Por defeito encontra-se configurada a opção sim.
  • X11Forwarding: Especifica se o encaminhamento do protocolo X11 é permitido.  Por defeito encontra-se configurada a opção não.
  • ListenAddress: Especifica o endereço local que o deamon SSH escuta. 
O OpenSSH possui vários programas, o óbvio shh, o Secure Copy – scp e o Secure Ftp.

O programa cliente de ssh vai assumir que a autenticação no sistema remoto será com o mesmo utilizador que nesse momento está a efetuar a ligação no sistema local. Se no entanto pretender efetuar a autenticação com outro utilizador (supõe-se que está autenticado como root no sistema local e pretende ligar-se como utilizador pmatias no sitema remoto), deverá utilizar o comando: 

[root@serverA ~]# ssh -l pmatias serverB

Ou 

[root@serverA ~]# ssh pmatias@serverB

Após inserir a password correta efetuará login no sistema com a conta de utilizador pretendida. 
Relembre-se que se pretender autenticar-se como root, bastará

[root@serverA ~]# ssh serverB

Com o protocolo IPv6 implementado: 

root@serverA ~]# ssh -6  pmatias@2001:DB8::2

Obviamente, ao invés do nome do servidor pode usar o endereço IP da máquina. 

Uma das utilizações interessantes do ssh encontra-se na criação de túneis entre um sistema local e sistemas remotos, como se de uma VPN se tratasse, visto que a informação circula encriptada. Imaginemos o cenário: 

Temos uma máquina configurada como firewall (ServerA) com duas interfaces de rede. Uma das interfaces está diretamente ligada à Internet e a outra à LAN da empresa. Imagine-se que a interface pública ou WAN tem o IP 1.1.1.1 e a interface privada 192.168.1.1 da LAN 192.168.1.0/24. Todos os servidores e workstations não são acessíveis através da Internet. O único serviço permitido na Interface WAN é o deamon sshd. 

Suponha-se que um dos servidores internos possui uma aplicação WEB de contabilidade que o utilizador pmatias quer aceder a partir da Internet. O nome do servidor é “Contab”, com um endereço IP 192.168.1.100. O nome da workstation da qual vai ser estabelecida a ligação é “pcpessoal”. Relembrando que as máquinas da LAN da empresa não podem ser diretamente acedidas através da Internet, teremos então que efetuar o chamado tunneling SSH . Vejamos com detalhe todo o processo: 



  1. No seu próprio computador o utilizador vai autenticar-se com as suas credenciais.
  2. Localmente, o utilizador vai criar um túnel da porta 9000 da sua máquina à porta 80 da máquina que corre a aplicação web à qual pretende aceder. Para o fazer vai executar o comando  [pmatias@pcpessoal ~]# ssh  –L 9000:192.168.1.100:80 1.1.1.1 ou efetuar a ligação ssh e  ssh> -L 9000:192.168.1.100:80
  3. Após autenticar-se com sucesso no servidor remoto, neste caso, o serverA, poderá então abrir o browser para aceder à aplicação. O utilizador verificará se o túnel está a funcionar corretamente, abrindo o browser para aceder à porta que está a reencaminhar o tráfego na máquina local e colocando o endereço http://localhost:9000 .
  4. Se tudo correu conforme previsto, o conteúdo web fornecido pelo servidor da aplicação surgirá, tal como se o mesmo estivesse a ser acedido a partir de uma máquina dentro da LAN da empresa.Para terminar a ligação e desfazer o túnel bastará desligar a ligação ssh estabelecida. 
Este método permite o acesso seguro a sistemas, seja em redes internas LAN ou através da Internet. Não pode ser considerada uma solução VPN completa visto que não é possível aceder concorrencialmente a todos os sistemas de uma LAN remota, mas funciona perfeitamente para aceder aos recursos de uma máquina. No exemplo referido, efetuou-se tunneling de http através de SSH, mas qualquer protocolo poderia ter sido utilizado, como Telnet ou VNC. Este método é igualmente utilizado para ultrapassar eventuais restrições de firewalls e proxies para aceder a recursos. 

Relembrando a sintaxe do comando: 

ssh –L [porta local]:[IP da máquina de destino]:[porta de destino] [IP do servidor ssh]

O Secure Copy (scp) é utilizado como o substituto do antigo rcp, permitindo efetuar cópias de ficheiros entre máquinas. Imaginemos que o utilizador está autenticado na sua máquina e pretende copiar um ficheiro chamado . bashrc localizado na sua diretoria pessoal  para a sua diretoria pessoal no ServerA. O comando será: 

[pmatias@hostA ~]$ scp .bashrc serverA:/home/yyang

Para efetuar a operação inversa, bastará trocar a ordem

[pmatias@hostA ~]$ scp serverA:/home/yyang/.bashrc  .

O Secure FTP permite uma operacionalidade idêntica ao protocolo ftp, mas de forma segura. Para efetuar a ligação a um sistema remoto que tenha um servidor de SFTP a correr bastará executar o comando, usando as credenciais do acesso por ssh:

[root@hostA ~]# sftp yyang@serverA

Após a autenticação surgirá a prompt 

sftp>

Poderá, tal como no acesso por ftp, listar directorias e efetuar download e upload de ficheiros. Para mais informações sobre os comandos disponíveis digitar ? .

Existe um excelente software para Windows que permite toda a operacionalidade do SCP e do SFTP num ambiente user-friendly – WinSCP-. Descarregue-o em http://winscp.net/eng/download.php

Fontes: Linux Administration, a beginners guide, wikipedia.