SCP між двома мережами


12

Мені потрібно перенести файл між двома комп'ютерами, які не підключені до однієї мережі. У мене з’явився третій комп’ютер, який може бачити обидві мережі через VPN.

На третьому комп’ютері я можу:

scp root@firstcomputer:./file ./

І закінчте переказ наступним реченням:

scp ./file root@secondcomputer:./

Але я не можу зробити це лише одним рядком:

scp root@firstcomputer:./file root@secondcomputer:./

Відповідь на помилку є

ssh: connect to host secondcomputer port 22: No route to host
lost connection

Я розумію, що це, мабуть, тому, що перший комп'ютер не може бачити другий. Чи можна надати SCP парам, який стосується того, що машина, яка запускає програму SCP, є єдиною, хто може бачити обидва комп'ютери?

До речі, третій комп'ютер - це Mac з Lion, а кулак, а другий - Debian.

Відповіді:


3

Ви повинні мати можливість використовувати тунель SSH.

Припустимо, що ви намагаєтеся перенести файл з віддаленого комп'ютера ("віддалений") на свій локальний комп'ютер ("локальний"), встановіть тунель через третій комп'ютер ("шлюз"), ввівши це на своєму локальному комп'ютері:

ssh -fNL 12345:remote:22 gatewaylogin@gateway

Тоді ви можете виконати необмежену кількість команд SCP в цьому тунелі (все ще набираючи на локальному комп'ютері):

scp -P 12345 remotelogin@localhost://path/to/remote/file /local/path/where/you/want/file

Я просто перевірив це в своїй мережі, і це справно працювало.

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


21

Варіант scp -3 повинен бути тим, що ви шукаєте. Щоб сказати про це у своєму прикладі:

scp -3 root@firstcomputer:./file root@secondcomputer:./

Зауважимо, що варіант -3 був вперше представлений у OpenSSH 5.7, який був випущений на початку 2011 року.


Мій scp не реалізує -3, коли я виконую команду, я отримую scp: незаконний варіант - 3 використання: scp [-1246BCEpqrv] ...
JorgeO

1
Це правильно. -3 доступний лише в останній версії OpenSSH, що я не впевнений, що Debian ще реалізував.
Ріліндо,

Ах, вибачте за це. Оновлено відповідь щодо вимоги до версії.
andol

1

Ви можете спробувати це:

root@firstcomputer:./file /tmp && scp /tmp/file root@secondcomputer:./ && rm /tmp/file

Це скопіює файл у каталог / tmp на третьому комп’ютері, і якщо він буде успішним, він відновить цей файл на вторинний комп'ютер, а потім очистить себе. Оскільки ви використовуєте оператор &&, кожна команда буде виконуватися лише в тому випадку, якщо попередня команда була успішною.


Не знав про оператора && Краще, ніж використовувати;
JorgeO

Це та сама техніка, яку було використано в першому прикладі оригінального запитання, якого намагалися уникнути (скопіюйте з комп’ютера A на локальну машину, потім скопіюйте локальний файл на комп'ютер B).
Джейсон C
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.