scp z określonym numerem portu

793

Próbuję scpować plik ze zdalnego serwera na mój komputer lokalny. Dostępny jest tylko port 80.

Próbowałem:

scp -p 80 [email protected]:/root/file.txt .

ale dostał ten błąd: cp: 80: No such file or directory

Jak określić numer portu w poleceniu scp?

Raz Dwa Trzy
źródło
33
port powinien być w stolicy -P 80
Eliethesaiyan

Odpowiedzi:

1406

W przeciwieństwie do ssh, scp używa przełącznika P, aby ustawić port zamiast małych liter p:

scp -P 80 ... # Use port 80 to bypass the firewall, instead of the scp default

Mały przełącznik p jest używany z scp do zachowania czasów i trybów.

Oto fragment strony podręcznika scp ze wszystkimi szczegółami dotyczącymi dwóch przełączników, a także wyjaśnienie, dlaczego dla scp wybrano wielkie litery P:

-P port Określa port, z którym należy się połączyć na zdalnym hoście. Zauważ, że ta opcja jest napisana dużą literą „P”, ponieważ -p jest już zarezerwowane dla zachowania czasów i trybów pliku w rcp (1).

-p Zachowuje czasy modyfikacji, czasy dostępu i tryby z oryginalnego pliku.

Zaktualizuj i odłóż na bok, aby odpowiedzieć na jeden z (mocno pozytywnych) komentarzy :

W odniesieniu do komentarza Abdulla na temat scpkolejności opcji sugeruje:

scp -P80 -r some_directory -P 80 ...

... przeplata opcje i parametry. getopt(1)wyraźnie określa, że ​​parametry muszą występować po opcjach i nie mogą być z nimi przeplatane:

Parametry wywoływane przez getopt można podzielić na dwie części: opcje, które modyfikują sposób, w jaki getopt wykona parsowanie (opcje i optstring w SYNOPSIS) oraz parametry, które należy przeanalizować (parametry w SYNOPSIS). Druga część rozpocznie się od pierwszego parametru innego niż opcja, który nie jest argumentem opcji, lub po pierwszym wystąpieniu „-”. Jeśli nie znaleziono opcji „-o” lub „--options” w pierwszej części, pierwszy parametr drugiej części jest używany jako krótki ciąg opcji.

Ponieważ -ropcja wiersza poleceń nie przyjmuje żadnych dalszych argumentów, some_directoryjest „pierwszym parametrem nie będącym opcją, który nie jest argumentem opcji”. Dlatego, jak wyraźnie zaznaczono na getopt(1)stronie podręcznika , wszystkie kolejne argumenty wiersza poleceń następujące po nim (tj. -P 80 ...) Są uważane za nie-opcje (i argumenty bez opcji).

Tak więc w ten sposób getopt(1)widzi się przykład przedstawiony na końcu opcji i na początku parametrów wyznaczonych przez tekst bing na szaro:

scp -P80 -r some_directory -P 80 ...

Nie ma to nic wspólnego z scpzachowaniem, a wszystko z tym, jak standardowe aplikacje POSIX analizują opcje wiersza poleceń za pomocą getopt(3)zestawu funkcji C.

Aby uzyskać więcej informacji na temat zamawiania i przetwarzania wiersza poleceń, przeczytaj stronę getopt(1)podręcznika, używając:

man 1 getopt
Michael Goldshteyn
źródło
88
btw, scpwymaga poprawnej kolejności opcji: scp -r some_directory -P 80 ...nie działa ----- ale scp -P 80 -r some_directory ...działa.
Abdull
9
ogólnie w Linuksie po poleceniu następują opcje, a następnie instrukcje / wartości
Gary
2
@ Abdull zauważ, że scp -r -p 50193 / ścieżka / do / katalogu również działa. Parametr ścieżki pliku nie jest powiązany z opcją rekurencji -r.
Benjamin,
6
@Benjamin O ile nie zamierzasz użyć portu 50193, w takim przypadku twoje „p” powinno być pisane wielką literą.
Brak,
1
@Abdull: tam jest odpowiedź na askubuntu.com/a/307078/37574 że wyjaśnia -Pkolejność parametrów. Zasadniczo port musi przejść przed hostem. Zapobiega to dwuznaczności i pozwala na dwa -Pparametry, jeśli oba hosty są zdalne.
mwfearnley
70

