Użyj scp, aby przenieść plik z lokalnego katalogu X do zdalnego katalogu Y


99

Rozejrzałem się po innych pytaniach tutaj i różnych samouczkach dotyczących „użycia SCP” w Internecie, ale nie mogę ustalić, co jest nie tak.

Używam Linux Mint i staram się dowiedzieć, jak działa scp .

Mam plik file.ext (na moim komputerze) w katalogu / home / name / dir /

Łączę się ze zdalnym komputerem za pomocą ssh , takiego jak:

ssh -p 2222 username@domain

pyta mnie o hasło, a powłoka wyświetla:

username@domain ~ $

teraz, jeśli wydam polecenie (zanim uruchomiłem ssh, byłem w katalogu lokalnym / home / name / dir ):

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

wyjście to:

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

Ten sam wynik, jeśli zamiast file.ext napiszę pełną ścieżkę

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

Ponadto administrator serwera powiedział mi, że prześlę plik do mojego zdalnego katalogu domowego (zamiast root), na przykład:

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

ale kiedy to robię i wciskam „Enter”, nic się nie dzieje, tak jakby powłoka czekała na dalsze dane wejściowe.

Podsumowanie moich problemów:

  • cp: brak takiego pliku lub katalogu
  • powłoka „utknęła” na ~ /

Jakieś sugestie?


jest nieco niejasne, czy twój problem dotyczy tylko bycia na niewłaściwym komputerze ... czy możesz poprzedzić każde polecenie hostem, na którym pracujesz? np. localuser@machineA: ssh -p 2222 username@domain(aby wskazać, że uruchamiasz komendę ssh jako localuser na maszynie A)
umläute

1
podczas korzystania scpThe remote strona zawsze musi zawierać dwukropka (np remotehost:/tmp), w przeciwnym wypadku będzie to po prostu zrobić zwykłą kopię ( scp /tmp/foo.txt example.comkopiuje /tmp/foo.txtdo pliku lokalnego example.com)
umläute

usuń -rflagę, ponieważ nie jest to konieczne do kopiowania pojedynczych plików (służy do rekurencyjnego kopiowania katalogów)
umläute

Czy wydajesz polecenie scp w sesji SSH ? Ma to sens, jeśli korzystasz z komputera lokalnego.
Alexis

Odpowiedzi:


119

Musisz uruchomić scppolecenie z komputera lokalnego, a nie zdalnego. W ogóle nie potrzebujesz ssh:

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

Nie potrzebujesz również -r:

 -r      Recursively copy entire directories.  

Jeśli jesteś już zalogowany na komputerze zdalnym i chcesz skopiować z komputera lokalnego, musisz upewnić się, że komputer lokalny jest dostępny przez Internet i sshskonfigurował się. Nie sądzę, że o to ci chodzi, ale jeśli tak, po prostu uruchom to za pomocą pilota:

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

1
dzięki. problem polegał na tym, że próbowałem uruchomić scp w sesji ssh. teraz działa!
dragonmnl

28

Zapewniam dwie metody ładowania / wysyłania pliku między komputerem zdalnym a lokalnym (używam Mac Air):

W tym przypadku chcę w górę / w dół „11.jpeg” między lokalnym a zdalnym:

1.

Skopiuj pliki do usługi do lokalnego katalogu: Musisz być w lokalnym terminalu bash, aby wykonać to polecenie, a nie kiedy jesteś w ssh!

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

kopiuj pliki z lokalnego katalogu do zdalnej obsługi: musisz także znajdować się w lokalnym terminalu bash

scp /Users/username/Desktop/11.jpeg username@domain:/home/xxx/xxx
  1. Aby osiągnąć ten sam cel podczas logowania do SSH , musisz najpierw ustawić „Preferencje systemowe> udostępnianie> logowanie zdalne> wszyscy użytkownicy (nie jestem pewien, czy musisz ustawić dla„ wszystkich użytkowników ”, ale to działa w tej sytuacji ) ”Komputer Mac powie Ci„ Aby zalogować się zdalnie na tym komputerze, wpisz: ssh nazwa użytkownika @ xxxxxx, a następnie wpisz poniższe polecenie:

    nazwa użytkownika scp @ domena: /home/xxx/xxx/11.jpeg nazwa użytkownika @ xxxxxx: / Users / nazwa użytkownika / Desktop /

