Utilizați scp pentru a transfera un fișier din directorul local X în directorul la distanță Y

Am aruncat o privire în jur la alte întrebări aici și la diferite tutoriale de „utilizare scp” de pe Internet, dar nu pot rezolva ce nu este corect.

Folosesc Linux Mint și încerc să aflu cum scp funcționează.

Am un fișier file.ext (pe computerul meu) în directorul / home / name / dir /

mă conectez la o mașină la distanță care utilizează ssh , cum ar fi:

ssh -p 2222 username@domain 

mă întreabă parola și shell-ul afișează:

username@domain ~ $ 

acum, dacă emit comanda (înainte de a rula ssh eram în directorul local / home / name / dir ):

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

ieșire este:

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

Același rezultat dacă în loc de file.ext scriu calea completă

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

De asemenea, administratorul serverului mi-a spus că voi încărca fișierul în directorul meu de acasă la distanță (în loc de rădăcină), cum ar fi:

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

dar când o fac și apăs pe „Enter” nu se întâmplă nimic, ca și cum shell-ul ar fi așteptat intrări suplimentare.

Rezumatul problemelor mele:

  • cp: nu există un astfel de fișier sau director
  • shell „blocat” pe ~ /

Aveți sugestii?

Comentarii

  • ‘ este ușor neclar dacă problema dvs. este legat doar de a fi pe o mașină greșită … ați putea prefixa fiecare comandă cu gazda pe care executați? de exemplu. localuser@machineA: ssh -p 2222 username@domain (pentru a indica faptul că executați comanda ssh ca localuser pe computerA)
  • când utilizați scp, latura la distanță trebuie să conțină întotdeauna două puncte (de ex. remotehost:/tmp), altfel va face doar o copie obișnuită (scp /tmp/foo.txt example.com va copia /tmp/foo.txt într-un fișier local example.com)
  • elimină -r, deoarece acest lucru nu este necesar pentru copierea fișierelor individuale (‘ este folosit pentru a recursiv copia directoare)
  • Emiteți comanda scp în cadrul sesiunii sshe ? Ar avea sens dacă vă aflați pe mașina locală.

Răspuns

Trebuie să rulați scp de pe mașina locală, nu pe telecomandă. Nu aveți deloc nevoie de ssh:

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

De asemenea, nu aveți nevoie de -r:

 -r Recursively copy entire directories. 

Dacă sunteți deja conectat la aparatul de la distanță și doriți să copiați de la local, trebuie să faceți asigurați-vă că mașina dvs. locală este accesibilă prin intermediul internetului și a configurat ssh. Nu cred că acesta este ceea ce cauți, dar dacă este, rulați acest lucru de la telecomandă:

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

Comentarii

  • mulțumesc. problema a fost că încercam să rulez scp în interiorul sesiunii ssh. acum funcționează!

Răspunde

Ofer două metode de încărcare sus / jos a fișierului între mașina locală și la distanță (folosesc Mac air):

