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.