To polecenie powyżej służy do pobierania pliku ze zdalnego na lokalny, gdy logujesz się do ssh, po prostu zmień dwie ścieżki, gdy chcesz załadować plik.


Wreszcie, uważam, że Filezilla jest prawdopodobnie najwygodniejszym w codziennej pracy ~~
maizer

5

Jeśli uruchamiasz tę komendę scp na zdalnym komputerze, szuka file.extona pliku „lokalnego”, tj. Na zdalnym komputerze.

Aby skopiować plik ze zdalnego komputera na lokalny, użyj scp -P 2222 username@domain:dir/file.ext localdir(zakładając, że file.extznajduje się ~/diron na komputerze zdalnym, jak w twoim przykładzie). Jeśli działasz scpna komputerze zdalnym, odwróć „lokalny” i „zdalny”.


1
OP chce skopiować z lokalnego na zdalny, patrz tytuł PO.
terdon

Ups, chyba masz rację. Ale najwyraźniej robi to wstecz ...
Alex

3

Użyj scppolecenia

Jeśli chcesz przenieść folder, po prostu zipnajpierw, możemy unzipgo później.

Na komputerze uruchom to:

$ scp your_path_to_the_file/the_file root@10.145.198.100:~/

Tutaj rootjest twoje konto i 10.145.198.100adres IP zdalnego serwera. Skopiujemy the_filedo ~/folderu na pilocie.

Rozpakuj plik:

$ unzip the_zip_file.zip -d destination_folder

Dlaczego miałby rootnawet dostęp SSH na zdalnym komputerze? To dość niepewne. Lepiej użyć zwykłego zastosowania, a następnie sudozrobić wszystko, co root ma do zrobienia na tym komputerze.
Kusalananda

1

Mały wkład, może pomóc początkującym, takim jak ja: ścieżka do zdalnego katalogu powinna być zapisana w następujący sposób: username@domain:~/remote_directory

Chcę tu podkreślić, że zawsze powinniśmy to dodawać :~/


0

Rozwiązanie do kopiowania plików z Linux clientdoLinux Server

  1. Sprawdź, czy sshddziała na twoim serwerze, używając: ps aux | grep sshd

  2. Jeśli nie, zainstaluj OpenSSHprzy użyciu sudo apt-get install openssh-server openssh-client https://www.tecmint.com/install-openssh-server-in-linux/

  3. Uruchom ponownie serwer i sprawdź, czy sshddziała ps aux | grep sshd

  4. Jeśli potrzebujesz, możesz skonfigurować /etc/ssh/sshd_configplik, ale nie jest to konieczne w przypadku prostych konfiguracji

  5. sprawdź, czy porty są otwarte za pomocą netcat nc -v -z 127.0.0.1 22

  6. Aby skopiować pliki z Linuxklienta do Linuxklienta, użyj scp w następujący sposób scp ~/filename.md username@10.22.33.45:~/folder/filename.md

  7. Aby sprawdzić, czy plik został skopiowany, użyj ssh username@10.22.33.45i podaj hasło.

