Utilizzare scp per trasferire un file dalla directory locale X alla directory remota Y


99

Ho dato un'occhiata ad altre domande qui e ai vari tutorial di "utilizzo scp" su Internet, ma non riesco a capire cosa c'è che non va.

Sto usando Linux Mint e sto cercando di capire come funziona scp .

Ho un file file.ext (sul mio computer) nella directory / home / nome / dir /

Mi collego a una macchina remota usando ssh , come:

ssh -p 2222 username@domain

mi chiede la password e la shell visualizza:

username@domain ~ $

ora, se emetto il comando (prima di eseguire ssh ero nella directory locale / home / nome / dir ):

scp -r -P 2222 file.ext username@domain 

l'output è:

cp: cannot stat ‘file.ext’: No such file or directory

Stesso risultato se invece di file.ext scrivo il percorso completo

scp -r -P 2222 /home/name/dir/file.ext username@domain 

Inoltre, l'amministratore del server mi ha detto che avrei caricato il file nella mia home directory remota (anziché root), come:

scp -r -P 2222 file.ext username@domain:~/

ma quando lo faccio e premo "Invio" non succede nulla, come se la shell fosse in attesa di ulteriori input.

Riepilogo dei miei problemi:

  • cp: nessun file o directory
  • shell "bloccata" su ~ /

Eventuali suggerimenti?


non è chiaro se il tuo problema sia legato solo alla macchina sbagliata ... potresti prefissare ogni comando con l'host su cui stai eseguendo? ad es. localuser@machineA: ssh -p 2222 username@domain(per indicare che si sta eseguendo il comando ssh come localuser su machineA)
umläute

1
durante l'utilizzo scp, il lato remoto deve sempre contenere i due punti (ad es. remotehost:/tmp), altrimenti eseguirà semplicemente una copia ordinaria ( scp /tmp/foo.txt example.comcopierà /tmp/foo.txtin un file locale example.com)
umläute,

rimuovere il -rflag, poiché non è necessario per copiare singoli file (viene utilizzato per copiare ricorsivamente le directory)
umläute,

Stai inviando il comando scp all'interno della sessione sshe ? Avrebbe senso se ti trovi sul computer locale.
alexis,

Risposte:


119

È necessario eseguire il scpcomando dal computer locale, non sul telecomando. Non ti serve sshaffatto:

dragonmnl@local $ scp -P 2222 file.ext username@domain:~/ 

Inoltre non hai bisogno di -r:

 -r      Recursively copy entire directories.  

Se si è già connessi al computer remoto e si desidera copiare dal proprio locale, è necessario assicurarsi che il proprio dispositivo locale sia accessibile via Internet e sia stato sshconfigurato. Non penso che questo sia ciò che stai cercando, ma se lo è, eseguilo dal telecomando:

username@domain $ scp dragonmnl@local:/path/to/file.ext ~/

1
Grazie. il problema era che stavo provando a eseguire scp nella sessione ssh. ora funziona!
Dragonmnl,

28

Fornisco due metodi per caricare / scaricare file tra computer remoto e locale (utilizzo Mac air):

In questo caso, voglio su / giù "11.jpeg" tra locale e remoto:

1.

Copia i file sul servizio nella directory locale: per eseguire questo comando devi essere nel terminale bash locale, non quando sei in SSH!

scp username@domain:/home/xxx/xxx/11.jpeg /Users/username/Desktop/  

copia i file dalla directory locale al servizio remoto: devi anche essere nel terminale bash locale

scp /Users/username/Desktop/11.jpeg username@domain:/home/xxx/xxx
  1. Per raggiungere la stessa intenzione quando si accede a SSH , è necessario innanzitutto impostare "Preferenze di Sistema> condivisione> accesso remoto> tutti gli utenti (non sono sicuro che sia necessario impostare per" tutti gli utenti ", ma funziona in questa situazione ) "Il Mac ti dirà" Per accedere a questo computer da remoto, digita: ssh username @ xxxxxx, quindi digita il comando seguente:

    nome utente scp @ dominio: /home/xxx/xxx/11.jpeg nome utente @ xxxxxx: / utenti / nome utente / desktop /

Questo comando sopra è per il download di file da remoto a locale quando si accede a ssh, basta cambiare i due percorsi quando si desidera caricare il file.


Infine, trovo che Filezilla sia probabilmente il più conveniente nel lavoro quotidiano ~~
maizer

5

Se stai eseguendo questo comando scp sul computer remoto, sta cercando file.extun file "locale", cioè sul computer remoto.

