SSH - Secure Shell

De MediaWiki
Ir a la navegación Ir a la búsqueda

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 as seguintes características.

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.