Come copio una cartella da remoto a locale usando scp? [chiuso]


2697

Come si copia una cartella dall'host remoto all'host locale utilizzando scp?

Uso sshper accedere al mio server.
Quindi, vorrei copiare la cartella remota fooin locale /home/user/Desktop.

Come posso raggiungere questo obiettivo?


61
La domanda dell'OP era se fosse possibile copiare il file dall'host remoto all'host locale mentre lo si inviava all'host remoto . Non sono sicuro del motivo per cui nessuna singola risposta ha risposto correttamente alla sua domanda.
JeffDror,

3
La premessa della domanda non è corretta. L'idea è, una volta effettuato l'accesso a ssh, come spostare i file dalla macchina connessa al client che ha effettuato l'accesso. Tuttavia, scp non è a conoscenza né può utilizzare la connessione ssh. Sta facendo le proprie connessioni. Quindi la soluzione semplice è creare una nuova finestra di terminale sulla workstation locale ed eseguire scp che trasferisce i file dal server remoto al computer locale. Ad esempio, scp -i key user @ remote: / remote-dir / remote-file / local-dir / local-file
jeffmcneill

12
La domanda potrebbe essere fuori tema, ma è anche il post più alto in classifica su Google. Bloccarlo significa che nessuno può aggiornarlo per fornire una soluzione migliore.
Alex Harvey,

3
Recentemente ho posto una domanda simile "più profonda" sulle righe di comando per un altro strumento su SuperUser, ed è stato spostato dalle mod lì su StackOverflow. Ad ogni modo sono d'accordo con la tesi delle mod: possiamo SPOSTARLO su SuperUser per favore e averlo sbloccato e avere più risposte in arrivo?
Nikhil VJ,

3
In generale, l'intera reazione "off-topic" su StackOverflow è il singolo più grande difetto della piattaforma. Martinet troppo zelanti.
AdamC

Risposte:


4943
scp -r user@your.server.example.com:/path/to/foo /home/user/Desktop/

Non includendo il finale "/" alla fine di pippo, si sposterà la directory stessa (compresi i contenuti), anziché solo i contenuti della directory.

Da man scp(vedi manuale online )

-r Copia ricorsivamente intere directory


1412
Lo google ogni volta. Fumetto
cptloop,

10
Due cose carine che ho scoperto: la -Cbandiera aggiunge compressione e la -cbandiera ti permette di passare altri tipi di cifra per prestazioni migliori, come si scp -c blowfish a@b:something . vede nella risposta di dimuthu
Automatico,

79
usa -p per preservare i tempi di modifica dei file, i permessi, ecc.! scp -pr user @ ...
Ber

27
Questa risposta manca di una spiegazione importante. Si finisce con Desktop/fooo dovrete Desktop/allcontentsofFooGohereSCP sembra agire a volte strano per me che fa una cosa poi un'altra
Toskan

7
@Toskan con scp -r user@your.server.example.com:/path/to/foo /home/user/Desktop/te dovrebbe finire con Desktop/foo. Con scp -r user@your.server.example.com:/path/to/foo/. /home/user/Desktop/ te finirai con il contenuto di fooin Desktope tutti i sottodiretti di foosparso sottoDesktop
Ioannis,

307

Per usare tutta la potenza di SCP devi seguire i seguenti passi:

  1. Autorizzazione chiave pubblica
  2. Crea alias ssh

Quindi, ad esempio se hai questo ~ / .ssh / config :

Host test
    User testuser
    HostName test-site.com
    Port 22022

Host prod
    User produser
    HostName production-site.com
    Port 22022

ti salverai dall'inserimento della password e semplificherai la sintassi di scp in questo modo:

scp -r prod:/path/foo /home/user/Desktop   # copy to local
scp -r prod:/path/foo test:/tmp            # copy from remote prod to remote test

Inoltre, sarai in grado di utilizzare il completamento del percorso remoto:

scp test:/var/log/  # press tab twice
Display all 151 possibilities? (y or n)

Aggiornare:

Per abilitare il completamento bash remoto è necessario disporre di shell bash su entrambi <source>e <target>host e il completamento bash funziona correttamente. Per ulteriori informazioni, consultare le domande correlate:

Come abilitare il completamento automatico per i percorsi remoti quando si utilizza scp?
Completamento della scheda nome file SCP


12
Non sapevo del file di configurazione, è fantastico!
dmastylo

Il completamento della scheda non ha senso, per me è stato appena completato dall'host locale.
Bernhard

14
@ b.long La domanda è "Come copiare le cartelle remote sul desktop locale". La mia risposta è "scp -r prod: / path / foo / home / user / Desktop" . Spero che tu sia in grado di vedere le relazioni.
Alexander Yancharuk,

2
@ Bernhard Per me è stato ovvio perché sto usando bash-shell. Grazie per avermi indicato! Risposta aggiornata
Alexander Yancharuk,

1
@Alexander Yancharuk: Grazie per la risposta, questo è più dettagliato della semplice sintassi.
Gladiatore

217

Per copiare tutto dalla posizione locale alla posizione remota (carica)

scp -r /path/from/destination username@hostname:/path/to/destination

Per copiare tutto dalla posizione remota alla posizione locale (download)

scp -r username@hostname:/path/from/destination /path/to/destination

