Domanda

Non proprio una domanda di programmazione, ma rilevante per molti programmatori ...

Diciamo che ho aperto una sessione SSH su un altro computer.

  

remoto: html avalys $ ls
  welcome.msg index.html readme.txt
  remoto: html avalys $

Esiste un comando che posso digitare nella mia shell remota che trasferirà immediatamente uno dei file nella directory corrente (ad esempio welcome.msg) sul mio computer locale, ad esempio

  

remoto: html avalys $ stransfer welcome.msg
  Recupero /home/avalys/html/welcome.msg su welcome.msg
  /home/avalys/html/welcome.msg 100% 23KB 23.3KB / s 00:00
  remoto: html avalys $

L'unico modo che conosco per farlo è aprire una sessione SFTP parallela e un CD sulla mia directory corrente nella sessione SSH, che è un vero PITA quando si gestisce un server da remoto.

EDIT: sono consapevole della possibilità di utilizzare una connessione sftp / scp inversa, ma ciò implica una maggiore digitazione. Sarebbe bello se potessi digitare solo il nome di un comando (ad es. & Quot; stransfer "), e i file che voglio trasferire, e farlo funzionare.

È stato utile?

Soluzione

È possibile impostare una connessione di trasferimento invertita con ssh -Rport: 127.0.0.1: 22 user @ host per scp back.

Usa scp user @ host: port per accedervi.

Altri suggerimenti

Nella ricerca di questo ho trovato un programma che funziona come sostituto del drop-in per il client openssh, zssh.

sudo apt-get install zssh
zssh user@remote
sudo apt-get install zssh
sz file.name
<ctrl>+<space>
rz

Funziona come un fascino.

Ecco la mia soluzione preferita a questo problema [come indicato in una domanda duplicata che ho fatto]. Impostare un tunnel SSH inverso al momento della creazione della sessione SSH. Ciò è reso semplice da due funzioni bash: grabfrom () deve essere definito sull'host locale, mentre grab () deve essere definito sull'host remoto. Puoi aggiungere qualsiasi altra variabile ssh che usi (ad esempio -X o -Y) come ritieni opportuno.

function grabfrom() { ssh -R 2202:127.0.0.1:22 ${@}; };
function grab() { scp -P 2202 $@ localuser@127.0.0.1:~; };

Utilizzo:

localhost% grabfrom remoteuser@remotehost
password: <remote password goes here>
remotehost% grab somefile1 somefile2 *.txt
password: <local password goes here>

positivi:

  • Funziona senza software speciale su nessuno degli host oltre OpenSSH
  • Funziona quando l'host locale si trova dietro un router NAT
  • Può essere implementato come una coppia di due funzioni bash a una riga

Negativi:

  • Utilizza un numero di porta fisso quindi:
    • non funzionerà con più connessioni all'host remoto
    • potrebbe entrare in conflitto con un processo che utilizza quella porta sull'host remoto
  • Richiede localhost accettare connessioni ssh
  • Richiede un comando speciale all'avvio della sessione
  • Non gestisce implicitamente l'autenticazione nell'host locale
  • Non consente di specificare la directory di destinazione su localhost
  • Se prendi da più host locali allo stesso host remoto, a ssh non piacerà cambiare le chiavi

Lavori futuri: Questo è ancora abbastanza kludgy. Ovviamente, sarebbe possibile gestire il problema di autenticazione impostando le chiavi ssh in modo appropriato ed è ancora più semplice consentire la specifica di una directory remota aggiungendo un parametro a grab ()

Più difficile è affrontare gli altri aspetti negativi. Sarebbe bello scegliere una porta dinamica ma, per quanto ne so, non esiste un modo elegante per passare quella porta alla shell sull'host remoto; Per quanto posso dire, OpenSSH non consente di impostare variabili di ambiente arbitrarie sull'host remoto e bash non può prendere variabili di ambiente da un argomento della riga di comando. Anche se potresti scegliere una porta dinamica, non c'è modo di assicurarti che non venga utilizzata sull'host remoto senza prima collegarti.

Puoi montare una connessione ssh con sshfs. In questo modo è possibile trasferire file all'interno della stessa connessione SSH, utilizzando qualsiasi client SSH che preferisci. Puoi anche impostarlo su automount, se lo desideri.

Se ti piacciono le cose di patching (che IMHO non dovrebbe essere patchato), dai un'occhiata a ssh-xfer

Potresti scrivere uno script bash chiamato stransfer che richiederebbe un argomento nomefile, quindi interpellerebbe il nome file nel comando scp, supponendo che il server e il percorso dei file sul server non cambino.

O se il file è sempre lo stesso, puoi creare un alias nel tuo file ~ / .bashrc.

alias getwelcome = 'scp avalys @ remotehost: /home/avalys/html/welcome.msg.'

Ho avuto lo stesso pensiero che Paul Tomblin ha scritto in un commento alla domanda. Le vecchie sessioni del terminale utilizzavano i protocolli e gli strumenti x-, y- e z-modem ( sz e rz per le varianti di z-modem) per ottenere qualcosa del genere. Non sono sicuro che funzioneranno su una sessione SSH, ma potrebbe valere la pena provarlo.

Fink fornisce un pacchetto lrzsz con questi strumenti su Mac OS X.

Renderlo una wiki della comunità perché mi sentirei male per ottenere un rappresentante dopo che Paul ci è arrivato prima ...

A scuola, se trasferisco un file da un sistema Linux a un altro, di solito utilizzo remoto con ssh e quindi utilizzo scp per trasferire il file dal sistema remoto al mio computer. Non sono sicuro se questo è quello che stai cercando o se è applicabile anche nel tuo caso, ma di solito è il mio modo di aggirare dover aprire un'altra finestra del terminale.

Solo per chiarire se non hai familiarità con scp, dovresti comunque specificare la posizione di cui vorresti mettere il file sul tuo computer, ma per me comunque questa è generalmente una cosa più facile da ricordare rispetto alla posizione del file sul computer remoto. Ecco un link che può essere utile: http://www.computerhope.com/unix/scp htm

https://superuser.com/questions/259481/reverse-scp-over-ssh -Connection

sftp server
get file.txt

Apparentemente, puoi anche navigare in n cose nella console sftp e get occupa un percorso file completo. Copia nella directory da cui è stato eseguito sftp .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top