SSH

De Jose Castillo Aliaga
Ir a la navegación Ir a la búsqueda

SSH (Secure SHell) És un protocol per a la transferència d'arxius i gestió de maquines remotes amb connexió segura.

En base a aquest protocol hi han diferents programes per a la realitzar aquest tipus de tasques.

El que anem a estudiar és OpenSSH

Instal·lació i configuració d' OpenSSH

 $ sudo apt-get install ssh
 o
 $ sudo apt-get install openssh-server
  • Instal·la un paquet buit que fa referència a openssh-server i openssh-client
  • Es creen unes claus SSH2 RSA i DSA per identificar el servidor.
  • Les claus es guarden a la carpeta /etc/ssh
 $ cd /etc/ssh
 $ ls *key*
 ssh_host_dsa_key  ssh_host_dsa_key.pub  ssh_host_rsa_key  ssh_host_rsa_key.pub

Per defecte, té reservat el port 22 TCP i UPD, encara que el habitual és el TCP.

El fitxer de configuració del servidor és /etc/ssh/sshd_config

Opcions de configuració

Ús bàsic

La sintaxi de SSH segueix un esquema similar al del correu electrònic:

usuari@nom_maquina_remota

Els següents són exemples de connexió amb SSH a una màquina remota:

$ ssh lliurex@upv.edu
$ ssh lliurex@192.168.1.1
$ ssh 192.168.1.1

De vegades necessitem que quan fem una connexió remota tenim que carregar aplicacions amb entorn gràfic i ho faríem:

$ ssh -X [usuari de la maquina de destí]@[IP o Hostmane de la maquina de destí]

El -X sols funciona si el servidor té interficie gràfica i el servidor SSH ho permet.

Connexió sense contrasenya

En ocasion podem necessitar accedir a un servidor sense contrasenya. En aquest cas, tenim que indicar al servidor que es "fie" de la nostra clau pública. Però no de la del host, sino de la del nostre usuari en un altre usuari del servidor.

La comanda ssh-keygen s'encarrega de la creació dels parells de claus pública/privada per al nostre usuari. Per defecte, els fitxers depenent del protocol escollit:

   $HOME/.ssh/identity (clau privada) i $HOME/.ssh/identity.pub (clau pública)
   $HOME/.ssh/id_dsa (clau privada) i $HOME/.ssh/id_dsa.pub (clau pública) si el protocol escollit es DSA.
   $HOME/.ssh/id_rsa (clau privada) i $HOME/.ssh/id_rsa.pub (clau pública) si el protocol escollit es RSA. 
Les comandes exactes a utilitzar per generar les claus en cadascun dels casos anteriors són: 
$ ssh-keygen -t dsa 
$ ssh-keygen -t rsa 

El nom dels fitxers per defecte es pot canviar utilitzant el paràmetre -f.

Durant la creació de la clau se'ns preguntarà per la possibilitat de protegir l'ús de la clau amb contrasenya. Si la nostra intenció és automatitzar tasques podem anular aquest pas si no introduïm cap contrasenya (Enter).

 $ ssh-keygen -t rsa -b 2048

Els arxius són .ssh/id_rsa i .ssh/id_rsa.pub

El id_rsa.pub cal afegir-lo al .ssh/authorized_keys del servidor. Es pot fer amb scp.

Com que al generar les claus no hem ficat contrasenya, es connectarà directament. Si no, ens demana la de desencriptar la clau privada.

Per a eliminar un client:

ssh-keygen -R IP_client

Però crear la clau privada sense contrasenya no és molt recomanable. Per tant, es pot fer en contrasenya de manera que no ens la demane després.

Cal fer que el sistema la recorde una vegada per sessió amb el ssh-agent.

$ ssh-add -l                    # Llista de les claus que administra
$ ssh-add ~/.ssh/id_dsa         # Afegir la nostra

Pot ser que, avans de res, tingam que iniciar el ssh-agent:

$ eval "$(ssh-agent)"

Amb la autentificació a nivell de usuari pot ser insegura. En qualsevol cas, es fa una autentificació a nivell de màquina. Quant connectem per primera vegada ens diu si volem guardar el fingerprint del servidor.

Es guarda en .ssh/know_hosts

scp

Funciona de forma anàloga a la comanda cp, però utilitza prefixos de conexió a màquina remota:

usuari@host:/PATH_AL_FITXER 

Per exemple:

$ scp $HOME/file1 jose@sga2.upv.es:$HOME

