Se ho effettuato l'accesso a un sistema tramite SSH, c'è un modo per copiare un file sul mio sistema locale senza avviare un altro terminale o una sessione dello schermo e fare scp o qualcosa di simile o senza eseguire SSH dal sistema remoto al sistema locale?
Risposta accettata:
Connessione principale
È più facile se pianifichi in anticipo.
Aprire una connessione master la prima volta. Per le connessioni successive, instradare le connessioni slave attraverso la connessione master esistente. Nel tuo ~/.ssh/config
, imposta la condivisione della connessione in modo che avvenga automaticamente:
ControlMaster auto
ControlPath ~/.ssh/control:%h:%p:%r
Se avvii una sessione ssh sulla stessa (utente, porta, macchina) di una connessione esistente, la seconda sessione verrà trasferita sulla prima. Stabilire la seconda connessione non richiede una nuova autenticazione ed è molto veloce.
Quindi, mentre hai la tua connessione attiva, puoi rapidamente:
- copia un file con
scp
orsync
; - monta un filesystem remoto con sshfs.
Inoltro
Su una connessione esistente, puoi stabilire un tunnel ssh inverso. Sulla riga di comando ssh, crea un inoltro remoto passando -R 22042:localhost:22
dove 22042 è un numero scelto casualmente diverso da qualsiasi altro numero di porta sulla macchina remota. Quindi ssh -p 22042 localhost
sulla macchina remota ti riconnette alla macchina di origine; puoi usare scp -P 22042 foo localhost:
per copiare i file.
Puoi automatizzarlo ulteriormente con RemoteForward 22042 localhost:22
. Il problema è che se ti connetti allo stesso computer con più istanze di ssh o se qualcun altro sta usando la porta, non ottieni l'inoltro.
Se non hai abilitato un inoltro remoto dall'inizio, puoi farlo su una sessione ssh esistente. Digita Invio ~C
Entra -R 22042:localhost:22
Entra .
Per ulteriori informazioni, vedere "Caratteri di escape" nel manuale.
Ci sono anche alcune informazioni interessanti in questo thread di errore del server.
Copia-incolla
Se il file è piccolo, puoi digitarlo e copiarlo e incollarlo dall'output del terminale. Se il file contiene caratteri non stampabili, utilizza una codifica come base64.
remote.example.net$ base64 <myfile (copy the output)
local.example.net$ base64 -d >myfile (paste the clipboard contents) Ctrl+D
Più convenientemente, se hai l'inoltro X attivo, copia il file sulla macchina remota e incollalo localmente. Puoi inviare i dati dentro e fuori xclip
o xsel
. Se vuoi preservare il nome del file e i metadati, copia e incolla un archivio.
remote.example.net$ tar -czf - myfile | xsel
local.example.net$ xsel | tar -xzf -