Eu folosesc mașina Linux (centos), m-am conectat deja la celălalt sistem folosind ssh
. Acum întrebarea mea este cum pot copia fișiere dintr-un sistem în alt sistem?
Să presupunem că, în mediul meu, am două sisteme precum System A
și System B
. Utilizez mașina System A
și altele care folosesc System B
machine.
Cum pot copia un fișier din System B
în System A
? Și copiați un fișier de la System A
la System B
?
Comentarii
Răspuns
Sintaxă:
scp <source> <destination>
To copiați un fișier din B
în A
în timp ce sunteți conectat la B
:
scp /path/to/file username@a:/path/to/destination
Pentru a copia un fișier din B
în A
în timp ce sunteți conectat la A
:
scp username@b:/path/to/file /path/to/destination
Comentarii
- Pentru a clarifica, de obicei nu ‘ nu utilizați
scp
pentru a copia un fișier pe sau de pe mașina dvs. locală (Sistem A) în timp ce sunteți conectat la un server la distanță (Sistem B) cussh
.scp
vă va conecta la serverul de la distanță, va copia fișierul, apoi vă va deconecta din nou într-un singur proces, deci rulați-l de pe un shell pe mașina dvs. locală. Acestea fiind spuse, puteți utilizascp
dacă ‘ v-ați conectat din nou la System B prin SSH și doriți să copiați fișiere între System B și System C. - @DopeGhoti. Da, nu puteți ‘ muta fișierele între două computere la distanță. Fie sursa, fie destinația trebuie să fie un fișier local. Cu toate acestea, dacă vă conectați la o mașină la distanță cu ssh, puteți copia fișiere între două mașini la distanță pe linia de comandă ‘ a mașinii respective.
- De asemenea, un lucru important de reținut este că puteți scp doar într-un folder de pe mașina țintă pentru care aveți permisiuni. Dacă încercați să îl copiați într-o destinație către care utilizatorul țintă nu are permisiunea, copiați mai întâi fișierul în directorul de acasă sau subdirectorul utilizatorului ‘ și apoi ssh în mașina țintă și sudo mută-o la destinația finală
- Amintiți -r (recursiv) și -p (păstrați metadatele sistemului): scp -rp < fișier1 > < file2 >
- Da, utilizați
-P
pentru a specifica portul TCP pe gazda la distanță. Acest lucru mă prinde de fiecare dată, deoarecessh
folosește-p
.
Răspunde
În cazul în care aveți nevoie de o abordare alternativă.
Instalați sshfs. dacă utilizați ubuntu / debian:
sudo apt-get install sshfs
sau, dacă utilizați centos / rhel:
sudo yum install fuse-sshfs
sau, în macOS
brew install sshfs
Creați un director gol
mkdir /home/user/testdir
„link” sau „mount” cele două directoare
sshfs [email protected]:/remote/dir /home/user/testdir
„deconectați” directoare
fusermount -u /home/user/testdir
Pe BSD și macOS, pentru a demonta sistemul de fișiere:
umount mountpoint
sau
diskutil unmount mountpoint
Pentru mai multe, consultați aici, linuxjournal.com libfuse / sshfs
Comentarii
- Întrebarea specifică în mod specific faptul că sistemul de operare în cauză este CentOS; nu derivat din Debian.
apt-get
este un debianism; managerul de pachete corect ar fiyum
sau, pentru arome foarte vechi ale CentOS,up2date
saurpm
. - +1 răspunsul la această întrebare poate fi în afara contextului, dar totuși m-a ajutat și, din câte văd, și alții.
- Nu are legătură, dar ‘ un milion de dolari răspuns xD
- Dacă înțeleg corect, acesta oferă ACCES la fișierele de la distanță, dar nu le COPIE?
- @ ToolmakerSteve ‘ ești perfect corect: creează un director fals (montare), astfel încât să poți folosi toate instrumentele preferate pentru a copia sau muta lucruri:
cp
,mv
,rm
,rsync
,unison
… Comandascp
ar putea copia numai fișiere.
Răspuns
Uneori trebuie să fii elegant cu tar:
tar -C / -cf - \ opt/widget etc/widget etc/cron.d/widget etc/init.d/widget \ --exclude=opt/widget/local.conf | ssh otherhost tar -C / -xvf -
Comentarii
- Creativitate? Acesta este modul în care obișnuiam să partajăm unitățile de bandă. 🙂
- Ne puteți spune ce face asta? De exemplu, habar n-am ce are de făcut ‘ cron ‘ cu copierea fișierului!
- @aliqandil opt / widget etc / widget etc / cron.d / widget etc / init.d / widget sunt fișiere individuale care trebuie incluse în arhiva tar. Ideea a fost de a ilustra de ce uneori trebuie să vă faceți plăcere. Această serie de comenzi transmite arhiva tar pe o conexiune ssh și o dezarhivează pe cealaltă parte. Astfel, nici o arhivă tar nu este scrisă vreodată pe disc. Folosesc asta uneori pentru a alege fișierele care pot fi copiate într-o singură comandă.
- Ow! Am învățat că primul ‘ / ‘ a fost calea sursă! (Ce este?) Deci, a fost o întrebare prostească! Mulțumiri. 🙂
- Tar va chdir la ” / ” astfel toate căile următoare sunt relative la ” / „.
Răspuns
Dacă doriți să păstrați fișierele de pe ambele sisteme sincronizate, aruncați o privire la programul rsync
:
Comentarii
- Acesta este un adevărat instrument profesional.
Răspuns
Dacă aveți unul dintre sistemele de operare comune, puteți instala pigz care este același cu gzip, cu excepția faptului că va folosi mai multe nuclee și să fii mai rapid într-o rețea rapidă. Comanda mea este puțin diferită.
tar cf - -C /opt -S <dir> | pigz | ssh <target> "pigz -d | tar xf - -C /opt -S"
sau alt mod de a obține fișiere
ssh <target> "tar cf - -C /opt -S <dir> | pigz" | pigz -d | tar xf - -C /opt -S
sau faceți backup fișierelor root cu
ssh <target> "tar cf - -C / --one-file-system -S --numeric-owner . | pigz" > root.tgz
Comentarii
Răspuns
O metodă mai simplă care funcționează prin intermediul computerelor NVIDIA Jetson controlate prin SSH este să vă conectați cu SFTP (SSH File Transfer Protocol).
Să presupunem că doresc să mut documentul UFO_blueprint.odt
de pe serverele de la distanță ale NASA și mutați-le în Documentele mele.
-
cd
în locul în care doriți să fiți salvat fișierul
$ cd Documents
- Conectare
$ sftp sammy@your_server_ip_or_remote_hostname
- Accesați directorul care conține fișierul de transferat.
$ cd NASA/secret_files/
- Transfer
$ get UFO_blueprint.odt
Pentru a obține directorul complet, utilizați în schimb
$ get -r secret_files/
Comentarii
- utilizați pentru încărcarea fișierelor
Răspuns
Copie recursivă Unix / Linux a fișierelor și folderelor peste un shell sigur folosind codul următor:
scp -r <host@machine_name:from_remote_directory_path> <to_local_directory_path>
Un exemplu complet ar putea arăta ca:
scp -r sizwe@hprobook:./home/sizwe/PycharmProjects ./home/immaculate/OtherPycharmProjects
Rețineți dacă nu aveți un server DNS pentru a rezolva numele de gazdă, utilizați în schimb adresa dvs. IP. Exemplul de mai sus ar putea arăta astfel
scp -r 192.168.43.167:./home/sizwe/PycharmProjects ./home/immaculate/OtherPycharmProjects
Răspuns
Dacă rulează SCP / SSH pe un alt port, asigurați-vă că specificați opțiunea de port majuscul -P
.
Exemplu:
scp -P 7121 /users/admin/downloads/* [email protected]:/home/
Comentarii
- Această întrebare are șapte ani și are multe răspunsuri deja. Deși este adevărat că ssh poate utiliza porturi care nu sunt implicite, iar opțiunea ‘ s
-P
ssh este atunci necesară, nu ‘ nu ajută cu adevărat la problema la îndemână. Încercați să vă concentrați asupra întrebărilor recente.
scp
este deseori o piatră greoaie. Dacă ar putea satisface nevoile dvs., încercați acest lucru linuxjournal.com/article/8904 Montează sistemul de fișiere la distanță local.dir/
local pe mașină la distanță folosindssh
:tar -c dir/ | gzip | gpg -c | ssh user@remote 'dd of=dir.tar.gz.gpg'
$wget -r --level=9 --no-parent --reject "index.html*" ftp://<USERID>:<PASSWORD>@<MACHINE-NAME>/path/to
Reference1 Reference2scp
; pentru căscp
este bine și cel mai simplu mod ca răspuns, așa că modificările vă rugăm să eliminați semnalizatorul duplicat ca și cum cineva va merge la altul, cel mai util răspuns va fi omis.