Как мне SCP файл через промежуточный сервер?


15

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

Я думал, что туннелирование было моим ответом, но когда я пытаюсь настроить туннель

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

Но после ввода этой команды и нажатия Enter, система просто зависает. Как правильно настроить туннель, а затем SCP файл после?

Благодарность, -


2
Дубликат superuser.com/questions/174160/… - см. Мой ответ ниже для краткого изложения.
Jmetz

От пользователя Meir D : См. Также serverfault.com/questions/337274/…
fixer1234

Возможное дублирование файлов scp через промежуточный хост
tripleee

Ответы:


17

На это уже лучше всего ответили здесь .

Подводя итог: положить следующее в ~/.ssh/config

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

а затем просто scpнацелить на .machine в любое время, когда вы захотите прокси через proxy.machine!

Также работает ssh, поэтому сэкономит ваше время ssh-на целевой машине.

Кредит должен перейти к пользователю 24925, который ответил на это в 2011 году.


13

Чтобы настроить SSH-туннель, используйте следующий формат:

ssh -L 9999:host2:22 user@host1

Эта команда подключается к , host1как userи тоннелям порта 9999 на компьютере , выдающий команду к порту 22 на host2. -Nне является обязательным, или вы можете использовать что-то вроде topили, watchчтобы сохранить сеанс в случае необходимости.

Затем просто scpдля host2 на localhost: 9999.


1
Когда я запускаю эту команду, должен ли я в конечном итоге войти в систему на host1? Кроме того, после выполнения этой команды я открыл другую оболочку bash и запустил «scp hello.txt localhost: 9999», но получил ошибку «ssh: connect to host localhost port 22: Connection failed». Что я здесь не так делаю?
Дейв

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.