În acest caz, vreau să sus / jos 11.jpeg între local și la distanță:

  1. Copiați fișierele din serviciu în dir. Local: trebuie să vă aflați în terminalul bash local pentru a efectua această comandă, nu când vă aflați în ssh!

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

    copiați fișierele în directorul local în serviciu la distanță: de asemenea, trebuie să vă aflați în terminalul local bash

    scp /Users/username/Desktop/11.jpeg username@domain:/home/xxx/xxx 
  2. Pentru a realiza aceeași intenție când vă conectați la SSH , trebuie mai întâi să setați „ Preferințe sistem > partajare > conectare la distanță > toți utilizatorii (nu sunt sigur dacă trebuie să setați pentru ” toți utilizatorii „, dar funcționează în această situație) ”Mac vă va spune ” Pentru a vă conecta la acest computer de la distanță, tastați:

    ssh username@xxxxxx, then type in the command below: scp username@domain:/home/xxx/xxx/11.jpeg username@xxxxxx:/Users/username/Desktop/** 

Această comandă de mai sus este pentru descărcarea fișierului de la distanță la local atunci când vă conectați la ssh, schimbați doar calea celor două când doriți să încărcați fișierul.

Comentarii

  • În cele din urmă, consider că Filezilla este probabil cel mai convenabil în munca de zi cu zi ~~

Răspuns

Utilizați comanda scp

Dacă doriți să transferați un folder, zip mai întâi, îl putem unzip mai târziu.

De pe computer, executați acest lucru:

$ scp your_path_to_the_file/the_file [email protected]:~/ 

Aici, root este contul dvs. și 10.145.198.100 este adresa IP a serverului la distanță. Vom copia the_file în dosarul ~/ din telecomandă.

Unzip file:

$ unzip the_zip_file.zip -d destination_folder 

Comentarii

  • De ce ar fi root chiar ai acces SSH pe aparatul de la distanță? ‘ este destul de nesigur. Mai bine să folosiți o utilizare obișnuită și apoi sudo pentru a face orice rădăcină are de făcut pe acel aparat.

Răspuns

Dacă rulați această comandă scp pe computerul la distanță, acesta caută file.ext ca fișier „local”, adică pe aparatul de la distanță.

Pentru a copia un fișier de pe aparatul de la distanță pe cel local, utilizați scp -P 2222 username@domain:dir/file.ext localdir (presupunând că file.ext este în ~/dir pe computerul de la distanță, ca în exemplul dvs.) . Dacă rulați scp pe echipamentul la distanță, inversați „local” și „la distanță”.

Comentarii

  • OP vrea să copieze de la local la distanță, consultați titlul OP ‘.
  • Hopa, cred că vă ‘ are dreptate. Dar el ‘ se pare că o face înapoi …

Răspuns

Doar o mică contribuție, poate că poate ajuta începătorii ca mine: calea către directorul de la distanță ar trebui să fie scris astfel: username@domain:~/remote_directory

Ceea ce vreau să subliniez aici este că ar trebui să adăugăm întotdeauna că :~/

Răspuns

Soluție pentru copierea fișierelor de pe clientul Linux pe serverul Linux

  1. Verificați dacă sshd rulează pe serverul dvs. utilizând: ps aux | grep sshd

  2. Dacă nu, instalați OpenSSH utilizând sudo apt-get install openssh-server openssh-client https://www.tecmint.com/install-openssh-server-in-linux/

  3. Reporniți serverul și verificați dacă sshd rulează utilizând ps aux | grep sshd

  4. Dacă aveți nevoie, vă puteți configura fișierul /etc/ssh/sshd_config, dar nu este necesar pentru configurații simple

  5. verificați dacă Porturile sunt deschise folosind netcat: nc -v -z 127.0.0.1 22

  6. Pentru a copia fișiere dintr-un Linux client către un Linux client utilizează scp după cum urmează scp ~/filename.md [email protected]:~/folder/filename.md

  7. Pentru a verifica dacă fișierul a fost copiat, utilizați ssh [email protected] și furnizați parola.

Soluție pentru copierea fișierelor de la clientul Linux pe Windows

  1. Există mai mulți clienți pentru rularea SSH servere pe Windows, cum ar fi:

  2. Instalați unul dintre serverele de mai sus și asigurați-vă că portul 22 este deschis folosind

    netsh advfirewall firewall add rule name="SSH Port 22" dir=in action=allow protocol=UDP localport=22 netsh advfirewall firewall add rule name="SSH Port 22" dir=out action=allow protocol=UDP localport=22 
    netsh advfirewall firewall add rule name="SSH Port 22" dir=in action=allow protocol=TCP localport=22 netsh advfirewall firewall add rule name="SSH Port 22" dir=out action=allow protocol=TCP localport=22 
    netsh advfirewall set allprofiles state off 
  3. Comparații ale acestor servere:

    Server Bitvise SSH

    1. Oferă aproape aproape de promptul divin cmd, promptul powershell, completarea automată

    2. Oferă capabilități suplimentare pentru personalizare, dacă aveți nevoie de utilizare avansată

    3. Personalizarea utilizatorului pentru nevoi simple este 0. Am început să o utilizez în 2 minute, după ce am petrecut mult timp încercând ca MobaSSH și OpenSSH să funcționeze.

    4. Pentru a copia fișiere folosind scp utilizați: scp ~/filename.md [email protected]:/C/Users/username/filename.md

    5. Gratuit pentru uz personal, 99 USD pentru uz profesional. Datorită atâtea funcționalități și integrării excelente, prețul merită foarte mult banii.

    MobaSSH:

    1. oferă un Linux shell pe Windows unde comenzi Linux simple precum ls, cp, find etc., lucru, similar cu MINGW64

    2. puteți accesa cmd și powershell direct tastând cmd sau powershell

    3. Suportul Unicode este slab. Codificarea nu este corectă. De exemplu, dacă încercați să porniți Python interpretor, acesta se va bloca. Va trebui să modificați codarea manual folosind ( https://stackoverflow.com/a/12834315/4752883 ): chcp 65001 set PYTHONIOENCONDING=utf-8 și apoi porniți promptul Python

    4. Cel mai bun lucru despre MobaSSH este că are o interfață cu utilizatorul foarte simplă și scp și ssh și bine integrat. Deci, va funcționa pentru cazuri de utilizare simple

    5. Pentru a copia fișiere de la un client Linux pe un server Windows care rulează MobaSSH: utilizați scp ~/filename.md [email protected]:/cygdrive/c/Users/username/filename.md Acest lucru se datorează faptului că MobaSSH se bazează pe Cygwin și unitățile sale sunt mapate în același mod cygwin – Unitățile sunt mapate.

    Utilizați VM-urile de la Microsoft cu OpenSSHv6.7 instalat de la https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/ , OpenSSHv6.7 este deja instalat.

    1. Este foarte bug și va trebui să îl personalizați puternic.

    2. Finalizarea comenzii nu funcționează

    3. Va lăsa spații goale atunci când mutați cursorul pe terminal

    4. Python nu funcționează

    5. Este posibil ca versiunile ulterioare ale OpenSSH să se fi îmbunătățit. Mai mult, MS pare să facă OpenSSH disponibil prin ” Caracteristici opționale ” https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/

Răspunde

Dacă se întâmplă să fii pe OSX …

Când am încercat să-l rulez cu numele de utilizator @ local: / file_directory …

Am primit următoarea eroare:

ssh: local: node name or service name not known 

Soluție

Pe Mac-ul meu a trebuit să fac următoarele pentru a configura local ssh:

Preferințe sistem -> Internet & Rețea -> Partajare -> ACTIVĂ Conectare la distanță

Aceasta a furnizat apoi numele de utilizator @ adresa IP.

Răspuns

Am avut aceeași problemă astăzi pe MAC.

Tastați următoarea comandă:

scp /local-file-path/ /-remote-location-path/ 

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *