Użyj scp, aby przesłać plik z lokalnego katalogu X do zdalnego katalogu Y

Rozejrzałem się po innych pytaniach tutaj i na różnych samouczkach dotyczących „użycia scp” na Internet, ale nie potrafię wyjaśnić, co jest nie tak.

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

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

Łączę się z zdalną maszynę używającą ssh , na przykład:

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 lokalnym katalogu / 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 mam załadować plik do mojego zdalnego katalogu domowego (zamiast roota), na przykład:

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

ale kiedy to zrobię i naciśnę „Enter”, nic się nie dzieje, jak gdyby powłoka czekała na dalsze dane.

Podsumowanie moich problemów:

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

Jakieś sugestie?

Komentarze

  • it ' nie jest jasne, czy Twój problem jest tylko związane z przebywaniem na niewłaściwym komputerze … czy mógłbyś poprzedzić każde polecenie hostem, na którym uruchomisz? na przykład localuser@machineA: ssh -p 2222 username@domain (aby wskazać, że uruchamiasz polecenie ssh jako użytkownik lokalny na komputerze A)
  • podczas korzystania z scp, Strona zdalna musi zawsze zawierać dwukropek (np. remotehost:/tmp), w przeciwnym razie po prostu wykona zwykłą kopię (scp /tmp/foo.txt example.com skopiuje /tmp/foo.txt do pliku lokalnego example.com)
  • usunie -r, ponieważ nie jest to potrzebne do kopiowania pojedynczych plików (jest ' używane do rekurencyjnego kopiowania katalogów)
  • Czy wydajesz polecenie scp w ramach sesji sshe ? Miałoby to sens, gdybyś był na komputerze lokalnym.

Odpowiedź

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

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

Nie potrzebujesz też -r:

 -r Recursively copy entire directories. 

Jeśli jesteś już zalogowany na zdalnym komputerze i chcesz kopiować z lokalnego, musisz upewnij się, że twój komputer lokalny jest dostępny przez internet i ma skonfigurowany ssh. Nie wydaje mi się, żeby o to Ci chodziło, ale jeśli tak, po prostu uruchom to z pilota:

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

Komentarze

  • dziękuję. Problem polegał na tym, że próbowałem uruchomić scp w sesji ssh. Teraz to działa!

Odpowiedź

Podaję dwie metody ładowania pliku w górę / w dół między maszyną zdalną i lokalną (używam Mac air):

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

  1. Kopiuj pliki w usłudze do lokalnego katalogu: aby wykonać to polecenie, musisz znajdować się w lokalnym terminalu bash, a nie w ssh!

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

    skopiuj pliki z lokalnego katalogu do usługa zdalna: również musisz być w lokalnym terminalu bash

    scp /Users/username/Desktop/11.jpeg username@domain:/home/xxx/xxx 
  2. Aby osiągnąć ten sam zamiar podczas logowania się do SSH , musisz najpierw ustawić „ Preferencje systemowe > udostępnianie > zdalnego logowania > wszystkich użytkowników (nie jestem pewien, czy musisz ustawić dla ” wszystkich użytkowników „, ale to działa w tej sytuacji) ”- powie Ci Mac ” Aby zalogować się zdalnie do tego komputera, wpisz:

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

Powyższe polecenie służy do pobierania pliku ze zdalnego na lokalny, gdy logujesz się do ssh, po prostu zmień dwie ścieżki, gdy chcesz przesłać plik.

Komentarze

  • Wreszcie uważam, że Filezilla jest prawdopodobnie najwygodniejsza w codziennej pracy ~~

Odpowiedź

Użyj polecenia scp

Jeśli chcesz przenieść folder, po prostu zip najpierw, możemy unzip później.

Na komputerze uruchom to:

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

W tym przypadku root to Twoje konto, a 10.145.198.100 to adres IP zdalnego serwera. Zamierzamy skopiować the_file do folderu ~/ na zdalnym.

Rozpakuj plik:

$ unzip the_zip_file.zip -d destination_folder 

Komentarze

  • Dlaczego root masz nawet dostęp SSH na zdalnym komputerze? To ' jest dość niebezpieczne. Lepiej użyć zwykłego użycia, a następnie sudo zrobić wszystko, co root musi zrobić na tym komputerze.

Odpowiedź

Jeśli „uruchamiasz to polecenie scp na zdalnym komputerze, szuka ono file.ext jako 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.ext znajduje się w ~/dir na komputerze zdalnym, jak w przykładzie) . Jeśli uruchomisz scp na zdalnym komputerze, odwróć „lokalny” i „zdalny”.

