Jak kopiować pliki z jednego komputera na inny przy użyciu ssh

Używam komputera z systemem Linux (centos), już połączyłem się z innym systemem za pomocą ssh. Teraz moje pytanie brzmi: jak mogę skopiować pliki z jednego systemu do innego?

Załóżmy, że w moim środowisku mam dwa systemy takie jak System A i System B. Używam maszyny System A i innych używam System B.

Jak mogę skopiować plik z System B do System A? Skopiuj plik z System A do System B?

Komentarze

  • Uważam, że scp często jest kamieniem węgielnym. Jeśli może odpowiadać Twoim potrzebom, wypróbuj to linuxjournal.com/article/8904 Lokalnie montuje zdalny system plików.
  • @Alan Myślę, że masz na myśli ” kłopotliwe „? Cumber Stone to karta Magic 😉
  • nieco pokrewna: utwórz zaszyfrowane archiwum lokalnych dir/ na zdalnym komputerze przy użyciu ssh : tar -c dir/ | gzip | gpg -c | ssh user@remote 'dd of=dir.tar.gz.gpg'
  • Jeśli masz dostęp do ftp zdalnego serwera, możemy również użyć wget do pobrania, na przykład $wget -r --level=9 --no-parent --reject "index.html*" ftp://<USERID>:<PASSWORD>@<MACHINE-NAME>/path/to Odniesienie1 Odniesienie2
  • Nie jest zduplikowane, powiązane pytanie zawiera konkretną prośbę o niestosowanie scp; w tym przypadku scp jest w porządku i najłatwiejszym sposobem na odpowiedź, więc mody proszę usunąć zduplikowaną flagę, jakby ktoś miał przejść do innej, najbardziej użyteczna odpowiedź zostanie pominięta.

Odpowiedź

Składnia:

scp <source> <destination> 

Do skopiuj plik z B do A po zalogowaniu się do B:

scp /path/to/file username@a:/path/to/destination 

Aby skopiować plik z B do A po zalogowaniu się do A:

scp username@b:/path/to/file /path/to/destination 

Komentarze

  • Aby wyjaśnić, zazwyczaj nie ' nie używaj scp do kopiowania pliku na lub z komputera lokalnego (System A), gdy jesteś zalogowany na serwerze zdalnym (System B) z ssh. scp zaloguje Cię na zdalny serwer, skopiuje plik, a następnie wyloguje Cię ponownie w jednym procesie, więc po prostu uruchom go z powłoki na komputerze lokalnym. Biorąc to pod uwagę, możesz użyć scp, jeśli ' ponownie zalogujesz się do Systemu B przez SSH i chcesz skopiować pliki między Systemem B a Systemem C.
  • @DopeGhoti. Tak, możesz ' t przenosić pliki między dwoma zdalnymi komputerami. Plik źródłowy lub docelowy musi być plikiem lokalnym. Jeśli jednak zalogujesz się na zdalnym komputerze za pomocą ssh, możesz kopiować pliki między dwoma zdalnymi komputerami na tym komputerze ' z wiersza poleceń.
  • Ponadto, ważną rzeczą do zapamiętania jest to, że możesz przeskoczyć tylko do folderu na maszynie docelowej, do którego masz uprawnienia. Jeśli próbujesz skopiować go do miejsca docelowego, do którego użytkownik docelowy nie ma uprawnień, najpierw skopiuj plik do katalogu domowego lub podkatalogu użytkownika ', a następnie ssh do katalogu maszyna docelowa i sudo przenieś ją do miejsca docelowego
  • Zapamiętaj -r (rekurencyjne) i -p (zachowaj metadane systemu): scp -rp < plik1 > < file2 >
  • Tak, użyj , aby określić port TCP na zdalnym hoście. Łapie mnie to za każdym razem, ponieważ ssh używa -p.

Odpowiedź

Na wypadek, gdybyś potrzebował innego podejścia.

Zainstaluj sshfs. jeśli używasz ubuntu / debian:

sudo apt-get install sshfs 

lub, jeśli używasz centos / rhel:

sudo yum install fuse-sshfs 

lub, w macOS

brew install sshfs 

Utwórz pusty katalog

mkdir /home/user/testdir 

„połącz” lub „zamontuj” dwa katalogi

sshfs [email protected]:/remote/dir /home/user/testdir 

„odłącz” katalogi

fusermount -u /home/user/testdir 

W BSD i macOS, aby odmontować system plików:

umount mountpoint 

lub

diskutil unmount mountpoint 

Więcej informacji można znaleźć tutaj, linuxjournal.com libfuse / sshfs

