FastNetMon

Saturday 16 May 2015

Mac OS и упорщение ssh логина к машинам через jump хост

Всем привет!

Очень часто встает задача, когда на какую-то из машин нужно логинится через промежуточный хост. Такой хост зовется 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 *
   SendEnv LANG LC_*
   ForwardAgent yes
После этого пробуем залогинится на машину jump:
ssh jump

И смотрим содержимое переменных среды:
env|grep SSH_AUTH_SOCK
SSH_AUTH_SOCK=/tmp/ssh-12312asdasdasd/agent.5616
Это означает, что все заработало как нужно - безопасный сокет для обращения к ssh agent с клиентской машины был корректно передан на машину jump.

А после этого как ни в чем ни бывало заходим на машину target, без запроса пароля - используя ранее одобренный сертификат:
ssh target
А можно сделать еще круче, объединить логин на jump хост с логином на машину target:
ssh -t -jump "ssh target"
 Вот так можно сильно упростить себе жизнь! :)

1 comment :

  1. Жесть какая.
    Вот же способ:

    Host foo-via-proxy
    HostName foo
    ProxyCommand ssh proxy netcat %h %p

    ReplyDelete

Note: only a member of this blog may post a comment.