Project

General

Profile

AutosshTunnel » History » Version 2

Simone Piccardi, 06/23/2011 03:35 PM

1 1 Simone Piccardi
h1. Creare tunnel permanenti con autossh
2 1 Simone Piccardi
3 2 Simone Piccardi
Ci sono molte occasioni un cui creare occorre creare delle connessioni verso macchine e servizi che sono protette da firewall che è opportuno cifrare e proteggere adeguatamente, ma per le quali la creazione di una VPN diventa un onere eccessivo.
4 1 Simone Piccardi
5 2 Simone Piccardi
Per questo la capacità di _port forwarding_ di SSH è molto utile per creare un tunnel cifrato da una macchina ad un'altra, consentendo anche di condividere accessi locali (come ad esempio ad un MySQL che ascolta solo localmente) in maniera sicura, con il solo problema che in caso di problemi la connessione SSH (ed il relativo tunnel) potrebbero cadere. 
6 1 Simone Piccardi
7 2 Simone Piccardi
Per ovviare a questa eventualità e consentire di creare tunnel permanenti ci viene in aiuto @autossh@ un semplice programma che consente di eseguire una  istanza di @ssh@ mantenendola sotto controllo, e riavviando la stessa qualora la connessione dovesse cadere. 
8 1 Simone Piccardi
9 2 Simone Piccardi
Il comando prende una opzione principale, @-M@ che consente di indicare una porta di monitoraggio della connessione (per verificare cioè che l'istanza di @ssh@ sia attiva e funzionante utilizza la la porta indicata e la successiva per mandare dei messaggi che gli devono tornare indietro).
10 2 Simone Piccardi
11 2 Simone Piccardi
Con la versione 2 del protocollo @ssh@ supporta un controllo interno della connessione, che è più affidabile, pertanto si suggerisce di usare le opportune opzioni di controllo (che vedremo più avanti) ed indicare sempre un valore nullo  (cioè @-M 0@) che disabilita questo monitoraggio.
12 2 Simone Piccardi
13 2 Simone Piccardi
L'uso di @autossh@ consente di creare un numero arbitrario di tunnel in maniera molto sicura, se infatti non è necessario mettersi in ascolto su porte riservate, si può far eseguire il programma per conto di un utente non privilegiato, che nel nostro caso sarà appunto @autossh@. Si provvederà allora a creare detto utente su entrambi i capi del tunnel con:
14 2 Simone Piccardi
15 2 Simone Piccardi
<pre>
16 2 Simone Piccardi
useradd -m -s /bin/false autossh
17 2 Simone Piccardi
</pre>
18 2 Simone Piccardi
19 2 Simone Piccardi
e si noti come per l'utente si sia disabilitata la shell e non si sia impostata la password, cosa che renderà impossibile usare l'utente per un accesso al sistema (che non ci serve essendo esso utilizzato solo allo scopo di creare il tunnel).
20 2 Simone Piccardi
21 2 Simone Piccardi
La scelta di non impostare la password richiede l'uso della autenticazione a chiavi, cosa che è comunque il caso di usare sempre e se possibile in maniera esclusiva. Per questo sul capo della connessione che deve creare il tunnel si dovrà creare una chiave per l'utente, che, se si vuole che il tunnel possa partire automaticamente all'avvio, dovrà essere senza password; pertanto si dovranno eseguire i seguenti comandi:
22 2 Simone Piccardi
23 2 Simone Piccardi
<pre>
24 2 Simone Piccardi
root@hain:~# su -s /bin/bash autossh
25 2 Simone Piccardi
autossh@mail:/root$ ssh-kegen
26 2 Simone Piccardi
Generating public/private rsa key pair.
27 2 Simone Piccardi
Enter file in which to save the key (/home/autossh/.ssh/id_rsa): 
28 2 Simone Piccardi
Enter passphrase (empty for no passphrase): 
29 2 Simone Piccardi
Enter same passphrase again: 
30 2 Simone Piccardi
Your identification has been saved in /home/autossh/.ssh/id_rsa.
31 2 Simone Piccardi
Your public key has been saved in /home/autossh/.ssh/id_rsa.pub.
32 2 Simone Piccardi
The key fingerprint is:
33 2 Simone Piccardi
b6:b7:d5:1e:fd:b0:62:57:b5:77:4c:33:82:78:f7:06 autossh@dodds
34 2 Simone Piccardi
The key's randomart image is:
35 2 Simone Piccardi
+--[ RSA 2048]----+
36 2 Simone Piccardi
|                 |
37 2 Simone Piccardi
|                 |
38 2 Simone Piccardi
|          . .    |
39 2 Simone Piccardi
|         . o E oo|
40 2 Simone Piccardi
|        S . . +o=|
41 2 Simone Piccardi
|       . .   . ==|
42 2 Simone Piccardi
|        . . . =.+|
43 2 Simone Piccardi
|         . oo..+.|
44 2 Simone Piccardi
|          .. oo .|
45 2 Simone Piccardi
+-----------------+
46 2 Simone Piccardi
</pre>