Поиск по сайту:

Что такое переадресация агента SSH и как вы ее используете?


Переадресация агента SSH позволяет вам использовать ваш частный локальный ключ SSH удаленно, не беспокоясь о том, что конфиденциальные данные останутся на сервере, с которым вы работаете. Он встроен в ssh, его легко настроить и использовать.

Что такое агент SSH?

Ваш открытый SSH-ключ похож на ваше имя пользователя или личность, и вы можете поделиться им со всеми. Ваш закрытый SSH-ключ похож на пароль и сохраняется локально на вашем компьютере. Но это похоже на хранение ваших паролей на стикере — любой может просмотреть их, если у него есть к ним доступ. Таким образом, в целях безопасности SSH запросит у вас парольную фразу при создании ключей (надеюсь, вы не пропустили этот шаг) и будет использовать эту парольную фразу для шифрования и расшифровки вашего закрытого ключа.

Однако это означает, что вам придется вводить свою парольную фразу каждый раз, когда вам нужно использовать свой закрытый ключ, что будет раздражать. Для этого в большинстве реализаций SSH используется агент, который хранит ваш расшифрованный ключ в памяти. Это означает, что вам нужно будет разблокировать его только один раз, и он будет сохраняться до тех пор, пока вы не перезапустите, что позволит вам безопасно войти на свои серверы без запроса парольной фразы. Конечно, вы должны убедиться, что ваш SSH-сервер заблокирован.

Что такое переадресация агента SSH?

Агент SSH переадресация — это переход на еще один уровень глубже. Например, представьте, что вы подключаетесь к удаленному серверу и хотите git pull некоторый код, который вы храните на Github. Вы хотите использовать SSH-аутентификацию для Github, но не хотите, чтобы ваши закрытые ключи находились на этом удаленном сервере, только на вашем компьютере.

Чтобы решить эту проблему, вы можете открыть свой локальный агент SSH на удаленном сервере, позволяя ему действовать от вашего имени, пока вы подключены. Это не отправляет ваши личные ключи через Интернет, даже если они зашифрованы; он просто позволяет удаленному серверу получить доступ к вашему локальному агенту SSH и подтвердить вашу личность.

Это работает так: вы просите свой удаленный сервер вытащить какой-то код из Github, и Github говорит: «Кто вы?» на сервер. Обычно сервер обращается к своим собственным файлам id_rsa для ответа, но вместо этого он перенаправляет вопрос на ваш локальный компьютер. Ваш локальный компьютер отвечает на вопрос и отправляет ответ (который не включает ваш закрытый ключ) на сервер, который перенаправляет его обратно в Github. Github не волнует, что ваш локальный компьютер ответил на вопрос, он просто видит, что на него ответили, и позволяет вам подключиться.

Как включить переадресацию агента SSH

На Mac и Linux переадресация агента SSH встроена в ssh, а процесс ssh-agent запускается автоматически. Все, что вам нужно сделать, это убедиться, что ваши ключи добавлены в ssh-agent и настроить ssh для использования переадресации.

Добавляем ключи к ssh-агенту

Вы можете использовать утилиту ssh-add, чтобы добавить ключи к вашему локальному агенту. Предполагая, что ваш закрытый ключ хранится в id_rsa, вы можете запустить:

ssh-add ~/.ssh/id_rsa

Вы также можете вставить ключ вручную, а не использовать id_rsa. Убедитесь, что ключ добавлен правильно:

ssh-add -L

Если это так, он должен выплюнуть ваш ключ.

Добавить ключи в macOS

В macOS вместо этого вам нужно будет запустить:

ssh-add -K ~/.ssh/id_rsa

Флаг -K сохранит ключ в цепочке ключей macOS, что необходимо для запоминания ваших ключей при перезагрузке.

Разрешить переадресацию в конфигурации вашего клиента

Откройте файл ~/.ssh/config на локальном компьютере или создайте новый, если он пуст. Мы установим новое правило, чтобы убедиться, что переадресация агента включена для домена этого сервера:

