GNU/Linux >> Linux Esercitazione >  >> Linux

Come tornare a scp in locale quando sono già passato a una macchina remota?

Dato che hai un sshd in esecuzione sul tuo computer locale, è possibile e non è necessario conoscere il tuo indirizzo IP in uscita. Se il port forwarding SSH è abilitato, puoi aprire un tunnel sicuro anche quando hai già una connessione ssh aperta e senza terminarla.

Supponiamo che tu abbia una connessione ssh a qualche server:

local $ ssh [email protected]
Password:
remote $ echo abc > abc.txt  # now we have a file here

OK ora dobbiamo copiare quel file sul nostro server locale e per qualche motivo non vogliamo aprire una nuova connessione. OK, prendiamo la riga di comando ssh premendo Enter ~C (Digita, poi tilde, poi C maiuscola):

ssh> help
Commands:
      -L[bind_address:]port:host:hostport    Request local forward
      -R[bind_address:]port:host:hostport    Request remote forward
      -D[bind_address:]port                  Request dynamic forward
      -KR[bind_address:]port                 Cancel remote forward

È proprio come il normale -L/R/D opzioni. Avremo bisogno di -R , quindi premiamo Enter ~C di nuovo e digita:

ssh> -R 127.0.0.1:2222:127.0.0.1:22
Forwarding port.

Qui inoltriamo la porta 2222 del server remoto alla porta 22 della macchina locale (ed è qui che è necessario che il server SSH locale sia avviato sulla porta 22; se è in ascolto su un'altra porta, usala invece della 22).

Ora basta eseguire scp su un server remoto e copia il nostro file sulla porta 2222 del server remoto che è mappata sulla porta 22 della nostra macchina locale (dove il nostro sshd locale è in esecuzione).

remote $ scp -P2222 abc.txt [email protected]:
[email protected]'s password:
abc.txt                   100%    4     0.0KB/s   00:00

Abbiamo finito!

remote $ exit
logout
Connection to example.com closed.
local $ cat abc.txt
abc

Complicato, ma se davvero non puoi basta eseguire scp da un altro terminale, potrebbe essere d'aiuto.


Ho trovato questa soluzione di una riga su SU molto più semplice della risposta accettata. Poiché utilizza una variabile ambientale per l'indirizzo IP locale, penso che soddisfi anche la richiesta dell'OP di non conoscerlo in anticipo.

sulla base di ciò, ecco una funzione bash per "scaricare" un file (ovvero inviare dalla sessione SSH a una posizione impostata sulla macchina locale)

function dl(){
    scp "$1" ${CLIENT_IP%% *}:/home/<USER>/Downloads
}

Ora posso solo chiamare dl somefile.txt mentre SSH era collegato al telecomando e somefile.txt appare nella mia cartella Download locale.

extra:

  • Uso le chiavi rsa (ssh-copy-id) per aggirare la richiesta della password
  • Ho trovato questo trucco per evitare che il bashrc locale venga prelevato dalla chiamata scp

Nota:questo richiede l'accesso SSH alla macchina locale da remoto (è così spesso per chiunque?)


Linux
  1. Come inoltrare una chiave Ssh già inoltrata in Tmux?

  2. Come inviare dati agli appunti locali da una sessione SSH remota

  3. Come posso copiare l'output da un comando remoto negli appunti locali?

  4. Come connettersi a una macchina virtuale hyper-v locale tramite SSH?

  5. Da VMware e Fedora 29 ssh alla macchina remota causa Broken pipe

Come SSH in una directory particolare su Linux

Come SSH in un Docker Container

4 modi per trasferire file tra sistemi remoti e locali su SSH

Procedura:Amministrazione remota di FreeBSD

Come eseguire SSH in WSL2 su Windows 10 da un computer esterno

Come eseguire SSH in una macchina Windows 10 da Linux O Windows O ovunque