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