Jedna dodatkowa wskazówka. Umieść opcję „-P” po komendzie scp, bez względu na to, czy komputer, na którym ssh-sisz, jest drugim (aka docelowym). Przykład:

scp -P 2222 /absolute_path/source-folder/some-file [email protected]:/absolute_path/destination-folder
Gooshan
źródło
46

Wiesz, co jest fajniejsze niż -P? nic

Jeśli używasz tego serwera więcej niż kilka razy, skonfiguruj / utwórz ~/.ssh/configplik z wpisem:

Host www.myserver.com
    Port 80

lub

Host myserver myserver80 short any.name.u.want yes_anything well-within-reason
    HostName www.myserver.com
    Port 80
    User username

Następnie możesz użyć:

scp [email protected]:/root/file.txt .

lub

scp short:/root/file.txt .

Możesz używać czegokolwiek w linii „Host” za pomocą ssh, scp, rsync, git i innych

Istnieje wiele opcji konfiguracji, których można użyć w plikach konfiguracyjnych, patrz:

man ssh_config

Mikrofon
źródło
3
Jedyne rozwiązanie, które pozwala na używanie scp -3zi na serwery z odbiornikami ssh na różnych portach. scp -3 -P 123 server1:/file -P 456 server2:/filelub podobne alternatywy nie działałyby, scp założył ten sam port na obu serwerach
88595
28

Używam innych portów niż standardowe i kopiuję pliki między plikami w następujący sposób:

scp -P 1234 user@[ip address or host name]:/var/www/mywebsite/dumps/* /var/www/myNewPathOnCurrentLocalMachine

Jest to tylko do sporadycznego użytku, jeśli powtarza się w oparciu o harmonogram, należy użyć do tego zadania rsync i cron.

Marian Zburlea
źródło
7

aby użyć innego portu w poleceniu scp, użyj dużej litery P w ten sposób

scp -P port-number source-file/directory user@domain:/destination

ya ali

Hasan Barary
źródło
6

Pomoc SCP mówi nam, że port jest określony wielkimi literami P.

~$ scp
usage: scp [-12346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
           [-l limit] [-o ssh_option] [-P port] [-S program]
           [[user@]host1:]file1 ... [[user@]host2:]file2

Mam nadzieję że to pomoże.

DD
źródło
2

Kopiowanie pliku do hosta: scp SourceFile remoteuser@remotehost:/directory/TargetFile

Kopiowanie pliku z hosta: scp user@host:/directory/SourceFile TargetFile

Kopiowanie katalogu rekurencyjnie z hosta: scp -r user@host:/directory/SourceFolder TargetFolder

UWAGA : Jeśli host używa portu innego niż port 22, możesz to określić za pomocą opcji -P: scp -P 2222 user@host:/directory/SourceFile TargetFile

AJ
źródło
6
Wystarczy UWAGA
blagus
2

Można to osiągnąć, określając port za pomocą -Pprzełącznika:

scp -i ~/keys/yourkey -P2222 file ubuntu@host:/directory/
Vaseem007
źródło
2

jeśli potrzebujesz skopiować plik lokalny na serwer (podaj port)

scp -P 3838 /the/source/file [email protected]:/destination/file
Turan Zamanlı
źródło
0

Mam nadzieję, że pomoże to komuś, kto szuka idealnej odpowiedzi

Kopiowanie folderu lub pliku z serwera ze zdefiniowanym portem na inny serwer lub komputer lokalny

  1. Przejdź do katalogu, w którym masz uprawnienia administratora, najlepiej do katalogu domowego na komputerze, do którego chcesz skopiować pliki
  2. Napisz polecenie poniżej

scp -r -P port użytkownik @ adres_IP: / home / file / pathDirectory.

**Note:** The last . on the command directs it to copy everything in that folder to your directory of preference
Kiryamwibo Yenusu
źródło
0

Istnieje wiele odpowiedzi, ale powinieneś być w stanie to uprościć. Upewnij się, że wiesz, na którym porcie nasłuchuje SSH, i zdefiniuj go. Oto, co właśnie wykorzystałem do odtworzenia problemu.

scp -P 12222 plik. 7z uż[email protected]: / home / użytkownik / Pobieranie Udało się.

HarteScout 1
źródło