Skip to main content

Использование пересылки с SSH-агентом

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

Пересылку с SSH-агентом можно использовать для более удобного развертывания на сервере. Она позволяет использовать локальные ключи SSH, не оставляя ключи (без парольных фраз) на вашем сервере.

Если вы уже настроили ключ SSH для взаимодействия с GitHub, то наверняка знакомы с ssh-agent. Это программа, которая выполняется в фоновом режиме и хранит ключ в памяти, благодаря чему не нужно вводить парольную фразу при каждом использовании ключа. Вы можете разрешить серверам доступ к локальному ssh-agent, как если бы они уже работали на сервере. Это словно попросить друга ввести пароль, чтобы вы могли использовать его компьютер.

Дополнительные сведения о пересылки с SSH-агентом см. в руководстве Стива Фридла.

Настройка пересылки с SSH-агентом

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

Вы можете проверить, работает ли локальный ключ, введя ssh -T git@github.com в терминале:

$ ssh -T git@github.com
# Attempt to SSH in to github
> Hi USERNAME! You've successfully authenticated, but GitHub does not provide
> shell access.

Отличное начало. Давайте настроим SSH, чтобы разрешить пересылку на сервер с использованием агента.

  1. Откройте файл в папке ~/.ssh/config в предпочитаемом текстовом редакторе. Если этот файл не существует, вы можете создать его, введя команду touch ~/.ssh/config в терминале.

  2. Введите в файл следующий текст, заменив example.com доменным именем или IP-адресом сервера:

     Host example.com
       ForwardAgent yes
    

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

Проверка пересылки с SSH-агентом

Чтобы проверить, что пересылка работает с сервером, можете выполнить вход с помощью SSH на сервер и запустить ssh -T git@github.com еще раз. Если все хорошо, появится та же подсказка, что и в локальной среде.

Если вы не уверены, используется ли локальный ключ, можете также проверить переменную SSH_AUTH_SOCK на сервере:

$ echo "$SSH_AUTH_SOCK"
# Print out the SSH_AUTH_SOCK variable
> /tmp/ssh-4hNGMk8AZX/agent.79453

Если переменная не задана, это означает, что пересылка с использованием агента не работает:

$ echo "$SSH_AUTH_SOCK"
# Print out the SSH_AUTH_SOCK variable
> [No output]
$ ssh -T git@github.com
# Try to SSH to github
> Permission denied (publickey).

Устранение неполадок с пересылкой с использованием SSH-агента

Ниже приведены некоторые аспекты, которые следует учитывать при устранении неполадок при пересылке с использованием агента SSH.

Для извлечения кода необходимо использовать URL-адрес SSH.

Пересылка SSH работает только с URL-адресами SSH, а не с URL-адресами HTTP. Проверьте файл на сервере .git/config и убедитесь, что URL-адрес является URL-адресом в стиле SSH, как показано ниже.

[remote "origin"]
  url = git@github.com:YOUR_ACCOUNT/YOUR_PROJECT.git
  fetch = +refs/heads/*:refs/remotes/origin/*

Ключи SSH должны работать локально

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

Система должна разрешать пересылку с использованием SSH-агента

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

$ ssh -v URL
# Connect to the specified URL with verbose debug output
> OpenSSH_8.1p1, LibreSSL 2.7.3
> debug1: Reading configuration data /Users/YOU/.ssh/config
> debug1: Applying options for example.com
> debug1: Reading configuration data /etc/ssh_config
> debug1: Applying options for *
$ exit
# Returns to your local command prompt

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

$ cat /etc/ssh_config
# Print out the /etc/ssh_config file
> Host *
>   SendEnv LANG LC_*
>   ForwardAgent no

В этом примере в файле /etc/ssh_config указывается ForwardAgent no, что является способом блокировки пересылки с использованием агента. После удаления этой строки из файла эта функция должна заработать.

Сервер должен разрешить пересылку с использованием агента SSH для входящих подключениях

Пересылка с использованием агента также может быть заблокирована на сервере. Вы можете проверить, разрешена ли пересылка с использованием агента, подключившись по протоколу SSH к серверу и выполнив sshd_config. Выходные данные этой команды должны указывать на то, что AllowAgentForwarding задано.

Локальный ssh-agent должен работать

На большинстве компьютеров операционная система автоматически запускает ssh-agent. Однако на Windows это необходимо сделать вручную. У нас есть руководство по запуску ssh-agent при открытии Git Bash.

Чтобы убедиться, что ssh-agent работает на вашем компьютере, введите следующую команду в терминале:

$ echo "$SSH_AUTH_SOCK"
# Print out the SSH_AUTH_SOCK variable
> /tmp/launch-kNSlgU/Listeners

Ключ должен быть доступен для ssh-agent

Чтобы убедиться, что ключ виден ssh-agent, выполните следующую команду:

ssh-add -L

Если в выходных данных команды указано, что удостоверение недоступно, добавитье ключ:

ssh-add YOUR-KEY

На macOS ssh-agent "забудет" этот ключ при повторном запуске после перезагрузки, но вы можете импортировать ключи SSH в цепочку ключей с помощью следующей команды:

ssh-add --apple-use-keychain YOUR-KEY