Host example
  ForwardAgent yes

Вы должны заменить example доменным именем или IP-адресом вашего сервера. Вы можете использовать подстановочный знак * для хоста, но тогда вы будете перенаправлять доступ к своим закрытым ключам на каждый сервер, к которому подключаетесь, а это, вероятно, не то, что вам нужно.

В зависимости от вашей операционной системы у вас также могут быть файлы конфигурации SSH в /etc/ssh/ssh_config для macOS или /etc/ssh_config  для Ubuntu. Эти файлы могут переопределять файл конфигурации пользователя в ~/.ssh/config, поэтому убедитесь, что ничего не конфликтует. Строки, начинающиеся с #, закомментированы и не действуют.

Вы также можете вручную включить переадресацию агента для любого домена, используя ssh -A user@host, что позволит обойти все файлы конфигурации. Если вам нужен простой способ переадресации без изменения конфигурации, вы можете добавить alias ssh=\ssh -A\ в настройки bash, но это то же самое, что и использование хоста с подстановочными знаками, поэтому мы не рекомендую его для чего-либо, ориентированного на безопасность.

Тестовая пересылка SSH

Если у вас нет двух серверов под рукой, самый простой способ проверить, работает ли переадресация SSH, — это добавить открытый ключ с локального компьютера в свой профиль на Github и попробовать подключиться по SSH с удаленного сервера:

ssh git@github.com

Если это сработало, вы должны увидеть свое имя пользователя, и вы сможете отправлять и извлекать код из репозитория, даже не помещая закрытые ключи на сервер.

Настройка переадресации SSH для клиентов Windows

Поскольку Windows не является операционной системой Unix, настройка будет зависеть от того, как именно вы запускаете ssh  .

Если вы используете подсистему Linux для Windows, которая позволяет запускать bash в Windows, настройка будет такой же, как в Linux или macOS, поскольку она полностью виртуализирует дистрибутив Linux для запуска командной строки.

Если вы используете Git Bash, настройка такая же, как и в Linux, но вам нужно будет вручную запустить ssh-agent при запуске оболочки, что вы можете сделать с помощью скрипта запуска в .bashrc.

Если вы используете PuTTY, настройка довольно проста. В конфигурации перейдите в «Подключение» > «SSH» > «Аутентификация» и включите «Разрешить переадресацию агента».

Вы также можете добавить свой файл закрытого ключа из той же панели. PuTTY будет обрабатывать агент SSH для вас, поэтому вам не придется возиться с какими-либо файлами конфигурации.

Что делать, если переадресация SSH не работает

Прежде всего убедитесь, что у вас действительно есть SSH-ключи; если нет, вы можете запустить ssh-keygen, который поместит ваш закрытый ключ в ~/.ssh/id_rsa и ваш открытый ключ в ~/ .ssh/id_rsa.pub.

Убедитесь, что ваши ключи SSH правильно работают с обычной аутентификацией, и добавьте их в ssh-agent. Вы можете добавить ключи с помощью ssh-add.

Также должен быть запущен процесс ssh-agent. В macOS и Linux он должен запускаться автоматически, но вы можете убедиться, что он работает с помощью:

echo "$SSH_AUTH_SOCK"

Если все настроено правильно, вы должны увидеть возвращаемый сокет Listeners.

Убедитесь, что ваши файлы конфигурации настроены правильно, чтобы включить ForwardAgent yes, и убедитесь, что никакие другие файлы конфигурации не перезаписывают это поведение. Чтобы проверить, какие файлы конфигурации использует SSH, вы можете запустить ssh в подробном режиме:

ssh -v git@github.com

Который должен отображать, какие файлы конфигурации используются. Файлы, отображаемые позже в этом списке, имеют приоритет над более ранними файлами.

И, конечно же, параметры командной строки переопределяют файлы конфигурации. Если переадресация агента не работает с ssh -A, и ваши ключи правильно настроены в вашем агенте, значит, что-то еще не так, и вам нужно проверить подключение к серверам в цепочке. .