Komentarze

  • Pytanie konkretnie stwierdza, że dany system operacyjny to CentOS; nie pochodzi z Debiana. apt-get to Debianizm; prawidłowym menedżerem pakietów byłby yum lub, w przypadku naprawdę starych wersji CentOS, up2date lub rpm.
  • +1 odpowiedzi na to pytanie może być poza kontekstem, ale nadal pomogło mi i, o ile widzę, także innym.
  • Bez związku, ale ' za milion dolarów xD
  • Jeśli dobrze rozumiem, daje to DOSTĘP do zdalnych plików, ale ich nie KOPIUJEMY?
  • @ ToolmakerSteve, ' masz rację: tworzy fałszywy katalog (montowanie), dzięki czemu możesz używać wszystkich preferowanych narzędzi do kopiowania lub przenoszenia rzeczy: cp, mv, rm, rsync, unison … Polecenie scp mogłoby tylko kopiować pliki.

Odpowiedź

Czasem trzeba polubić smoły:

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 - 

Komentarze

  • Kreatywność? W ten sposób udostępnialiśmy napędy taśmowe. 🙂
  • Czy możesz nam powiedzieć, co to robi? Na przykład nie mam pojęcia, co ' cron ' ma wspólnego z kopiowaniem pliku!
  • @aliqandil opt / widget etc / widget etc / cron.d / widget etc / init.d / widget to pojedyncze pliki, które mają być zawarte w archiwum tar. Chodziło o to, aby zilustrować, dlaczego czasami trzeba się polubić. Ta seria poleceń przesyła strumieniowo archiwum tar przez połączenie ssh i cofa archiwizację po drugiej stronie. Dlatego żadne archiwum tar nigdy nie jest zapisywane na dysku. Czasami używam tego, aby wybrać pliki do skopiowania jednym poleceniem.
  • Ow! Nauczyłem się, że pierwsza ' / ' była ścieżką źródłową! (Co to jest?) Więc to było głupie pytanie! Dzięki. 🙂
  • Tar zmieni katalog na ” / „, więc wszystkie poniższe ścieżki są względne do ” / „.

Odpowiedź

Jeśli chcesz zachować synchronizację plików w obu systemach, spójrz na program rsync:

(zobacz samouczek)

Komentarze

  • To jest naprawdę profesjonalne narzędzie.

Odpowiedź

Jeśli masz jeden z popularnych systemów operacyjnych, możesz zainstalować pigz, który jest taki sam jak gzip, z tą różnicą, że będzie używał wielu rdzeni i bądź szybszy w szybkiej sieci. Moje polecenie jest nieco inne.

tar cf - -C /opt -S <dir> | pigz | ssh <target> "pigz -d | tar xf - -C /opt -S" 

lub inny sposób pobierania plików

ssh <target> "tar cf - -C /opt -S <dir> | pigz" | pigz -d | tar xf - -C /opt -S 

lub wykonaj kopię zapasową głównego systemu plików za pomocą

ssh <target> "tar cf - -C / --one-file-system -S --numeric-owner . | pigz" > root.tgz 

Komentarze

Odpowiedź

Prostszą metodą, która działa z komputerami NVIDIA Jetson sterowanymi przez SSH, jest połączenie za pomocą protokołu SFTP (SSH File Transfer Protocol).

Załóżmy, że chcę przenieść dokument UFO_blueprint.odt ze zdalnych serwerów NASA i przenieś go do moich dokumentów.

  1. cd tam, gdzie chcesz zapisać plik
$ cd Documents 
  1. Połącz
$ sftp sammy@your_server_ip_or_remote_hostname 
  1. Przejdź do katalogu zawierającego plik do przesłania.
$ cd NASA/secret_files/ 
  1. Transfer
$ get UFO_blueprint.odt 

Aby uzyskać pełny katalog, zamiast tego użyj

$ get -r secret_files/ 

Komentarze

  • użyj put polecenie do przesyłania plików

Odpowiedź

Rekursywna kopia plików i folderów w systemach Unix / Linux nad bezpieczną powłoką, używając następującego kodu:

scp -r <host@machine_name:from_remote_directory_path> <to_local_directory_path> 

Pełny przykład może wyglądać następująco:

scp -r sizwe@hprobook:./home/sizwe/PycharmProjects ./home/immaculate/OtherPycharmProjects 

Uwaga, jeśli nie masz serwera DNS do rozpoznawania nazw hostów, użyj zamiast tego adresu IP. Powyższy przykład może wyglądać następująco

scp -r 192.168.43.167:./home/sizwe/PycharmProjects ./home/immaculate/OtherPycharmProjects 

Odpowiedź

Jeśli są uruchomione SCP / SSH na innym porcie, upewnij się, że podałeś opcję portu -P wielkimi literami.

Przykład:

 scp -P 7121 /users/admin/downloads/* [email protected]:/home/  

Komentarze

  • To pytanie ma siedem lat i ma wiele odpowiedzi już. Chociaż prawdą jest, że ssh może używać portów innych niż domyślne, a klient ssh ' s -P jest wtedy wymagana, nie musisz wtedy ' to naprawdę pomoc w rozwiązaniu problemu. Spróbuj skupić się na ostatnich pytaniach.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *