Я нахожусь в ситуации, когда у меня есть значительный объем данных, которые мне нужно передать с сервера A на сервер C. Однако:
Краткая диаграмма, изображающая ситуацию:
Есть ли способ «передать» файлы через мой ноутбук с сервера A на сервер C?
Если ваш сервер перехода не слишком сильно вас ограничивает, вы можете сделать это с помощью одной команды на своем ноутбуке:
ssh jumpserverB ssh serverC tar cf - dir1 dir2 | ssh serverA tar xvf -
Вуаля!
Изменить: эээ - это было неправильное направление. Так что давайте поступим по-другому:
ssh serverA tar cf - dir1 dir2 | ssh jumpserverB ssh serverC tar xvf -
dir1 и dir2 - это два каталога, содержащие данные, которые вы хотите передать.
Я снова редактирую этот ответ - хотя Ф.Грег Алреди решил свою исходную проблему, - потому что его решение с использованием -J будет работать на некоторых машинах, но не на других. Это потому, что их ssh может не знать о флаге -J, как и в случае с моим. Итак, вот несколько ответов на некоторые комментарии:
ssh host2 -L 3333:host3:22
. Как обычно, вы перейдете на host2. Снова на host1 в другом окне вы вводите ssh localhost -p 3333 -L 4444:host4:22
; это приведет вас к host3. ssh -p 4444 ...
вы поняли.ssh serverA -R 4444:localhost:4444 serverA
; там мы можем ssh -p 4444 localhost
связаться с host4 или scp -P 4444 localhost
.Спасибо Andrzej A. Filip за указание https://unix.stackexchange.com/questions/85292/scp-from-one-remote-server-to-another-remote-server
Я смог решить эту проблему, используя один из ответов на этот вопрос. Вот шаги, которые я предпринял:
С ноутбука перенаправьте удаленный порт на ServerA на локальный порт на ноутбуке
[user@laptop]$ ssh -R 5001:localhost:5002 serverA -N
С портативного компьютера перенаправьте локальный порт на портативном компьютере на удаленный порт на ServerC (через узел перехода ServerB)
[user@laptop]$ ssh -J userb@serverB -i ~/.ssh/id_rsa.pub -L 5002:localhost:22 userb@serverC -N
С ServerA, scp
файлы через порт 5001
[usera@serverA]$ scp -P 5001 ./* userb@localhost:/data/location/on/serverC
Это немного многословно, но, похоже, работает.
Данные никогда не хранятся на ноутбуке и, по сути, проходят через туннель SSH следующим образом:
ServerA:5001 -> laptop:5002 -> ServerC:22