SSH chiave pubblica, chiave privata e binding. Le mille funzioni di SSH.

openssh

Questo articolo descrive alcune funzioni di SSH meno pubblicizzate, ma molto comode.
In particolare analizza come sia possibile effettuare connessioni senza dover immettere una password e come sia possibile creare dei tunnel per connettere porte remote irraggiungibili sfruttando il canale SSH e la sola porta 22.

tunnel_ssh

Supponiamo di avere un computer in azienda dove vogliamo collegarci.

Questa azienda è protetta da firewall, noi vorremmo collegarci a questo computer senza modificare niente sul firewall.

Inoltre vorremmo collegarci in maniera veloce senza dover ricordare molti indirizzi o password.

Vediamo quali passi dobbiamo compiere per raggiungere questo risultato.

Prerequisiti:

  • Due computer aventi linux , oppure windows con i programmi necessari installati (es:openSSH e\o cygwin o analoghi.)
  • La porta SSH dell’host deve essere raggiungibile dall’esterno. Quindi in questo caso almeno una regola sul firewall è necessaria.
  • Il demone SSHD dell’host deve avere queste configurazioni abilitate nel file /etc/ssh/sshd_config:
    HostbasedAuthentication yes
    RSAAuthentication yes
    PubkeyAuthentication yes

Come primo passo, rendiamo possibile il collegamento senza dover digitare user e password.

Creiamo la chiave asimmetrica per la cifratura

ssh-keygen -t dsa -b 1024

l’opzione “-t” indica il il tipo di chiave,nel nostro caso dsa. “-b” indica la lunghezza.

durante la creazione della chiave sceglieremo il nome e se utilizzare una passphrase per aumentarne il livello di sicurezza. Se lasciamo il campo vuoto non verrà richiesta. Per comodità non la utilizzo.

1-ls-ssh

i due file di colore verde sono le chiavi generate. Una chiave privata “portatile” ed una chiave pubblica “portatile.pub”

adesso con ‘utility di SSH copiamo la nostra chiave pubblica sul computer remoto, quello dove vogliamo collegarci senza utilizzare utente e password.

ssh-copy-id -i /home/mazzantil/.ssh/portatile.pub root@host_remoto.it

2-ssh-copy-id-r

visualiziamo la nostra chiave pubblica vedremo questo:

3-aut-port

adesso visualizziamo il file authorized_keys dell’host remoto.

4-remoto-aut

Vediamo solo le righe sottolineate in verde. Vediamo che la prima figura indica la  chiave in locale portatile.pub vedrete una marea di numeri e lettere che terminano con “+jkQ==” . Nella seconda immagine “chiavi di autorizzazione” del server remoto è presente la nostra chiave portatile.pub infatti le utlime cifre sono “+jkQ==”. In altre parole quando il nostro portatile si presenta all’host remoto gli fornisce la nostra chiave pubblica, l’host la verifica con quelle autorizzate che ha nel file “authorized_keys” ed iniziano una connessione cifrata con chiave asimetrica portatile.pub e portatile. Il file portatile è la nostra chiave privata ,quindi è la sua riservatezza è importante come la password nell’autenticazione standard.

Eseguiamo queste operazioni per tutti gli host a cui vogliamo connetterci.

Adesso entriamo nella cartella ssh del nostro utente /home/utente/.ssh
creiamo un file config ed inseriamoci i dati per raggiungere l’host remoto.

mazzantil@mazzantil-laptop ~ $ cd /home/utente/.ssh/
mazzantil@mazzantil-laptop ~ $ echo "Host 80.80.80.80" >> config
mazzantil@mazzantil-laptop ~ $ echo "HostName pippo" >> config
mazzantil@mazzantil-laptop ~ $ echo "Port 222" >> config
mazzantil@mazzantil-laptop ~ $ echo "User paperino" >> config

adesso basterà digitare ssh “nome_nostro_host” (ssh pippo) e ci collegheremo all’host_remoto senza necessità di inserire altro.

3-login

Consiglio:

se non volete permettere il login tramite password, ma solo attraverso public key, settate anche nel file sshd_config le opzioni:

ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM  no

Da non usare se avete utilizzato una passphrase nella generazione della chiave.
A questo punto basterà digitare ssh nome_host e ci collegheremo all’host remoto senza inserire user e sopratutto senza la necessità di inserire la password grazie alla chiave pubblica!!

se adesso alla stringa sopra riportata aggiungo un comando, questo verrà eseguito direttamente:

ssh host_remoto tail /var/log/syslog

Quindi nel mio terminale locale, vedrò l’output del server remoto.

Fino a questo punto ci siamo collegati al nostro host remoto evitando di digitare indirizzo ,untente e passwrod.

A questo punto oltre all’ host remoto vogliamo collegarci anche in terminal server ad un client della rete, senza modificare niente sul firewall e utilizzando un tunnel SSH.

ssh -L 3390:192.168.0.10:3390 host_remoto

il comando completo sarebbe

ssh -L porta_locale:indirizzo_remoto:porta_destinazione utente@serversshremoto.com
  •     L’opzione -L sta ad indicare che vogliamo creare un binding SSH
  •     La porta 3389 è la porta alla quale ci dovremo connettere in locale, per raggiungere il nostro servizio remoto (nel nostro caso sarà: localhost:3390)
  •     indirizzo_remoto.com è il nome del server al quale non avremmo avuto accesso senza il tunnel
  •     80 è la porta del servizio remoto al quale non ci potevamo connettere
  •     utente è il nome di un utente che ha accesso sul server SSH remoto
  •     serversshremoto.com è l’indirizzo del server SSH remoto

Fatto questo se apriamo la console RDP per aprire il desktop remoto basterà inserire nell’indirizzo localhost:3390

rdp

Ovviamente non ci sono limiti a questa applicazione, dobbiamo solamente fare attenzione alle porte e indirizzi che scegliamo.

Un altro esempio di applicazione.

Vogliamo collegarci all’interfaccia web del nostro access point in ufficio, ma siamo in un’altra sede. Supponiamo di non avere una vpn.

il nostro access point ha indirizzo 192.168.0.15 ed ha la console su interfaccia http standard. La sede ha ip pubblico 80.80.80.80 e l’accesso SSH è sulla porta 222 dal nostro portatile apriamo ssh e digitiamo

ssh -L 81:192.168.0.15:80 -p222 user@80.80.80.80

provo a tradurre il comando:

ssh utilizza il tunnel -L redirigi la porta 81 dal mio portatile verso la porta 80 dell'indirizzo ip 192.168.0.15 passando dal cananle ssh creato con 80.80.80.80

Adesso se apriamo il browser del vostro computer e digitiamo http://localhost:81 vedremo l’interfaccia dell’access point della sede remota.

Se il nostro client locale è windows non abbiamo ssh, quindi possiamo scaricare putty ed inserire le configurazioni come sotto:

putty_tunnels_page_a

nel nostro esempio source port 81 destination 192.168.0.15:80 e premiamo add.