Komentarze

  • OP chce skopiować z lokalnego na zdalny, zobacz tytuł OP '.
  • Ups, myślę, że ty ' w porządku. Ale on ' najwyraźniej robi to wstecz …

Odpowiedź

Tylko mały wkład, może pomoże początkującym takim jak ja: ścieżka do zdalnego katalogu powinna być zapisana w ten sposób: username@domain:~/remote_directory

Chciałbym tu podkreślić, że zawsze powinniśmy dodawać, że :~/

Odpowiedź

Rozwiązanie do kopiowania plików z klienta Linux na serwer Linux

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

  2. Jeśli nie, zainstaluj OpenSSH za pomocą sudo apt-get install openssh-server openssh-client https://www.tecmint.com/install-openssh-server-in-linux/

  3. Uruchom ponownie serwer i sprawdź, czy sshd działa przy użyciu ps aux | grep sshd

  4. Jeśli potrzebujesz, możesz skonfigurować swój plik /etc/ssh/sshd_config, ale nie jest to konieczne do prostych konfiguracji

  5. sprawdź, czy th Porty są otwierane za pomocą netcat: nc -v -z 127.0.0.1 22

  6. Aby skopiować pliki z Linux klient do Linux klienta używa scp w następujący sposób scp ~/filename.md [email protected]:~/folder/filename.md

  7. Aby sprawdzić, czy plik został skopiowany, użyj ssh [email protected] i podaj swoje hasło.

Rozwiązanie do kopiowania plików z klienta Linuksa do Windows

  1. Istnieje wielu klientów obsługujących SSH serwery w systemie Windows, takie jak:

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

    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. Porównanie tych serwerów:

    Serwer Bitvise SSH

    1. Zapewnia niemal natywną podpowiedź cmd, powershell podpowiedź, autouzupełnianie

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

    3. Dostosowywanie użytkownika do prostych potrzeb wynosi 0. Zacząłem to w ciągu 2 minut, po spędzeniu dużej ilości czasu próba uruchomienia MobaSSH i OpenSSH do pracy.

    4. Aby skopiować pliki za pomocą scp wykorzystanie: scp ~/filename.md [email protected]:/C/Users/username/filename.md

    5. Darmowy 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 Linuksa powłoka w systemie Windows, w którym proste polecenia systemu Linux, takie jak ls, cp, find, itp., praca, podobnie do MINGW64

    2. możesz uzyskać dostęp do cmd i powershell bezpośrednio, wpisując cmd lub powershell

    3. Obsługa Unicode jest słaba. Kodowanie jest nieprawidłowe. Na przykład, jeśli spróbujesz uruchomić Python interpreter, nastąpi awaria. Musisz ręcznie zmienić kodowanie za pomocą ( https://stackoverflow.com/a/12834315/4752883 ): chcp 65001 set PYTHONIOENCONDING=utf-8 a następnie uruchom podpowiedź Pythona

    4. Wspaniałą rzeczą w MobaSSH jest to, że ma bardzo prosty interfejs użytkownika i scp i ssh i dobrze zintegrowane. Więc będzie działać w prostych przypadkach użycia

    5. Aby skopiować pliki z klienta Linuksa na serwer Windows z systemem MobaSSH: użyj scp ~/filename.md [email protected]:/cygdrive/c/Users/username/filename.md Dzieje się tak, ponieważ MobaSSH jest oparty na Cygwin i jego dyski są mapowane w ten sam sposób cygwin – Dyski s są mapowane.

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

    1. Jest bardzo błędny i będziesz musiał go mocno dostosować.

    2. Uzupełnianie poleceń nie działa

    3. Pozostawia spacje, gdy przesuwasz kursor na terminalu

    4. Python nie działa

    5. Późniejsze wersje OpenSSH mogły go ulepszyć. Ponadto wydaje się, że MS udostępnia OpenSSH przez ” Funkcje opcjonalne ” https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/

Odpowiedz

Jeśli akurat korzystasz z OSX …

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

Otrzymałem następujący błąd:

ssh: local: node name or service name not known 

Rozwiązanie

Na moim Macu musiałem wykonać następujące czynności, aby skonfigurować lokalną ssh:

Preferencje systemowe -> Internet & Sieć -> Udostępnianie -> WŁĄCZ Zdalne logowanie

To następnie dostarczyło nazwę użytkownika @ adres IP.

Odpowiedź

Miałem dzisiaj ten sam problem na MAC.

Wpisz następujące polecenie:

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

Dodaj komentarz

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