Всем привет!
Очень часто встает задача, когда на какую-то из машин нужно логинится через промежуточный хост. Такой хост зовется jump хостом.
То есть, схема следующая, мы логинимся на хост: ssh jump.ru, а после этого логинимся на хост ssh target.ru.
Разумеется, когда это приходится делать часто - это крайне надоедает. Как найти выход? Во-первых, сделать авторизацию по ключу на jump хост, чтобы избавить себя от необходимости вводить пароль дважды.
Но можем ли мы прописать тот же публичный ключ и войти по нему на машину target? Нет, не можем, потому что в этом случае нам придется положить свои приватные ключи на потенциально небезопасную машину jump.
Но как же тут быть? Тут нам поможет мега фича ssh под названием ssh-agent!
Суть ее в том, что ssh выдает доступ к приватному ключу посредством безопасного канала прямо от машины target до на нашей клиентской машины!
Для начала, на машину target нужно положить свой публичный ssh ключ.
Но эта фича в Mac OS отключена по умолчанию, включаем:
И правим там вот так:
ssh jump
И смотрим содержимое переменных среды:
А после этого как ни в чем ни бывало заходим на машину target, без запроса пароля - используя ранее одобренный сертификат:
Очень часто встает задача, когда на какую-то из машин нужно логинится через промежуточный хост. Такой хост зовется jump хостом.
То есть, схема следующая, мы логинимся на хост: ssh jump.ru, а после этого логинимся на хост ssh target.ru.
Разумеется, когда это приходится делать часто - это крайне надоедает. Как найти выход? Во-первых, сделать авторизацию по ключу на jump хост, чтобы избавить себя от необходимости вводить пароль дважды.
Но можем ли мы прописать тот же публичный ключ и войти по нему на машину target? Нет, не можем, потому что в этом случае нам придется положить свои приватные ключи на потенциально небезопасную машину jump.
Но как же тут быть? Тут нам поможет мега фича ssh под названием ssh-agent!
Суть ее в том, что ssh выдает доступ к приватному ключу посредством безопасного канала прямо от машины target до на нашей клиентской машины!
Для начала, на машину target нужно положить свой публичный ssh ключ.
Но эта фича в Mac OS отключена по умолчанию, включаем:
sudo vim /etc/ssh/ssh_config
И правим там вот так:
Host *После этого пробуем залогинится на машину jump:
SendEnv LANG LC_*
ForwardAgent yes
ssh jump
И смотрим содержимое переменных среды:
env|grep SSH_AUTH_SOCKЭто означает, что все заработало как нужно - безопасный сокет для обращения к ssh agent с клиентской машины был корректно передан на машину jump.
SSH_AUTH_SOCK=/tmp/ssh-12312asdasdasd/agent.5616
А после этого как ни в чем ни бывало заходим на машину target, без запроса пароля - используя ранее одобренный сертификат:
ssh targetА можно сделать еще круче, объединить логин на jump хост с логином на машину target:
ssh -t -jump "ssh target"Вот так можно сильно упростить себе жизнь! :)
Жесть какая.
ReplyDeleteВот же способ:
Host foo-via-proxy
HostName foo
ProxyCommand ssh proxy netcat %h %p