SCP z dwoma różnymi portami


15

Jak mogę użyć polecenia scp do skopiowania plików między dwoma zdalnymi serwerami z mojego lokalnego komputera?

zdalny serwer 1: IP = 67.12.21.133 i port = 6774

zdalny serwer 2: IP = 67.129.242.40 i port = 6774

scp -rp -P 6774 denny@67.12.21.133: /home/denny/testapp1.txt denny@67.129.242.40:

Daje błąd po podaniu hasła 67.12.21.133,

ssh: połącz z hostem 67.129.242.40 port 22: połączenie odrzucone

utracone połączenie


Właśnie to przetestowałem, ale działa tylko dla pierwszego hosta. Drugi jest zamknięty na porcie 22.
gajdipajti

Odpowiedzi:


19

Możesz użyć, ~/.ssh/configaby określić porty, które mają być używane dla hostów (i aby ustawić wiele innych fajnych rzeczy; sprawdź stronę manuala man ssh_config):

# ~/.ssh/config

Host 67.12.21.133
  Port 6774

Host 67.129.242.40
  Port 6774

Robiąc to, musisz użyć opcji -3scp, która kopiuje pliki przez lokalny komputer. W przeciwnym razie scp wydaje polecenie scp za pośrednictwem ssh na pierwszym hoście, więc faktycznie działa

 ssh -p 6774 denny@67.12.21.133 scp -rp /home/denny/testapp1.txt denny@67.129.242.40:

a następnie ~ / .ssh / config pierwszego zdalnego hosta (67.12.21.133) jest używany zamiast lokalnego.

Po ~/.ssh/configprawidłowym skonfigurowaniu powinno to działać:

scp -rp3 denny@67.12.21.133:/home/denny/testapp1.txt denny@67.129.242.40:

Oczywiście możesz również skopiować zawartość pliku ~ / .ssh / config na swój pierwszy zdalny host, a następnie możesz użyć scp bez -3opcji, co prawdopodobnie przyspieszy transfer.

Lub możesz użyć sztuczki używanej przez scp i użyć takiego wiersza poleceń:

ssh -p 6774 denny@67.12.21.133 scp -rp -P 6774 /home/denny/testapp1.txt denny@67.129.242.40:

(Zwróć uwagę na inny przypadek parametru portu dla ssh i scp: ssh -p 6774vs. scp -P 6774)

PS: Otrzymałem te informacje z Bugzilli OpenSSH, w której wpisałem to jako błąd: https://bugzilla.mindrot.org/show_bug.cgi?id=2020


„-3” nie wydaje się być prawidłową opcją - otrzymuję tylko „scp: nielegalna opcja - 3”.
Rich Sedman

8

Nie znalazłem łatwego rozwiązania, ale możesz spróbować użyć sshfs w następujący sposób:

mkdir /tmp/h1
mkdir /tmp/h2

sshfs -p 6774 user1@host1:/public /tmp/h1
sshfs -p 2211 user2@host2:/data/src /tmp/h2

cp /tmp/h1/files.* /tmp/h2

fusermount -u /tmp/h1
fusermount -u /tmp/h2

Innym sposobem może być użycie ssh (faktycznie nieudane testowanie):

ssh user1@host1 "cat /public/file.bin" | ssh user2@host2 "cat >/data/file.bin"

Obecnie nie znalazłem właściwego sposobu na wprowadzenie dwóch haseł. Czasami prosi o dwa hasła, ale nikogo nie akceptuje. Może po wymianie kluczy ssh między hostami to działa. Ponieważ nie potrzebujesz haseł.

Mam nadzieję, że to pomoże? Tomasz


6

Według tej strony na blogu Linux Academy po prostu musisz użyć tej -P 6774opcji tuż przed drugą zdalną ścieżką:

scp -rp -P 6774 denny@67.12.21.133:/home/denny/testapp1.txt -P 6774 denny@67.129.242.40:

Każde użycie -Pflagi dotyczy tylko następnej lokalizacji w wierszu polecenia, a nie całego polecenia. Każda lokalizacja, która nie ma -Pmiędzy nią a poprzednią ścieżką (lub nazwą polecenia [ scp]), domyślnie ma port standardowy (22).


To nie działa dla mnie. Szkoda, bo wydaje się to najlepszym rozwiązaniem. Link jest zepsuty.
david.perez

1
Właśnie zaktualizowałem link (choć najpierw zapomniałem się zalogować ...). Linux Academy postanowiła zrestrukturyzować swoją witrynę. Mam nadzieję, że to pomaga!
Dan Hunsaker

Gdyby tylko to zadziałało. Ale rozumiem -P: No such file or directory.
Tom

@Tom - Na jakim systemie to działa? Być może masz inną implementację scpniż ta, o której tu mowa.
Dan Hunsaker,

To jest Ubuntu 17.04.
Tom

-2

Jeśli chcesz przenieść dane z jednego serwera na inny, użyj polecenia SCP. Aby to zrobić

Wystarczy nacisnąć Ctrl+ Alt+ Tna klawiaturze, aby otworzyć Terminal. Po otwarciu uruchom poniższe polecenie.

scp -pr root@192.168.1.2:/path/to/files /destination/path

Uwaga: Parametru -P można użyć, jeśli chcesz wspomnieć o numerze portu.


2
nie przeczytałeś pytania. Ma problem z portami. możesz ustawić pierwszy port, ale dokręć drugi parametrem -P
gajdipajti

@gajdipajti Nie podałem portu w odpowiedzi i dodałem go jako notatkę. Użytkownik stwierdził również, że używa tego samego portu. Spójrz na Q. 2. i 3. linię :)
Mitch

2
Ale to nie działa w ten sposób, ustawisz pierwszy z opcją -P, a drugi pozostanie 22. Po prostu spróbuj. Obecnie wykonuję testy, ale wciąż nie mam działających rozwiązań.
gajdipajti

Opcji -P użyłbyś tylko, jeśli korzystasz z niestandardowego portu.
Mitch
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.