{"meta":{"title":"Использование пересылки с SSH-агентом","intro":"Чтобы упростить развертывание на сервере, вы можете настроить перенаправление агента SSH для безопасного использования локальных ключей SSH.","product":"Проверка подлинности","breadcrumbs":[{"href":"/ru/authentication","title":"Проверка подлинности"},{"href":"/ru/authentication/connecting-to-github-with-ssh","title":"Подключение по SSH"},{"href":"/ru/authentication/connecting-to-github-with-ssh/using-ssh-agent-forwarding","title":"Перенаправление агента SSH"}],"documentType":"article"},"body":"# Использование пересылки с SSH-агентом\n\nЧтобы упростить развертывание на сервере, вы можете настроить перенаправление агента SSH для безопасного использования локальных ключей SSH.\n\nПересылку с SSH-агентом можно использовать для более удобного развертывания на сервере. Она позволяет использовать локальные ключи SSH, не оставляя ключи (без парольных фраз) на вашем сервере.\n\nЕсли вы уже настроили ключ SSH для взаимодействия с GitHub, вы, вероятно, знакомы с `ssh-agent`. Это программа, которая выполняется в фоновом режиме и хранит ключ в памяти, благодаря чему не нужно вводить парольную фразу при каждом использовании ключа. Вы можете разрешить серверам доступ к локальному `ssh-agent`, как если бы они уже работали на сервере. Это словно попросить друга ввести пароль, чтобы вы могли использовать его компьютер.\n\nДополнительные сведения о пересылки с SSH-агентом см. в [руководстве Стива Фридла](http://www.unixwiz.net/techtips/ssh-agent-forwarding.html).\n\n## Настройка пересылки с SSH-агентом\n\nУбедитесь, что ваш собственный ключ SSH настроен и работает. Если вы еще не создали ключ SSH, можете воспользоваться [нашим руководством](/ru/authentication/connecting-to-github-with-ssh).\n\nВы можете проверить, работает ли локальный ключ, введя `ssh -T git@github.com` в терминале:\n\n```shell\n$ ssh -T git@github.com\n# Attempt to SSH in to github\n> Hi USERNAME! You've successfully authenticated, but GitHub does not provide\n> shell access.\n```\n\nОтличное начало. Давайте настроим SSH, чтобы разрешить пересылку на сервер с использованием агента.\n\n1. Откройте файл в папке `~/.ssh/config` в предпочитаемом текстовом редакторе. Если этот файл не существует, вы можете создать его, введя команду `touch ~/.ssh/config` в терминале.\n\n2. Введите в файл следующий текст, заменив `example.com` доменным именем или IP-адресом сервера:\n\n   ```\n    Host example.com\n   ```\n\nForwardAgent yes\n\n> \\[!WARNING]\n> Вы можете заманить использовать подстановочный знак, как `Host *` просто применить этот параметр ко всем подключениям SSH. Это не очень хорошая идея, так как тогда вы будете делиться своими локальными ключами SSH с *каждым* сервером, в который вы входите с помощью SSH. У них не будет прямого доступа к ключам, но они смогут использовать их *от вашего имени* при установке подключения.\n> **Добавляйте только те серверы, которым вы доверяете, и которые планируете использовать с функцией пересылки с использованием агента.**\n\n## Проверка пересылки с SSH-агентом\n\nЧтобы проверить, что пересылка работает с сервером, можете выполнить вход с помощью SSH на сервер и запустить `ssh -T git@github.com` еще раз. Если все хорошо, появится та же подсказка, что и в локальной среде.\n\nЕсли вы не уверены, используется ли локальный ключ, можете также проверить переменную `SSH_AUTH_SOCK` на сервере:\n\n```shell\n$ echo \"$SSH_AUTH_SOCK\"\n# Print out the SSH_AUTH_SOCK variable\n> /tmp/ssh-4hNGMk8AZX/agent.79453\n```\n\nЕсли переменная не задана, это означает, что пересылка с использованием агента не работает:\n\n```shell\n$ echo \"$SSH_AUTH_SOCK\"\n# Print out the SSH_AUTH_SOCK variable\n> [No output]\n$ ssh -T git@github.com\n# Try to SSH to github\n> Permission denied (publickey).\n```\n\n## Устранение неполадок с пересылкой с использованием SSH-агента\n\nНиже приведены некоторые аспекты, которые следует учитывать при устранении неполадок при пересылке с использованием агента SSH.\n\n### Для извлечения кода необходимо использовать URL-адрес SSH.\n\nПересылка SSH работает только с URL-адресами SSH, а не с URL-адресами HTTP. Проверьте файл на сервере `.git/config` и убедитесь, что URL-адрес является URL-адресом в стиле SSH, как показано ниже.\n\n```shell\n[remote \"origin\"]\n  url = git@github.com:YOUR_ACCOUNT/YOUR_PROJECT.git\n  fetch = +refs/heads/*:refs/remotes/origin/*\n```\n\n### Ключи SSH должны работать локально\n\nПрежде чем настраивать пересылку с использованием агента, убедитесь, что ключи работают локально.\n[Наше руководство по созданию ключей SSH](/ru/authentication/connecting-to-github-with-ssh) поможет вам настроить ключи SSH в локальной среде.\n\n### Система должна разрешать пересылку с использованием SSH-агента\n\nВ некоторых случаях конфигурация системы запрещает пересылку с использованием SSH-агента. Чтобы проверить, используется ли файл конфигурации системы, введите следующую команду в терминале:\n\n```shell\n$ ssh -v URL\n# Connect to the specified URL with verbose debug output\n> OpenSSH_8.1p1, LibreSSL 2.7.3\n> debug1: Reading configuration data /Users/YOU/.ssh/config\n> debug1: Applying options for example.com\n> debug1: Reading configuration data /etc/ssh_config\n> debug1: Applying options for *\n$ exit\n# Returns to your local command prompt\n```\n\nВ приведенном выше примере сначала загружается файл `~/.ssh/config`, а затем считывается `/etc/ssh_config`. Мы можем проверить этот файл, чтобы узнать, переопределяет ли он заданные вами параметры, выполнив следующие команды:\n\n```shell\n$ cat /etc/ssh_config\n# Print out the /etc/ssh_config file\n> Host *\n>   SendEnv LANG LC_*\n>   ForwardAgent no\n```\n\nВ этом примере в файле `/etc/ssh_config` указывается `ForwardAgent no`, что является способом блокировки пересылки с использованием агента. После удаления этой строки из файла эта функция должна заработать.\n\n### Сервер должен разрешить пересылку с использованием агента SSH для входящих подключениях\n\nПересылка с использованием агента также может быть заблокирована на сервере. Вы можете проверить, разрешена ли пересылка с использованием агента, подключившись по протоколу SSH к серверу и выполнив `sshd_config`. Выходные данные этой команды должны указывать на то, что `AllowAgentForwarding` задано.\n\n### Локальный `ssh-agent` должен работать\n\nНа большинстве компьютеров операционная система автоматически запускает `ssh-agent`. Однако в Windows это нужно делать вручную. У нас есть [руководство по запуску `ssh-agent` при открытии Git Bash](/ru/authentication/connecting-to-github-with-ssh/working-with-ssh-key-passphrases#auto-launching-ssh-agent-on-git-for-windows).\n\nЧтобы убедиться, что `ssh-agent` работает на вашем компьютере, введите следующую команду в терминале:\n\n```shell\n$ echo \"$SSH_AUTH_SOCK\"\n# Print out the SSH_AUTH_SOCK variable\n> /tmp/launch-kNSlgU/Listeners\n```\n\n### Ключ должен быть доступен для `ssh-agent`\n\nЧтобы убедиться, что ключ виден `ssh-agent`, выполните следующую команду:\n\n```shell\nssh-add -L\n```\n\nЕсли в выходных данных команды указано, что удостоверение недоступно, добавитье ключ:\n\n```shell\nssh-add YOUR-KEY\n```\n\n> \\[!TIP]\n> На macOS `ssh-agent` \"забудет\" этот ключ при повторном запуске после перезагрузки, но вы можете импортировать ключи SSH в цепочку ключей с помощью следующей команды:\n>\n> ```shell\n> ssh-add --apple-use-keychain YOUR-KEY\n> ```\n\n> \\[!NOTE]\n> Параметр `--apple-use-keychain` сохраняет парольную фразу в цепочке ключей при добавлении ключа SSH в агент SSH. Если вы решили не добавлять парольную фразу в ключ, выполните команду без параметра `--apple-use-keychain`.\n>\n> Вариант `--apple-use-keychain` находится в стандартной версии `ssh-add`Apple. В версиях macOS до Монтерей (12.0) `--apple-use-keychain` и `--apple-load-keychain` флаги использовали синтаксис `-K` и `-A`соответственно.\n>\n> Если у вас нет стандартной `ssh-add` версии Apple, может появиться сообщение об ошибке. Дополнительные сведения см. в разделе [Ошибка: ssh-add: недопустимый параметр - apple-use-keychain](/ru/authentication/troubleshooting-ssh/error-ssh-add-illegal-option----apple-use-keychain).\n>\n> Если вы продолжаете запрашивать парольную фразу, может потребоваться добавить команду в `~/.zshrc` файл (или `~/.bashrc` файл для bash).\n\n[tech-tips]: http://www.unixwiz.net/techtips/ssh-agent-forwarding.html\n\n[generating-keys]: /authentication/connecting-to-github-with-ssh\n\n[ssh-passphrases]: /authentication/connecting-to-github-with-ssh/working-with-ssh-key-passphrases\n\n[autolaunch-ssh-agent]: /authentication/connecting-to-github-with-ssh/working-with-ssh-key-passphrases#auto-launching-ssh-agent-on-git-for-windows"}