È possibile SCP da remoto a locale mentre si è connessi al telecomando e senza conoscere l'indirizzo IP locale?


31

Mi ritrovo regolarmente a voler copiare un file dalla sessione del terminale remoto sul mio computer locale. Di solito esco dalla sessione remota e chiamo un trasferimento scp da locale per copiare il file da remoto a locale. Ma questo sembra un po 'lungo. Vorrei trasferire il file mentre sono connesso al telecomando su SSH per risparmiare tempo. La mia macchina locale è connessa a Internet da un intervallo IP dinamico, quindi non sono mai abbastanza sicuro su come collegarmi a distanza. Ma sicuramente, poiché la sessione remota ha origine dal mio laptop, ci deve essere un collegamento in SCP per tornare al mio laptop ... Giusto?

Risposte:


20

Per questo puoi usare il tunneling SSH .

Utilizzando il tunneling è possibile inoltrare una porta TCP dal computer locale al computer remoto o dal computer remoto al computer locale. Lo uso spesso per inoltrare, ad esempio, le porte SMTP o IMAP da un computer remoto dietro un firewall al mio computer locale (e quindi accedere ai servizi localmente, come se fossero in esecuzione in locale).

Per inoltrare la porta 22 (SSH) dal computer locale al computer remoto, provare questo:

ssh -R12345:localhost:22 yourremoteuser@remotemachine

(Si noti che localhost si riferisce al nome locale della macchina remota)

Dopo averlo eseguito, dovresti essere in grado di tornare a casa usando:

ssh -p12345 yourlocaluser@127.0.0.1

Quando usi scp, dovresti fare qualcosa del genere (scp ha una P maiuscola per il port forwarding):

scp -P12345 filename 127.0.0.1:/tmp/filename

Il port forwarding nell'altra direzione (da remoto a locale) usa -L invece di -R.

I comandi precedenti presuppongono che si stia utilizzando un client ssh terminale. I client grafici, come PuTTY per Windows, supportano anche il tunneling


Non risponde alla domanda di OP il cui IP non è statico.

2
A meno che non mi sia sfuggito qualcosa, ciò dovrebbe andare bene affinché l'OP si ricolleghi dalla macchina attualmente remota a quella locale. Il tunneling verrà eseguito durante la sessione SSH. Poiché la connessione SSH viene configurata dalla macchina locale dinamica al telecomando, avrà esito positivo e sarà quindi in grado di configurare una porta di ascolto sulla macchina remota che esegue il tunneling da dove proviene.

Ciò richiederà che OP configuri il server SSH sul suo computer locale e si occupi dell'autenticazione. Quindi questo potrebbe essere più un problema di quanto non valga in alcuni casi d'uso.
Settagramma

Non solo funziona con IP dinamici, ma funziona anche attraverso firewall che proibiscono connessioni ssh da remoto a locale. Risposta molto utile!

3
Puoi averlo ancora più conveniente impostando il port forwarding remoto con la ~Cescape. Basta digitare <Enter>~C-R 12345:localhost:22<Enter>e hai il tunnel senza uscire dalla sessione SSH già stabilita.

6

Provare quanto segue nella riga di comando dal computer remoto, potrebbe essere necessario abilitare il port forwarding sul router.

scp <file on remote machine> ${SSH_CLIENT%% *}:<directory on local machine>

Fonte: rimanda facilmente un file all'host da cui ti stai collegando (commandlinefu.com)


1
Per spiegare cosa fa questo per le persone, è stato ${SSH_CLIENT%% *}emesso l'IP del computer locale. Quindi l'intero comando apre una sessione scp dal computer remoto al computer locale per il trasferimento dei file. Questo può essere fatto solo se puoi SSH sul tuo computer locale dal computer remoto.
bizi,

2
Questo può essere ulteriormente migliorato aggiungendo qualcosa di simile export ME="${SSH_CLIENT%% *}"al file shell rc. È quindi possibile utilizzare semplicementescp <file> $ME:<local path>
kralyk

Ottimo, funziona comunque, nota: se accedi tramite VPN i file non finiranno sul tuo computer, ma da qualche altra parte.
Kap

1

Forse zssh ?

zssh (Zmodem SSH) è un programma per il trasferimento interattivo di file su una macchina remota mentre si utilizza la shell sicura (ssh). È pensato per essere una comoda alternativa a scp, permettendo di trasferire file senza dover aprire un'altra sessione e riautenticarsi.

zssh è un wrapper interattivo per ssh

Utilizza le venerabili implementazioni rz, sz del trasferimento di file zmodem.


1

Ha votato a fondo questa domanda, è qualcosa che vorrei fare facilmente .

Ecco la risposta correlata: Come posso SCP da macchina remota a macchina locale quando sono al di fuori della mia rete domestica?

Devi consentire l'accesso a ssh dall'esterno della tua rete. Questo viene fatto inoltrando una porta sul router a banda larga al server IP del server. Tuttavia, ci sono alcuni problemi di sicurezza nel consentire l'accesso ssh dall'esterno, quindi potresti anche voler esaminare i metodi per proteggere l'autenticazione ssh, in particolare basata su chiavi e disabilitare completamente l'autenticazione con password.


0

Una soluzione sarebbe quella di sospendere la sessione SSH sul computer locale, eseguire la copia sul computer locale e quindi riprendere la sessione SSH da dove era stata interrotta.

Ad esempio, supponiamo di essere connesso a myuser @ remote e di voler copiare il file lol.txt sul mio computer locale. Per prima cosa voglio sospendere ssh sul mio computer locale. Normalmente useresti Ctrl- Zper sospendere, ma questo non funzionerà in ssh perché verrà inviato alla shell remota. Invece, è necessario utilizzare la sequenza di escape ssh Enter~. Quindi per sospendere ssh premere Enter~ Ctrl- Z. Ora puoi eseguire comandi sul tuo computer locale e puoi farlo

user@localmachine:~$ scp user@remote:/path-to-file/lol.txt /dest-path/lol.txt

per copiare il file e poi tornare a ssh esattamente dove lo hai lasciato

user@localmachine:~$ fg


ma il problema non è la copia da remoto, il problema è la copia da remoto, non vedo come sospendere la shell faccia qualcosa per risolverlo ...
alex

Bene funziona anche nell'altro modo. L'idea è solo di sospendere la sessione invece di uscire, il che rende almeno un po 'più semplice.
Steen Schütt,

0

Se vuoi una soluzione più semplice, apri semplicemente l'account Dropbox, vai al computer remoto e fai wget (versione modificata da qui ): wget --no-check-certificate https://www.dropbox.com/s/2123jshf/ABC.pdf?dl=1 -O abc.pdf

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.