Наша цель быстро и удобно иметь доступ до конечных узлов используя ssh, а также до узлов, которые находятся за так называемым «BASTION» хостом.
Что для этого надо?
Создаем файлик в ~/.ssh/config следующего вида (ссыли естественно чисто примерные)
Host vm-1
Hostname <ip_address>
User <ssh_user_name>
Port <ssh_port>
Host bastion
Hostname <ip_address>
User <ssh_user_name>
Port <ssh_port>
IdentityFile <path/to/ssh/private_key
Host vm-2
Hostname <ip_address>
User <ssh_user_name>
Port <ssh_port>
ProxyCommand ssh -W %h:%p bastion
Разберем что тут происходит.
vm-1 — это алиас по которому мы введя ssh vm-1 сразу постучимся на IP это машины из под нужного юзера и порта.
Предполагается, что эта ВМ доступна с нашего ПК напрямую и нам нужно просто удобное имя для подключения. Никто не мешает добавить секцию IdentityFile и ходить по ssh ключам.
bastion — тот самый «бастион||джам||как_только_не_называют» хост.
Это точка входа. Все остальные ВМ находятся за этим хостом и мы не имеем к ним прямого досутпа, только через ssh bastion -> ssh vm.
Но это не удобно, вводить ssh два раза, поэтому мы можем использовать ssh-agent, который пробрасывает ssh ключи на удаленный хост (бастион) и с ними потом с этого самого бастион хоста может идти на целевые ВМ.
Посмотреть кстати, что там у нас уже есть в агенте можно через команду
ssh-add -l
А добавить новые ключи
ssh-add /path/to/private_key
vm-2 — собственно узел, за «бастион» хостом, который не доступен нам напрямую, но на который мы можем ходить через один «хоп» используя в конфиге команду ProxyCommand ssh -W %h:%p bastion Именно она прокинет ssh ключ в агента, о котором мы говорили выше.