Porta personalizzata in cui xxxxè il numero di porta personalizzato

 scp -r -P xxxx username@hostname:/path/from/destination /path/to/destination

Copia sulla directory corrente da remoto a locale

scp -r username@hostname:/path/from/file .

Aiuto:

  1. -r Copia ricorsivamente tutte le directory e i file
  2. Usa sempre la posizione completa da /, Ottieni la posizione completa entropwd
  3. scp sostituirà tutti i file esistenti
  4. hostname sarà nome host o indirizzo IP
  5. se è necessaria una porta personalizzata (oltre alla porta 22), utilizzare -P portnumber
  6. . (punto) - indica la directory di lavoro corrente, quindi scarica / copia dal server e incolla solo qui.

Nota: a volte la porta personalizzata non funziona a causa della porta non consentita nel firewall, quindi assicurarsi che la porta personalizzata sia consentita nel firewall per la connessione in entrata e in uscita


1
Sembra (almeno nelle ultime versioni di Raspbian Jessie e Ubuntu) che scp usi -P (P maiuscola) per la porta, mentre (stranamente) ssh usa -p (lettere minuscole).
Adam Plocher,

-p è riservato per preservare "tempi di modifica, tempi di accesso e modalità dal file originale". Quindi, se lo stai usando per la porta, probabilmente non funziona ;-) A meno che tu non abbia una versione diversa che ha usato la minuscola in modo diverso.
Adam Plocher,

Con ssh, sì. Non con scp (suppongo).
Adam Plocher,

Cosa devo mettere se la directory contiene uno spazio?
Brethlosze,

@hyprfrcb Utilizzare pwdper ottenere la posizione e utilizzare lo stesso
Shiv Singh,

48

Quello che uso sempre è:

scp -r username@IP:/path/to/server/source/folder/  .

. (punto) : significa current folder. quindi copia dal server e incollalo solo qui.

IP : può essere un indirizzo IP simile 125.55.41.311o può essere un host ns1.mysite.com.


9
Grazie per aver sottolineato che si .riferisce alla directory corrente!
ericmjl,

35

Meglio comprimere prima il catalogo sul server remoto:

tar czfP backup.tar.gz /path/to/catalog

In secondo luogo, scarica da remoto:

scp user@your.server.example.com:/path/to/backup.tar.gz .

Alla fine, estrai i file:

tar -xzvf backup.tar.gz

10
"Migliore" dipende molto dai dati che si stanno trasferendo e dallo sforzo di ssh sul server per eseguire zippare / decomprimere. E: puoi aggiungere la compressione a scp con la -Cbandiera, come scp -C a@b:bigfile ..
Automatico,

4
Questo mi ricorda il commento fatto da @cptloop! : D xkcd.com/1168
GoodSp33d

22

E se hai un inferno di file da scaricare dalla posizione remota e se non ti interessa molto la sicurezza, prova a cambiare la crittografia predefinita di scp (Triple-DES) in qualcosa come "blowfish".

Ciò ridurrà drasticamente il tempo di copia dei file.

scp -c blowfish -r user@your.server.example.com:/path/to/foo /home/user/Desktop/

2
Secondo questo post del blog si ottengono prestazioni ancora migliori con arcfoural posto di blowfish, ma ha difetti di sicurezza.
Automatico,

20

Scenario tipico,

scp -r -P port username@ip:/path-to-folder  .

spiegato con un campione,

scp -r -P 27000 abc@10.70.12.12:/tmp/hotel_dump .

dove,

port = 27000
username = "abc" , remote server username
path-to-folder = tmp/hotel_dump
. = current local directory

Grazie per la risposta. -P per una porta SSH specifica è stato utile per me.
redoff

19

Vai a File sulla barra degli strumenti dell'unità

inserisci qui la descrizione dell'immagine

Premi Ctrl + l e scrivi here_goes_your_user_name@192.168.10.123

192.168.1.103 è l'host che si desidera connettere.

Ecco un esempio

inserisci qui la descrizione dell'immagine


12

La domanda era come copiare una cartella da remoto a locale con scpcomando.

$ scp -r userRemote@remoteIp:/path/remoteDir /path/localDir

Ma ecco il modo migliore per farlo con sftp- Il protocollo SSH File Transfer Protocol (anche Secure File Transfer Protocol o SFTP) è un protocollo di rete che fornisce l'accesso ai file, il trasferimento e la gestione dei file su qualsiasi flusso di dati affidabile (wikipedia).

$ sftp user_remote@remote_ip

sftp> cd /path/to/remoteDir

sftp> get -r remoteDir

Fetching /path/to/remoteDir to localDir 100% 398 0.4KB/s 00:00

Per assistenza sul sftpcomando basta digitare helpo ?.


12

Nel caso in cui ti imbatti in "Troppi errori di autenticazione" , specifica la chiave SSH esatta che hai aggiunto al tuo server SSH Severs:

scp -r -i /path/to/local/key user@remote.tld:/path/to/folder /your/local/target/dir

5

Non so perché ma dovevo usare la cartella locale prima della direttiva del server di origine. per farlo funzionare

scp -r . root@888.888.888.888:/usr/share/nginx/www/example.org/

1
Supponendo che l'utente avesse i permessi, potresti fare un percorso assoluto senza usareroot@
Jonathan il
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.