Rozwiązanie do kopiowania plików z Linux client`Windows

  1. Istnieje wiele klientów do uruchamiania serwerów SSH w systemie Windows, takich jak OpenSSH od MS

    MobaSSH

    Serwer Bitvise SSH

  2. Zainstaluj jeden z powyższych serwerów i upewnij się, że port 22 jest otwarty przy użyciu

    netsh advfirewall firewall dodaj nazwę reguły = "SSH Port 22" dir = w akcji = zezwól na protokół = UDP localport = 22

    netsh advfirewall firewall dodaj nazwę reguły = "SSH Port 22" katalog = akcja out = zezwól na protokół = port lokalny UDP = 22

    netsh advfirewall firewall dodaj nazwę reguły = "SSH Port 22" katalog = w akcji = zezwól na protokół = TCP port lokalny = 22

    netsh advfirewall firewall dodaj nazwę reguły = "SSH Port 22" katalog = akcja out = zezwól na protokół = TCP port lokalny = 22

    Polecenie netsh advfirewall ustawia stan wszystkich profili

  3. Porównania tych serwerów:

    Serwer Bitvise SSH

    1. Zapewnia prawie zbliżone do natywnego cmdmonitu, powershellmonitu i autouzupełniania

    2. Zapewnia dodatkowe możliwości dostosowywania, jeśli potrzebujesz zaawansowanego użycia

    3. Dostosowanie użytkownika do prostych potrzeb to 0. Zacząłem od niego w ciągu 2 minut, po tym, jak spędziłem dużo czasu próbując dostać się MobaSSHi OpenSSHpracować.

    4. Aby skopiować pliki przy użyciu SCP: scp ~/filename.md username@10.33.44.45:/C/Users/username/filename.md

    5. Bezpłatnie do użytku osobistego, 99 USD do użytku profesjonalnego. Ze względu na tak wiele funkcji i doskonałą integrację cena jest warta swojej ceny

    MobaSSH:

    1. zapewnia powłokę Linux na oknach, gdzie proste polecenia Linuksa takie jak ls, cp, findetc pracy, podobny doMINGW64

    2. możesz uzyskać dostęp cmdi powershellbezpośrednio, wpisując cmdlub powershell

    3. Obsługa Unicode jest słaba. Kodowanie jest nieprawidłowe. Na przykład próba uruchomienia Pythoninterpretera spowoduje awarię. Konieczna będzie ręczna zmiana kodowania za pomocą ( https://stackoverflow.com/a/12834315/4752883 ): chcp 65001 set PYTHONIOENCONDING=utf-8 a następnie uruchomienie monitu Python

    4. Wspaniałą rzeczą jest to, że MobaSSH ma bardzo prosty interfejs użytkownika, a scpi sshi dobrze zintegrowane. Będzie więc działać w prostych przypadkach użycia

    5. Aby skopiować pliki z Linuxklienta na Windowsuruchomiony serwer MobaSSH: use scp ~/filename.md username@10.33.44.45:/cygdrive/c/Users/username/filename.md Jest tak, ponieważ MobaSSHjest oparty na cygwindyskach i są mapowane w ten sam sposób - cygwindyski są mapowane.

    Używaj maszyn wirtualnych Microsoft z OpenSSHv6.7 zainstalowanym z https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/ , OpenSSHv6.7 jest już zainstalowany.

    1. Jest bardzo wadliwy i trzeba go mocno dostosować.

    2. Uzupełnianie poleceń nie działa

    3. Zostawi puste miejsca podczas przesuwania kursora na terminalu

    4. Python nie działa

    5. Późniejsze wersje OpenSSH mogły ulec poprawie. Dalsze MS wydaje się udostępniać OpenSSH za pośrednictwem Optional Features https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/


-1

Jeśli zdarzyło Ci się być na OSX ...

Kiedy próbowałem uruchomić go z nazwą użytkownika @ local: / file_directory ...

Wystąpił następujący błąd:

ssh: local: node name or service name not known

Rozwiązanie

Na komputerze Mac musiałem wykonać następujące czynności, aby skonfigurować lokalnie ssh:

„Preferencje systemowe” -> „Internet i sieć” -> „Udostępnianie” -> WŁĄCZ „Zdalne logowanie”

To podało nazwę użytkownika @ adres ip.


-1

Miałem ten sam problem dzisiaj na MAC.

Wpisz następujące polecenie:

scp /local-file-path/ /-remote-location-path/
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.