Данные копии через SSH туннелируют по нескольким транзитным участкам

Это работает на меня в 32-разрядном Windows 7. Вы, ВОЗМОЖНО, должны запустить это приложение как Административный пользователь в зависимости от Ваших настроек UAC.

http://sourceforge.net/projects/winipchanger/

14
задан 12 December 2013 в 18:56
4 ответа

Самый простой способ - просто скопировать его через scp. Кроме того, этот синтаксис действительно работает в отличие от некоторых других предложений.

Вы не можете превзойти этот синтаксис просто. Это позволяет вам рекурсивно копировать, rsync или что угодно, не беспокоясь о потенциально сложных каналах. Этот синтаксис интуитивно понятен, будет легче поддерживаться системными администраторами, которые следят за вами, и не делает бесполезным использованием cat .

scp -3 devappserver:/path/to/copy/from qaappserver:/path/to/copy/to

Из страницы руководства scp : -3 Копии между двумя удаленными хостами передаются через локальный хост. Без этой опции данные копируются напрямую между двумя удаленными хостами. Обратите внимание, что этот параметр отключает индикатор выполнения.

В примере ниже

  • Ваша рабочая станция называется MacBook-Pro.
    • Находится в зоне DNS локальной сети с именем .local
  • Панель перехода QA называется qajumpserver
  • Сервер приложений QA называется qaapplicationserver
    • Находится в зоне DNZ LAN с именем .local
  • Мы сделаем тестовую копию файла / etc / hosts размером 670 ГБ; -)
  • Предполагается, что у вас настроена аутентификация с открытым ключом SSH.



Вот файл ~ / .ssh / config, который устанавливает прямой доступ с вашей рабочей станции к серверам приложений через соответствующий переход (он же сервер-бастион).

MacBook-Pro:~ barrychapman$ cat ~/.ssh/config
Host *
  ServerAliveInterval 60
Host devapplicationsever
  HostName devapplicationserver.local
  ProxyCommand ssh -i ~/.ssh/id_rsa barrychapman@devjumpserver.example.com -W %h:%p
  User barrychapman
Host qaapplicationserver
  HostName qaapplicationserver.local
  ProxyCommand ssh -i ~/.ssh/id_rsa barrychapman@qajumpserver.example.com -W %h:%p
  User barrychapman

MacBook-Pro:~ barrychapman$



Проверка наличия файла на целевом сервере, его не будет там.

MacBook-Pro:~ barrychapman$ ssh qaapplicationserver ls /tmp/hosts
ls: cannot access /tmp/hosts: No such file or directory
Killed by signal 1.
MacBook-Pro:~ barrychapman$



Теперь давайте скопируем файл с сервера приложений Dev в приложение QA через вашу рабочую станцию.


MacBook-Pro:~ barrychapman$ scp -3 devapplicationserver:/etc/hosts qaapplicationserver:/tmp/
Killed by signal 1.
Killed by signal 1.
MacBook-Pro:~ barrychapman$



Теперь давайте проверим наличие скопированного файла на сервере приложений QA.

MacBook-Pro:~ barrychapman$ ssh qaapplicationserver ls /tmp/hosts
/tmp/hosts
Killed by signal 1.
MacBook-Pro:~ barrychapman$ 

Примечание

При закрытии соединения ProxyCommand вы увидите предупреждающее сообщение «Прервано сигналом 1». Это SSH разрывает соединение ProxyCommand, и не о чем беспокоиться.

15
ответ дан 2 December 2019 в 21:05

ТРУБЫ!

Если Интернет - это серия каналов , Unix - это серия каналов - что-то вроде:

cat ginormous-file | ssh user@host1 "cat | ssh user@host2 \"cat >out\" "

должно работать.

Если вам нужно пройти через больше хостов, добавьте больше каналов (и больше вложенных слоев \ -экранированная цитата) по мере необходимости. (Обратите внимание, однако, что если конвейер / побег становится настолько сложным, что вам нужно нарисовать диаграмму или прибегнуть к счету на пальцах , чтобы определить, сколько раз вам придется удваивать побеги , вероятно, пора признать поражение и настройте подходящий VPN!)

Unix - это серия каналов - что-то вроде:

cat ginormous-file | ssh user@host1 "cat | ssh user@host2 \"cat >out\" "

должно работать.

Если вам нужно пройти через больше хостов, добавьте больше каналов (и больше вложенных слоев цитаты с экранированием \ ) по мере необходимости . (Обратите внимание, однако, что если конвейер / побег становится настолько сложным, что вам нужно нарисовать диаграмму или прибегнуть к счету на пальцах , чтобы определить, сколько раз вам придется удваивать побеги , вероятно, пора признать поражение и настройте подходящий VPN!)

Unix - это серия каналов - что-то вроде:

cat ginormous-file | ssh user@host1 "cat | ssh user@host2 \"cat >out\" "

должно работать.

Если вам нужно пройти через больше хостов, добавьте больше каналов (и больше вложенных слоев цитаты с экранированием \ ) по мере необходимости . (Обратите внимание, однако, что если конвейер / побег становится настолько сложным, что вам нужно нарисовать диаграмму или прибегнуть к счету на пальцах , чтобы определить, сколько раз вам придется удваивать побеги , вероятно, пора признать поражение и настройте подходящий VPN!)

8
ответ дан 2 December 2019 в 21:05

Если я правильно понимаю, у вас есть два сервера перехода (jump-qa и jump-dev), защищающие два сервера приложений (app-qa и app-dev); серверы перехода могут передавать друг другу ssh; ни один ящик, кроме соответствующего сервера перехода, не может подключиться по ssh к соответствующему серверу приложений. Серверы приложений не могут использовать ssh никому. Файл должен быть перенесен из app-dev в app-qa. На обоих серверах перехода не хватает места для промежуточной копии данных.

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

Настройте туннели (каждую из этих команд нужно будет запускать в отдельном окне на jump-qa ):

jump-qa% ssh app-qa -R 2345:localhost:2346
jump-qa% ssh jump-dev -L 2346:app-dev:22

Теперь вы должны обнаружить, что в app-qa вы можете выполнять telnet localhost 2345 и получите баннер ssh app-dev. Затем вы можете скопировать файл данных:

app-qa% scp -P 2345 localhost:/path/on/app-dev/data.dat data.dat
1
ответ дан 2 December 2019 в 21:05

OpenSSH версии 7.3 и выше поддерживает -J.

-J [user@]host[:port]
Подключитесь к целевому хосту, сначала установив ssh-подключение к хосту перехода, а затем установив оттуда TCP-пересылку к конечному пункту назначения. Можно указать несколько переходов через запятую. Это ярлык для указания директивы конфигурации ProxyJump.

Для A → B → C на A просто:

tar -cf - file1 file_n | pv | ssh -C -J userB@B:portB userB@C -p portC 'tar -C destDir -xvf -'
  • Используйте столько переходов, сколько хотите, с опцией ssh ​​-J.
  • Опустите удаленный -C tar, чтобы оставить файлы в домашней папке.
  • Отправлять сразу любые файлы (текстовые или бинарные).
  • Увеличьте скорость, сжав поток с помощью или ssh -C (или tar -z). Особенно полезно, если данные представляют собой обычный текст (несжатый).
  • pv отслеживание прохождения данных по каналу. Альтернативой может быть прогресс.

На основе ответов Флориана Фида и Дэна Гартуэйта.

1
ответ дан 18 September 2020 в 21:01

Теги

Похожие вопросы