Doppio scp e caratteri di escape con SSH
Posted: Marzo 11th, 2009 | Author: packz | Filed under: networking, ssh | Commenti disabilitati su Doppio scp e caratteri di escape con SSH
SSH è il programma standard per il collegamento sicuro da remoto con un proprio computer. Supporta l’autenticazione tramite coppia username/password, chiavi pubblica/privata etc… oltre il programma ssh, installa un programma per copiare da remoto dei file, denominato scp e permette in tutta sicurezza appunto di copiare file fra computer collegati in rete in cui almeno uno sia dotato di questo servizio (di solito disponibile alla porta 22); il problema sorge quando il computer da cui vogliamo copiare il file si trova dietro ad gateway, cioè in una rete interna e quindi il servizio in questione non è direttamente raggiungibile dall’esterno. La soluzione banale sarebbe di copiare il file nel gateway e poi copiarla nel computer in cui ci interessa ma questo è problematico siccome il file potrebbe metterci delle ore dopo
le quali sarebbe necessario ripetere il processo e magari abbiamo anche
altro da fare, quindi come fare?
Nel seguente disegno (W inkscape e le icone scalabili di GNOME) il nostro gateway è il computer B, il computer a cui accediamo fisicamente è quello A, mentre il file desiderato è nel computer C.
Possiamo utilizzare il port forwarding: in pratica ssh mette a disposizione una feature tramite la quale è possibile creare un servizio fittizio su una porta non privilegiata che rimandi ad un altro host tramite la seguente sintassi
ssh -L<numero maggiore di 1024>:C:22 user-on-B@B
e poi eseguire l’scp nella seguente maniera
scp -P <numero porta scelta sopra> user-on-C@localhost:/remote/file/path /local/file/path
oppure usare rsync (che permette di riprendere un download finito male)
rsync -e "ssh -p <numero porta scelta sopra>" user-on-C@localhost:/remote/file/path /local/file/path
Il primo comando però lascia aperto un terminale collegato alla macchina B e magari non abbiamo testa di lasciare qualcosa di aperto sul computer di qualcun’altro, quindi dobbiamo chiudere il terminale senza interrompere la connessione e qui ci vengono in aiuto le sequenze di escape. Le sequenze di escape in generale sono caratteri che hanno un significato particolare per una data applicazione: ‘n‘ è il ritorno a capo, Ctrl-v vi permette nel terminale di inserire un CTrl-qualcosa letteralmente evitando che la sequenza sia interpretata dal terminale etc… per ssh il carattere di escape è la tilde (~) solo che usarla è un po’ un ciocco: bisogna prima dare invio (in una sessione ssh aperta of course) e poi digitare ~, infine premere il tasto relativo alla funzione che vi interessa; usando ? otteniamo una lista dei comandi available
Supported escape sequences:
~. – terminate connection (and any multiplexed sessions)
~B – send a BREAK to the remote system
~C – open a command line
~R – Request rekey (SSH protocol 2 only)
~^Z – suspend ssh
~# – list forwarded connections
~& – background ssh (when waiting for connections to terminate)
~? – this message
~~ – send the escape character by typing it twice
(Note that escapes are only recognized immediately after newline.)
Quindi ci andate di [INVIO]~& (attenzione che la tilde dopo l’invio non ve la visualizza!) e la shell remota andrà in background lasciandovi al sicuro… happy connectiong…
P.S: manda in background la shell dopo aver iniziato a copiare altrimenti il port forwarding cade.
P.P.S: usare l’opzione ‘-l‘ per indicare un limite in KiB/s per scp nel caso si utilizzi una ADSL casalinga, altrimenti non navigherete più (di solito io indico 20).