Отримати файли з сервера за два кроки [закрито]


14

У нас є така ситуація:

  1. Моя машина
  2. Машина шлюзу
  3. Цільова машина

У мене немає кореневих прав як на №2, так і на №3. Я також не можу дійсно зберігати інформацію (не більше 200 Мбіт) на машині № 2 (оскільки це буде шлюзом у решту мережі, не більше того). На машині №3 є папка, розміром приблизно 3 Гб, яку я хочу скопіювати в локальну. Я не можу SSH від №1 до №3, але я можу SSH до №2, а потім до №3. Також неможливо налаштувати приватне приватне введення ключових даних між №2 та №3, але між клавішами №1 та №2 встановлено ключ.

Зазвичай я використовую комбінацію SSH та смоли для цього:

ssh name@host "tar cf - folder" > folder.tar

Але в цьому випадку знадобиться якесь гніздування, і я не можу це зробити.

Отже, який би був хороший спосіб отримати дані від №3 до №1?

Відповіді:


27

Ви можете створити тунель SSH через machine2, а потім під час іншого сеансу підключитися до тунелю.

Наприклад, відкрийте два сеанси CLI на machine1. На першому сеансі запустіть наступне:

MACHINE1$ ssh -L 2022:MACHINE3:22 <user>@MACHINE2

На другому сеансі запустіть наступне:

MACHINE1 $ ssh -p 2022 <user>@localhost

Що відбувається з першою командою, це локальний порт (2022 на machine1), який тунелюється до порту 22 на machine3, використовуючи ваше SSH-з'єднання з machine2.

За допомогою другої команди ви підключаєтесь до нещодавно відкритого локального порту (2022), і це як би ви підключаєтесь безпосередньо до машини3.

Тепер, якщо ви хочете використовувати ваш типовий процес передачі файлів, ви можете зробити наступне:

ssh -p 2022 <user>@localhost "tar cf - /path/to/remote/directory/" > filename.tar

Крім того, ви можете ознайомитися з rsync і зробити щось подібне замість цього:

rsync -aHSv --progress -e 'ssh -p 2022' <user>@localhost:/path/to/remote/directory/ /path/to/local/directory/

Якщо припустити, що кінцева мета - не отримати тарбол.


2
Використання ProxyCommandта ssh -Wдві sshкоманди можна об'єднати в один командний рядок. Якщо у вас є зовсім недавня версія клієнта OpenSSH, є аргумент, який дозволить вам зробити все це за допомогою однієї sshкоманди.
kasperd

+1 для rsync;)
NieDzejkob

Я використовую дьоготь, оскільки для перенесення великої кількості файлів потрібно більше часу, ніж передача одного великого файлу. Чи вирішує це rsync?
Шейрон

Виконуючи віддалені передачі, rsync перевіряє суми даних під час транзиту (на приймальному кінці, перш ніж записати їх на диск), тому для перенесення файлу знадобиться більше часу. Однак цей час добре провели.
Гена

5

Ви також можете використовувати можливості майстер-сеансу новіших версій SSH. Тут описано:

https://en.wikibooks.org/wiki/OpenSSH/Cookbook/Multiplexing

Напевно, все, що вам потрібно, - це відредагувати / створити ваш .ssh / config. Додайте туди визначення, які керують Майстер-сесіями:

ControlMaster auto
ControlPath ~/.ssh/cm_socket/%r@%h:%p
ControlPersist 4h
ServerAliveInterval 30

Тоді ви можете вказати своє перше визначення хоп-сервера, наприклад:

Host first_hop
Hostname <your first host FQDN or IP>
User <your user>

А другий хоп використовуватиме ваш перший хоп-сервер як проксі:

Host second_hop
Hostname <your second host FQDN or IP>
User <your user>
ProxyCommand ssh -W %h:%p first_hop

Не забудьте створити каталог ~ / .ssh / cm_socket, а дозволи на конфігурацію повинні бути 644.

Тоді ви повинні мати можливість SSH або SCP безпосередньо на / з другого сервера. Тут може бути більше таких серверів.


3
Читаючи ваше посилання, я не вважаю, що мультиплексування / ControlMasterпотрібне для того, щоб перейти до прокси. Більш релевантна сторінка у вікі-книзі - це ця: en.wikibooks.org/wiki/OpenSSH/Cookbook/Proxies_and_Jump_Hosts
IMSoP

Так, я згоден. Існує кілька способів. Однак я вважаю Майстер-сесію найелегантнішою. Йдеться лише про особисті вподобання ;-)
Ярослав Кучера

Хтось із нас щось неправильно зрозумів. Наскільки я бачу, "головне з'єднання" - це ефективне використання мережевих ресурсів, і не має нічого спільного з цим питанням. Це не інший спосіб виконувати це, це просто не має значення для завдання, що знаходиться під рукою.
IMSoP
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.