Ricerca tra la vecchia roba

Doppio scp e caratteri di escape con SSH

Posted: marzo 11th, 2009 | Author: | 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.

 

double scp picture.

 

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).


Comments are closed.