Per copiare un file dalla macchina remota a quella locale, utilizzare scp -P 2222 username@domain:dir/file.ext localdir(supponendo che file.extsia presente ~/dirsul computer remoto, come nell'esempio). Se si esegue scpsul computer remoto, invertire "locale" e "remoto".


1
L'OP vuole copiare da locale a remoto, vedere il titolo dell'OP.
terdon

Oops, immagino tu abbia ragione. Ma a quanto pare lo sta facendo all'indietro ...
Alexis,

3

Usa il scpcomando

Se vuoi trasferire una cartella, basta zipprima, possiamo unzipin seguito.

Dal tuo computer, esegui questo:

$ scp your_path_to_the_file/the_file root@10.145.198.100:~/

Qui rootè il tuo account ed 10.145.198.100è l'indirizzo IP del server remoto. Stiamo andando a copiare the_filealla ~/cartella nella remota.

Decomprimi file:

$ unzip the_zip_file.zip -d destination_folder

Perché dovrebbe rootanche avere l'accesso SSH sul computer remoto? È piuttosto insicuro. Meglio usare un uso normale e poi sudofare qualunque cosa root abbia a che fare su quella macchina.
Kusalananda

1

Solo un piccolo contributo, forse può aiutare i principianti come me: il percorso della directory remota dovrebbe essere scritto in questo modo: username@domain:~/remote_directory

Quello che voglio evidenziare qui è che dovremmo sempre aggiungerlo :~/


0

Soluzione per copiare file da Linux clientaLinux Server

  1. Controlla se sshdè in esecuzione sul tuo server usando: ps aux | grep sshd

  2. In caso contrario, installare OpenSSHutilizzando sudo apt-get install openssh-server openssh-client https://www.tecmint.com/install-openssh-server-in-linux/

  3. Riavvia il server e verifica che sshdsia in esecuzione utilizzando ps aux | grep sshd

  4. Se necessario, è possibile configurare il /etc/ssh/sshd_configfile, ma non è necessario per configurazioni semplici

  5. verificare che le porte siano aperte utilizzando netcat nc -v -z 127.0.0.1 22

  6. Per copiare file da un Linuxclient a un Linuxclient usa scp come segue scp ~/filename.md username@10.22.33.45:~/folder/filename.md

  7. Per verificare che il file sia stato copiato, utilizzare ssh username@10.22.33.45e fornire la password.

Soluzione per copiare file da Linux clientsu `Windows

  1. Esistono più client per l'esecuzione di server SSH su Windows come OpenSSH di MS

    MobaSSH

    Server SSH di Bitvise

  2. Installare uno dei server sopra e assicurarsi che la porta 22 sia aperta utilizzando

    netsh advfirewall firewall aggiungi nome regola = "Porta SSH 22" dir = in azione = consenti protocollo = UDP localport = 22

    netsh advfirewall firewall add rule name = "Porta SSH 22" dir = out action = consenti protocollo = UDP localport = 22

    netsh advfirewall firewall aggiungi nome regola = "Porta SSH 22" dir = in azione = consenti protocollo = TCP localport = 22

    netsh advfirewall firewall add rule name = "Porta SSH 22" dir = out action = consenti protocollo = TCP localport = 22

    netsh advfirewall ha disattivato lo stato di tutti i profili

  3. Confronti di questi server:

    Server SSH di Bitvise

    1. Fornisce quasi vicino al cmdprompt nativo , powershellprompt, completamento automatico

    2. Fornisce funzionalità aggiuntive per la personalizzazione, se è necessario un utilizzo avanzato

    3. La personalizzazione dell'utente per esigenze semplici è 0. Ho iniziato a usarlo entro 2 minuti, dopo aver trascorso molto tempo a cercare di lavorare MobaSSHe OpenSSHlavorare.

    4. Per copiare i file usando scp usare: scp ~/filename.md username@10.33.44.45:/C/Users/username/filename.md

    5. Gratuito per uso personale, $ 99 per uso professionale. A causa di così tante funzionalità e grande integrazione, il prezzo vale la pena

    MobaSSH:

    1. fornisce una shell Linux su finestre dove semplici comandi Linux quali ls, cp, findecc lavoro, simile aMINGW64

    2. è possibile accedere cmde powershelldirettamente digitando cmdo powershell

    3. Il supporto Unicode è scadente. La codifica non è corretta. Ad esempio, se si tenta di avviare l' Pythoninterprete, si arresterà in modo anomalo. Sarà necessario modificare manualmente la codifica utilizzando ( https://stackoverflow.com/a/12834315/4752883 ): chcp 65001 set PYTHONIOENCONDING=utf-8 quindi avviare il prompt di Python

    4. La cosa grandiosa di MobaSSH è che ha una semplice interfaccia utente, ed scpe sshed integrato bene. Quindi funzionerà per casi d'uso semplici

    5. Per copiare file da un Linuxclient a un Windowsserver in esecuzione MobaSSH: utilizzare scp ~/filename.md username@10.33.44.45:/cygdrive/c/Users/username/filename.md Questo perché MobaSSHè basato cygwine le sue unità sono mappate allo stesso modo in cui le cygwinunità sono mappate.

    Usa VM di Microsoft con OpenSSHv6.7 installato da https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/ , OpenSSHv6.7 è già installato.

    1. È molto difettoso e dovrai personalizzarlo pesantemente.

    2. Il completamento del comando non funziona

    3. Lascerà spazi vuoti quando si sposta il cursore sul terminale

    4. Python non funziona

    5. Le versioni successive di OpenSSH potrebbero essere migliorate. Ulteriore MS sembra rendere OpenSSH disponibile tramite Optional Features https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/


-1

Se ti capita di essere su OSX ...

Quando ho provato a eseguirlo con username @ local: / file_directory ...

Ho ricevuto il seguente errore:

ssh: local: node name or service name not known

Soluzione

Sul mio Mac ho dovuto fare quanto segue per configurare local ssh:

'Preferenze di Sistema' -> 'Internet e reti' -> 'Condivisione' -> ABILITA 'Accesso remoto'

Ciò ha quindi fornito il nome utente @ indirizzo IP.


-1

Ho avuto lo stesso problema oggi su MAC.

Digita il seguente comando:

scp /local-file-path/ /-remote-location-path/
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.