SCP з двома різними портами


15

Як я можу використовувати команду scp для копіювання файлів між двома віддаленими серверами з мого локального ПК?

віддалений сервер 1: IP = 67.12.21.133 & порт = 6774

віддалений сервер 2: IP = 67.129.242.40 і порт = 6774

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

Він дає помилку після введення пароля 67.12.21.133,

ssh: підключення до порту 67.129.242.40 22: з'єднання відмовлено

втрачений зв’язок


Я також тестував це, але працює лише для першого хоста. Другий заблокований до порту 22.
gajdipajti

Відповіді:


19

Ви можете ~/.ssh/configвказати порти, які використовуватимуть для хостів (і для встановлення багатьох інших приємних речей; перевірте сторінку man man ssh_config):

# ~/.ssh/config

Host 67.12.21.133
  Port 6774

Host 67.129.242.40
  Port 6774

Роблячи це, ви повинні скористатися опцією -3scp, яка копіює файли через вашу локальну машину. В іншому випадку scp видає команду scp через ssh на першому хості, тому вона фактично працює

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

а потім ~ / .ssh / config першого віддаленого хоста (67.12.21.133) використовується замість вашого локального.

Якщо ви ~/.ssh/configправильно встановили , це має працювати:

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

Звичайно, ви також можете скопіювати вміст файлу ~ / .ssh / config на свій перший віддалений хост, і тоді ви можете використовувати scp без -3можливості, що, ймовірно, пришвидшить передачу.

Або ви можете використовувати фокус, який використовує scp, і використовувати такий командний рядок:

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

(Зверніть увагу на інший випадок параметра порту для ssh та scp: ssh -p 6774vs. scp -P 6774)

PS: Цю інформацію я отримав із баггілли OpenSSH, де я ввів це як помилку: https://bugzilla.mindrot.org/show_bug.cgi?id=2020


'-3' не відповідає дійсності - я просто отримую "scp: незаконний варіант - 3".
Багатий Седман

8

Я не знайшов простого рішення, але ви можете спробувати використовувати sshfs наступним чином:

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

Іншим способом може бути використання ssh (насправді не успішно перевірено):

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

Наразі я не знайшов правильного способу ввести два паролі. Він кілька разів запитує два паролі, але нікого не приймає. Можливо, якщо ви обміняєте ключі ssh між хостами, це працює. Тому що вам не потрібні паролі.

Я сподіваюся, що це допомагає? Томас


6

Згідно з цією сторінкою в блозі Linux Academy, вам просто потрібно використовувати цю -P 6774опцію безпосередньо перед другим віддаленим шляхом:

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

Кожне використання -Pпрапора стосується лише наступного місця в командному рядку, а не всієї команди. Будь-яке місце, яке не має -Pміж ним та попереднім контуром (або ім'ям команди [ scp]), за замовчуванням застосовується до стандартного порту (22).


Це не працює для мене. Шкода, адже це здається найкращим рішенням. Посилання розірвано.
david.perez

1
Щойно оновлено посилання (хоча я забув увійти вперше ...). Linux Academy вирішила реструктуризувати свій сайт. Сподіваюся, що це допомагає, деякі!
Дан Хунсакер

Якби тільки це спрацювало. Але я отримую -P: No such file or directory.
Том,

@Tom - У якій системі ви це працюєте? Можливо, у вас є інша реалізація, scpніж та, про яку йдеться тут.
Dan Hunsaker

Це Ubuntu 17.04.
Том,

-2

Якщо вам потрібно передати дані з одного сервера на інший, використовуйте команду SCP. Робити так

Просто відкрийте термінал Ctrl+ Alt+ Tна клавіатурі. Коли він відкриється, запустіть команду нижче.

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

Примітка: Параметр -P можна використовувати, якщо ви хочете згадати номер порту.


2
ви не читали питання. У нього проблеми з портами. ви можете встановити перший порт, але горіх другий з параметром -P
gajdipajti

@gajdipajti Я не вказав порт у своїй відповіді, і додав його як примітку. Користувач також заявив, що використовує той же порт. Подивіться на Q. 2-й та 3-й рядки :)
Мітч

2
Але це не працює таким чином, ви встановите перший за допомогою -P, але другий залишиться 22. Просто спробуйте. Я зараз роблю тести, але робочих рішень досі немає.
gajdipajti

Ви будете використовувати опцію -P, лише якщо використовуєте нестандартний порт.
Мітч
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.