SSH - Secure Shell
Introdución
O nome SSH fai referencia ó protocolo de nivel de aplicación que permite conectarse de forma remota a un equipo obtendo unha liña de comandos para a súa administración. Trátase dun protocolo baseado no modelo cliente-servidor, onde o servidor ssh escoita por defecto no porto tcp/22.
SSH emprega a criptografía para encargarse (dun xeito transparente para o usuario) das operacións necesarias para acadar:
Privacidade: a información que circula pola rede está protexida ó usarse técnicas de cifrado forte. Os datos son 'transformados' de forma que son entendibles unicamente polo seu lexítimo destinatario; polo tanto, aínda que un sniffer os capturase non se poderían recuperar.
Nas seguintes imaxes poden compararse as capturas dun paquete ssh e dun paquete telnet (protocolo semellante ó ssh pero que non cifra as comunicacións). No caso do telnet, os contidos dos paquetes viaxan en claro pola rede, polo que un atacante podería ver sen problema ningún a información (por exemplo o nome de usuario e contrasinal de acceso ó equipo); sen embargo, o paquete SSH ó ir cifrado o seu contido non é lexible.
Sesión telnet
Fig. Captura correspondente a unha sesión telnet.
Paquete ssh cifrado
Fig. Captura dun paquete SSH.
Integridade: garántese que os datos non se alteraron durante a súa viaxe pola rede. Se un terceiro modifica os datos en tránsito o destinatario será consciente diso. SSH encárgase de verificar que os datos non se modificaron e que ademais proceden realmente do outro extremo da conexión. Autenticación: antes de poder iniciar unha sesión no equipo remoto compróbanse as identidades do servidor e do cliente: Server Authentication: o cliente comproba a identidade do servidor ssh para asegurarse que se está conectando ó servidor de verdade e non cun impostor. Compara a clave pública que lle envía o equipo remoto coa clave pública do servidor; e no caso de non coincidir, alerta do erro na identificación do servidor.
$ ssh magasix@192.168.1.254
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that a host key has just been changed. The fingerprint for the ECDSA key sent by the remote host is a9:c4:8c:cb:b8:0c:d3:10:e8:83:1b:4b:02:5d:3b:65. Please contact your system administrator. Add correct host key in /home/manuel/.ssh/known_hosts to get rid of this message. Offending ECDSA key in /home/manuel/.ssh/known_hosts:1 remove with: ssh-keygen -f "/home/manuel/.ssh/known_hosts" -R 192.168.1.254 ECDSA host key for 192.168.1.254 has changed and you have requested strict checking. Host key verification failed.
Fig. Erro na autenticación do equipo 192.168.1.254 ó non coincidir a clave pública desta conexión coa clave pública gardada en conexións anteriores
User Authentication: o servidor comproba a identidade do usuario que quere conectarse. SSH permite diferentes mecanismos de autenticación de usuarios; negociando o cliente e o servidor cal se vai a usar. Destacan os baseados en: Usuario-contrasinal: o usuario envía un contrasinal que é verificada polo servidor. A diferenza de telnet, en ssh tanto o envío do usuario/contrasinal como toda a sesión está cifrada. Claves (keys): o servidor comproba a identidade do usuario grazas ás claves da súa identidade dixital.
$ ls -lahF .ssh
total 48K drwx------ 2 manuel manuel 4,0K feb 14 23:51 ./ drwxr-xr-x 77 manuel manuel 12K feb 20 17:12 ../ -rw------- 1 manuel manuel 3,3K dic 5 13:17 id_rsa -rw------- 1 manuel manuel 3,2K dic 5 13:58 id_rsa_asir01 -rw-r--r-- 1 manuel manuel 756 dic 5 13:58 id_rsa_asir01.pub -rw------- 1 manuel manuel 3,3K dic 4 15:44 id_rsa_magasix -rw-r--r-- 1 manuel manuel 743 dic 4 15:44 id_rsa_magasix.pub -rw-r--r-- 1 manuel manuel 759 dic 5 13:17 id_rsa.pub -rw------- 1 manuel manuel 2,2K feb 19 02:30 known_hosts -rw------- 1 manuel manuel 2,0K feb 10 03:38 known_hosts.old
$ ssh -i .ssh/id_rsa magasix@192.168.56.253
Welcome to Ubuntu 14.04.3 LTS (GNU/Linux 3.13.0-76-generic x86_64)
* Documentation: https://help.ubuntu.com/
System information as of Sat Feb 20 18:48:14 CET 2016
System load: 0.09 Processes: 72
Usage of /: 7.7% of 19.07GB Users logged in: 1
Memory usage: 11% IP address for eth0: 192.168.56.253
Swap usage: 0%
Graph this data and manage this system at:
https://landscape.canonical.com/
Last login: Sat Feb 20 18:48:14 2016 from 192.168.56.1
Fig. Exemplo de autenticación do usuario magasix nun equipo remoto usando a súa identidade dixital (parella de claves privada/pública)
Control de acceso: é posible restrinxir os accesos aplicando controis por usuario, máquina e usuario-máquina. No seguinte exemplo, únicamente é permitido o acceso por ssh ó usuario magasix dende a máquina 192.168.56.100. De non cumprirse ambalas dúas condicións á vez, non se pode acceder por ssh como pode verse no arquivo de log:
/etc/ssh/sshd_config ... AllowUsers magasix@192.168.56.100 ...
$ ssh magasix@192.168.56.253 magasix@192.168.56.253's password: Permission denied, please try again. magasix@192.168.56.253's password: Permission denied, please try again. magasix@192.168.56.253's password: Received disconnect from 192.168.56.253: 2: Too many authentication failures for magasix manuel@lubuntu:~$ Feb 20 19:24:31 server sshd[2442]: User magasix from 192.168.56.1 not allowed because not listed in AllowUsers Feb 20 19:24:31 server sshd[2442]: input_userauth_request: invalid user magasix [preauth] Feb 20 19:24:33 server sshd[2442]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.168.56.1 user=magasix
Fig. Exemplo de directiva de control de acceso en ssh
Execución remota e segura de comandos: aínda que o uso máis habitual de ssh é o de obter unha líña de comandos no equipo remoto, tambén ofrece a posibilidade de executar un único comando. Por exemplo:
$ ssh magasix@192.168.56.253 ethtool eth0
Settings for eth0:
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supported pause frame use: No
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Advertised pause frame use: No
Advertised auto-negotiation: Yes
Speed: 1000Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 0
Transceiver: internal
Auto-negotiation: on
MDI-X: off (auto)
Current message level: 0x00000007 (7)
drv probe link
Link detected: yes
Cannot get wake-on-lan settings: Operation not permitted
Fig. Execución remota de comandos no equipo 192.168.56.253 por ssh
Transferencia de arquivos segura: permite copiar ficheiros entre dous equipos de forma segura (autenticación e transferencia cifradas) con scp. Ademáis con ssh e sftp pódese ter un reemplazo ó servizo FTP onde todo o tráfico vai en claro.
$ scp webmin_1.780_all.deb magasix@192.168.56.253:
webmin_1.780_all.deb 100% 27MB 26.7MB/s 00:00
$ scp magasix@192.168.56.253:/var/log/iptables.log iptables_20_02_16.log
iptables.log 100% 468 0.5KB/s 00:00
Fig. Exemplo de copia de arquivos de local a remoto e de remoto a local usando scp
Tunneling (Port Forwarding): SSH permite crear conexiones cifradas entre dous equipos por onde circula tráfico procedente doutras aplicacións. Esto permitiría usar de forma segura e sen facer modificacións, protocolos non seguros por que no seu deseño orixinal non se contemplou o cifrado.