Ho una serie di file software scaricati nella mia sottodirectory ~/Downloads
sul mio personal computer. Sto anche usando bash per connettermi in remoto a un computer utilizzando ssh
.
È possibile trasferire questo file ssh
sul computer remoto?
Ho una serie di file software scaricati nella mia sottodirectory ~/Downloads
sul mio personal computer. Sto anche usando bash per connettermi in remoto a un computer utilizzando ssh
.
È possibile trasferire questo file ssh
sul computer remoto?
Risposte:
Si consiglia di utilizzare scp
per questo scopo. È un mezzo sicuro per trasferire file usando il protocollo SSH.
Ad esempio, per copiare un file chiamato yourfile.txt
da ~/Downloads
un computer remoto, utilizzare:
scp ~/Downloads/yourfile.txt your_username@remotehost.edu:/some/remote/directory
Puoi vedere altri esempi qui .
rsync
possa funzionare anche adesso, ora che ci penso
scp
sopra con rsync
e dovrebbe funzionare bene.
rsync
per tutto, anche per i singoli file, perché "funziona" nei casi semplici e può essere molto più efficiente in altri casi. Se si utilizza uno scp
o rsync
su tutto quanto non già compressi e / o cifrati, ricordarsi di attivare l'opzione di compressione su ( -C
per scp
, -z
o --compress
per rsync
). In effetti lo accendo per abitudine - è molto raro trovare una circostanza in cui rallenta le cose (forse se stai usando un dispositivo lento a bassa potenza con potenza CPI limitata come un rPi).
Sebbene scp
sia chiaramente lo strumento giusto per questo, se per qualche motivo non puoi usarlo puoi fare qualcosa come il seguente dal tuo computer locale per copiare, diciamo, una struttura di directory sul computer remoto:
tar -c . | ssh <remote> tar -x
Questa sarà tar
la directory corrente sul computer locale e scriverà quella tar
a stdout
cui verrà quindi reindirizzato a un ssh
comando in cui eseguirà un comando remoto per decomprimere il file da cui leggestdin
Modificato per riflettere il commento di Dietrich Epp -f -
sull'essere il default sia in termini di creazione che di estrazione, quindi non necessario specificarlo esplicitamente.
-C basedir
argomento per tar
estrarre altrove dalla tua home directory se lo stai facendo.
Se vuoi farlo in più di una rara occasione, suggerirei di montare il filesystem remoto con sshfs
se stai usando un Unix-like che supporta FUSE (Linux, * BSD, Mac OS X). Crea una directory sotto la tua home directory, per esempio, chiamata ~ / remote-server:
$ mkdir ~/remote-server
Quindi montare il filesystem remoto con sshfs
. Sostituisci "yourserver.com" con il nome host del tuo computer remoto e "nome della directory remota" con la directory che stai utilizzando sul sistema remoto.
$ sudo sshfs username@yourserver.com:/name/of/remote/directory ~/remote-server/
Una volta fatto, la directory remota fa parte del tuo filesystem e puoi usare tutti i tuoi normali strumenti su di esso, tra cui cp
:
$ cp ~/Downloads/your-files ~/remote-server
Se non hai già sshfs
installato, dovresti essere in grado di installarlo sul tuo computer usando il tuo gestore pacchetti (cerca i pacchetti denominati sshfs
o fuse-sshfs
). Per ulteriori informazioni, puoi leggere un tutorial online .
Questo, a proposito, è il mio modo preferito di gestire i file su server remoti. Di solito mantengo un server di produzione e due server di sviluppo montati in questo modo e utilizzo il mio normale flusso di lavoro di esplorazione dei file.
-o idmap={none,user,file},gid=<remote_user_group_ID>,allow_other
e -C
per la compressione se la banda è scarsa. Non appena funziona bene, aggiungo personalmente gli alias per i comandi per montare rapidamente i filesystem distanti su ssh. @Benjamin_Staton Non userei sudo o root qui, non senza una corretta mappatura utente / gruppo.
La prima volta, non c'è alcuna differenza reale tra scp
(copia su ssh
) e rsync
.
Le esecuzioni successive trarranno vantaggio dal fatto che rsync non copierà i file già esistenti.
rsync -avH ~/Downloads username@remotehost:Downloads
-a
per tutti i file-v
per prolisso-H
per "basta capire i collegamenti simbolici e fare la cosa giusta"Altre bandiere utili includono:
--delete
per eliminare i file nella destinazione che non esistono più sull'origine.--dry-run
per i test - molto utile se combinato con --delete
.Questo userà le ssh
chiavi anche per fare un login senza password, se le hai impostate.
Alla fine della corsa, rsync
ti dirò quante volte è stato più veloce eseguire di nuovo la copia normale.
-H
è in realtà per i collegamenti reali, interrompe l'invio dello stesso contenuto due o più volte quando è collegato in più di un posto nella struttura della directory di origine (ma può rendere il processo meno efficiente per le strutture di directory di grandi dimensioni). non ha alcun effetto sui collegamenti simbolici, ma alcune delle opzioni incluse in -a
/ --archive
influenzano il modo in cui i collegamenti simbolici vengono elaborati.
Aggiungere alle risposte sopra. A volte non sono esattamente sicuro del percorso remoto. In questi casi, utilizzo sftp
prima per spostarmi nella posizione richiesta, quindi utilizzo get o put per scaricare o caricare un file.
Se vuoi anche mantenere qualcosa di sempre sincronizzato e vuoi persino eseguire localmente alcuni file che si trovano sul computer remoto, sshfs
funziona benissimo.
Sto facendo qualcosa di molto simile con ssh. Ho creato uno strumento di generazione personalizzato per Visual Studio e fondamentalmente sto eseguendo VS un comando ssh che copia il mio codice su un computer di destinazione e quindi lo compila su quel computer di destinazione.
ssh userB @ hostB 'cp /network/path/of/source/file.ext /path/of/final/file.ext; ./runCustomCommand'
Si noti l'uso di virgolette singole e punti e virgola. Il primo incapsula i comandi su hostB tramite ssh e il secondo consente di eseguire più comandi di sistema hostB in un comando ssh da hostA.
Per far funzionare tutto ciò, è necessario impostare le chiavi ssh sulla macchina di avvio in modo da poter essere userA @ hostA e accedere a hostB come userB. Il processo per la creazione di una chiave ssh pubblica per userA @ hostA è ben documentato. Se non crei una chiave pubblica su hostA per userA e copi quella chiave su hostB come userB, allora sarai costretto a inserire la password ogni volta, il che rovina la gioia dell'automazione.
this file
) e più file (a series of software files
), la soluzione migliore dipende dal fatto che tu abbia un singolo file o più file.