Copia el fitxer file1 de la carpeta home local a la carpeta home del servidor sga2.upv.es.

Per a permetre sols scp mireu rssh

En -3 es pot fer una copia entre dos hosts remots sense passar per el nostre.

SSH backdoor o remote Forwarding

Sshproxy.png

Permet accedir via SSH a una màquina darrere d'un firewall.

La situació és la següent:
  • Tens accés a Internet, però algunes pàgines web estan tallades per el tallafocs o el ISP.
  • Tens accés a Internet i vols connectar-te a una pàgina personal però no vols que ningú de la teua xarxa escolte la comunicació ni sàpiga a quines web estàs entrant.
Amés, tens accés a una màquina en ta casa o la teua empresa que està connectada a Internet i dona accés per SSH.

Si la màquina té accés cap a l'exterior aleshores es possible saltar-se el tallafocs si tenim accés a la màquina.

Si existeix un tallafocs o necessites una certa privacitat en les connexions a Internet.

$ ssh -D 7070 jo@macasa.com

Redirecciona la connexió al port 7070.

Cal que el servidor tinga en /etc/ssh/sshd_config:

AllowTcpForwarding yes
GatewayPorts yes
TCPKeepAlive yes

En el Firefox es fica com a proxy sols en SOCKS v5 localhost:7070 i a funcionar!

Aquesta configuració crea un port dinàmic (-D). El que ha fet, realment, és convertir el servidor SSH en un servidor SOCKS. Un servidor SOCKS funciona com un proxy que no es llimita a tràfic http o https sino que és capaç de redireccionar qualsevol port.

Es pot millorar amb:

$ ssh -fN -D 0.0.0.0:7070 jo@macasa.com

Amb -f i -N creem un dimoni sense terminal remota que queda en un segon pla i amb 0.0.0.0 podem donar servici a altres hosts de la mateixa xarxa.

Amés del firefox, el programa curl també pot utilitzar un proxy SOCKS v5:

$ curl --socks5-hostname 127.0.0.1:1080 http://www.upv.es

Siguent: 1080 el port configurat per SSH.

Accedir a servicis darrere d'un tallafocs

Proxyssh2.png

En aquest cas, el problema és que vols accedir a una intranet a través d'un servidor SSH, que eś l'unic que dona servei a l'exterior de la xarxa.

En este cas, el tallafocs sols deixa passar el port 22.

Necessitem utilitzar el Samba, la web i el correu de la intranet.

El servidor SSH té com a IP pública 66.35.250.203

Cal configurar el portàtil per a tunelitzar el tràfic a través del servidor.

~/.ssh/config (amb permissos 600)

## Linux Laptop .ssh/config ##
Host work
HostName 66.35.250.203
       User lliurex # L'usuari és lliurex i el nom de la connexió es diu work. Per tant es pot fer $ ssh work
       LocalForward 20000 192.168.0.66:80
       LocalForward 22000 192.168.0.66:22
       LocalForward 22139 192.168.0.8:139
       LocalForward 22110 192.168.0.5:110

Host http
HostName localhost # després de la connexió és possible accedir directament al servidor http per ssh
       User donkey
       Port 22000
       HostKeyAlias localhosthttp

Aquesta sería la manera permanent de fer-ho, peró es poden fer coses en una sola comanda:

$ ssh -L 4000:destinacio:80 user@intermediari

(font)

Usos interessants

Backup d'un disc dur sobre SSH

# dd if=/dev/sda | ssh <usuari>@<servidor> "dd of=/<directori de backups>/backupfile.iso"

Inclús es pot comprimir:

# dd if=/dev/sda | gzip -c | ssh  <usuari>@<servidor> "dd of=/<directori de backups>/backupfile.gz"

D'aquesta manera podem mostrar una barra de progrés:

# dd if=/dev/sda | gzip -c | pv -s `sudo mount /dev/sda /media/sda && du -sb /media/sda/ | awk '{print $1}' && sudo umount /media/sda`| \
ssh  <usuari>@<servidor> "dd =/<directori de backups>/backupfile.gz"

El que hi ha entre `` és per a traurer la mida en bytes de la partició. D'aquesta manera, la barra de progrés és més realista.


Arrancar una aplicació gráfica amb SSH

Si al connectar utilitzem l'opció -X podem executar aplicacions amb interficie gràfica en la nostra màquina.

Si el que volem és que s'executen en l'altra, podem fer ús d'aquest comandament:

$ export DISPLAY=:0

I després executar l'aplicació.


Enllaços