Як мені SCP-файл через проміжний сервер?


14

Я використовую Ccygwin на WinXP (з оболонкою bash). Я хочу SCP-файл з мого localhost на віддалену машину - host2. Однак я можу лише SSH на проміжну машину - host1, а потім звідти SSH на host2. (Зверніть увагу, я не можу отримати доступ до host2 від свого localhost).

Я думав, що тунелювання - це моя відповідь, але коли я намагаюся налаштувати тунель

ssh -L 9999:localhost:9998 dalvarado@host1 'ssh -L 9998:localhost:1234 -N dalvarado@host2'

Але після введення цієї команди та натискання клавіші введення система просто зависає. Який правильний спосіб встановити тунель, а потім SCP-файл після?

Дякую, -


2
Дублікат сайту superuser.com/questions/174160/… - дивіться мою відповідь нижче для резюме.
jmetz

Від користувача Meir D : Також дивіться serverfault.com/questions/337274/…
fixer1234

Відповіді:


16

Це вже відповіли краще тут .

Підсумовуючи: помістіть наступне ~/.ssh/config

Host target.machine
User          targetuser
HostName      target.machine
ProxyCommand  ssh proxyuser@proxy.machine nc %h %p 2> /dev/null

а потім просто scpна target.machine в будь-який час, коли ви хочете проксі через proxy.machine!

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

Кредит має бути наданий користувачеві 24925, який відповів на це у 2011 році.


12

Щоб налаштувати тунель SSH, використовуйте наступний формат:

ssh -L 9999:host2:22 user@host1

Ця команда підключається до host1як userі тунель порт 9999 на комп'ютері, що видає команду на порт 22 на host2. -Nнеобов’язково, або ви можете використовувати щось на кшталт topабо watchпідтримувати сеанс живим, якщо це потрібно.

Потім просто scpрозмістити хост2 на localhost: 9999.


1
Коли я запускаю цю команду, чи повинен я в кінцевому підсумку ввійти до системи host1? Крім того, після запуску цієї команди я відкрив ще одну оболонку bash і запустив "scp hello.txt localhost: 9999", але отримав помилку "ssh: connect to host localhost port 22: З'єднання відмовлено". Що я тут роблю неправильно?
Дейв

3
Після запуску цієї команди ви підключитесь до host1, так. scpОднак ваш синтаксис команд невірний. Спробуйте це, scp -P 9999 hello.txt user@localhost:/path/to/destination/fileде userкористувач, на host2якого ви хочете ввійти.
Дощ

1
@Rain, ти можеш поставити цей приклад у головній відповіді;)
dmeu

5

Оскільки OpenSSH 7.3 , ви можете використовувати -Jабо -o ProxyJumpвказати хост бастіона / стрибка. Тому, щоб SSH до з node2допомогою node1:

ssh -J you@node1 you@node2

У SCP немає -Jаргументу, але він дозволяє -o, тому це працює:

scp -o ProxyJump=you@node1 file.txt you@node2:~

3

Ви можете спочатку скопіювати файл на host1, як це:

scp file dalvarado@host1:.

Потім зробіть це, щоб отримати його до host2:

ssh -t dalvarado@host1 'scp file dalvarado@host2:.'

-tВаріант sshзмушує його виділяти псевдо-термінал, який може зробити його простіше для scpна host1 запитувати у вас парольний фразу / пароль. Якщо у вас є ssh-агент, що працює і налаштований скрізь, вам не слід запитувати пароль / пароль.

Я пропоную цю альтернативу, тому що якщо ви використовували тунель, вам все одно знадобляться дві команди: одна для настройки тунелю і одна для копіювання файлу через нього. Це здається більш простим.


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