У нас есть две основные рассматриваемые среды:
Разработка и обеспечение качества
В каждой среде есть два сервера:
Чтобы подключиться к серверу приложений, необходимо сначала подключиться к окну перехода, а затем по SSH к серверу приложений.
Благодаря брандмауэру существует несколько правил:
Наша проблема
У нас много контента (670 ГБ) на DEVELOPMENT APPLICATION SERVER
, и нам нужно передать это в QA APPLICATION SERVER
.
Копирование этих данных в окна перехода не вариант, потому что им не хватает необходимого места.
Я провел небольшое исследование и узнал, что мы потенциально можем создать серию туннелей через эти серверы, чтобы мы могли передавать данные прямо с одного сервера приложений на другой через туннели. Однако проблема в том, что мы не можем подключиться к окну перехода с сервера приложений.
Есть ли у нас варианты? Ситуация становится безвыходной, и время имеет значение. У нас нет времени скачивать данные и повторно загружать их. Копирование по сети на серверах будет происходить быстро, так как это гигабитное соединение.
Безусловно, самый простой способ - просто скопировать его через scp. Кроме того, этот синтаксис действительно работает в отличие от некоторых других предложений.
Этот синтаксис просто не победить. Это позволяет вам рекурсивно копировать, rsync или что угодно, не беспокоясь о потенциально сложных каналах. Этот синтаксис интуитивно понятен, будет легче поддерживаться системными администраторами, которые следят за вами и не делают бесполезное использование кошки.
scp -3 devappserver:/path/to/copy/from qaappserver:/path/to/copy/to
Из страница руководства scp: -3
Копии между двумя удаленными хостами передаются через локальный хост. Без этой опции данные копируются напрямую между двумя удаленными хостами. Обратите внимание, что эта опция отключает индикатор выполнения.
Вот файл ~ / .ssh / config, который устанавливает прямой доступ с вашей рабочей станции к серверам приложений через соответствующий переход (он же сервер-бастион).
MacBook-Pro:~ barrychapman$ кошка ~ / .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 Application в QA Application через вашу рабочую станцию.
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, и не о чем беспокоиться. Вы можете избавиться от него, добавив LogLevel Quiet
в раздел конфигурации хоста бастиона.
Если интернет серия трубок, Unix - это серия каналов - что-то вроде:
cat ginormous-file | ssh user@host1 "cat | ssh user@host2 \"cat >out\" "
должно сработать.
Если вам нужно пройти через больше хостов, добавьте больше каналов (и больше вложенных слоев \
-экранированная цитата) по мере необходимости. (Обратите внимание, однако, что если конвейер / экранирование становится настолько сложным, что вам придется рисовать диаграмму или прибегать к счету на пальцах чтобы определить, сколько раз вам нужно удваиваться при побегах пора признать поражение и настроить VPN!)
Если я правильно понимаю, у вас есть два сервера перехода (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