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
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:
-
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
-
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ępniesudo
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
-
Sprawdź, czy
sshd
działa na Twoim serwerze, używając:ps aux | grep sshd
-
Jeśli nie, zainstaluj
OpenSSH
za pomocąsudo apt-get install openssh-server openssh-client
https://www.tecmint.com/install-openssh-server-in-linux/ -
Uruchom ponownie serwer i sprawdź, czy
sshd
działa przy użyciups aux | grep sshd
-
Jeśli potrzebujesz, możesz skonfigurować swój plik
/etc/ssh/sshd_config
, ale nie jest to konieczne do prostych konfiguracji -
sprawdź, czy th Porty są otwierane za pomocą
netcat
:nc -v -z 127.0.0.1 22
-
Aby skopiować pliki z
Linux
klient doLinux
klienta używa scp w następujący sposóbscp ~/filename.md [email protected]:~/folder/filename.md
-
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
-
Istnieje wielu klientów obsługujących SSH serwery w systemie Windows, takie jak:
-
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
-
Porównanie tych serwerów:
Serwer Bitvise SSH
-
Zapewnia niemal natywną podpowiedź
cmd
,powershell
podpowiedź, autouzupełnianie -
Zapewnia dodatkowe możliwości dostosowywania, jeśli potrzebujesz zaawansowanego użycia
-
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
iOpenSSH
do pracy. -
Aby skopiować pliki za pomocą scp wykorzystanie:
scp ~/filename.md [email protected]:/C/Users/username/filename.md
-
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:
-
zapewnia Linuksa powłoka w systemie Windows, w którym proste polecenia systemu Linux, takie jak
ls
,cp
,find
, itp., praca, podobnie doMINGW64
-
możesz uzyskać dostęp do
cmd
ipowershell
bezpośrednio, wpisująccmd
lubpowershell
-
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 -
Wspaniałą rzeczą w MobaSSH jest to, że ma bardzo prosty interfejs użytkownika i
scp
issh
i dobrze zintegrowane. Więc będzie działać w prostych przypadkach użycia -
Aby skopiować pliki z klienta Linuksa na serwer Windows z systemem
MobaSSH
: użyjscp ~/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óbcygwin
– 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.
-
Jest bardzo błędny i będziesz musiał go mocno dostosować.
-
Uzupełnianie poleceń nie działa
-
Pozostawia spacje, gdy przesuwasz kursor na terminalu
-
Python nie działa
-
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/
localuser@machineA: ssh -p 2222 username@domain
(aby wskazać, że uruchamiasz polecenie ssh jako użytkownik lokalny na komputerze A)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 lokalnegoexample.com
)-r
, ponieważ nie jest to potrzebne do kopiowania pojedynczych plików (jest ' używane do rekurencyjnego kopiowania katalogów)