Назад | Перейти на главную страницу

Получить файлы с сервера в двух шагах

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

  1. Моя машина
  2. Шлюз
  3. Целевая машина

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

Обычно для этого я использую комбинацию SSH и tar:

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

Но в этом случае для этого потребуется какое-то вложение, а я, кажется, не могу этого сделать.

Итак, что было бы хорошим способом получить данные с №3 по №1?

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

Например, откройте два сеанса CLI на машине1. В первом сеансе выполните следующее:

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

Во втором сеансе выполните следующее:

MACHINE1 $ ssh -p 2022 <user>@localhost

Что происходит с первой командой, так это то, что локальный порт (2022 на машине1) туннелируется на порт 22 на машине3, используя ваше SSH-соединение с машиной2.

С помощью второй команды вы подключаетесь к недавно открытому локальному порту (2022), и это похоже на прямое подключение к machine3.

Теперь, если вы хотите использовать обычный процесс передачи файлов, вы можете сделать следующее:

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/

Предполагая, что конечной целью не является получение архива.

Вы также можете использовать возможность главного сеанса более новых версий 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 напрямую к / со второго сервера. Таким образом может быть больше серверов.