Вопрос или проблема
Я купил новый ноутбук с Ubuntu 22.04 и мне нужно было настроить SSH для работы с репозиториями GitLab. Я следовал инструкциям по генерации SSH ключей из документации и использовал ED25519.
Как я и сказал, я выполнил шаги и добавил ключ в свой аккаунт GitLab. Теперь, каждый раз, когда я пытаюсь клонировать репозиторий или выполнять git push
или git pull
, я получаю эту ошибку:
sign_and_send_pubkey: signing failed for ED25519 "/home/abar/.ssh/id_ed25519" from agent: agent refused operation
[email protected]: Permission denied (publickey)
Примечание: попытка подключиться по SSH к удаленному серверу приводит к той же ошибке, это не связано с GitLab.
Запуская эти команды (из документации GitLab), я могу подключиться к GitLab в открытой сессии терминала, но при открытии новой сессии этого не происходит, и мне нужно снова выполнять эти команды.
eval $(ssh-agent -s)
ssh-add <путь к приватному SSH ключу>
Документация также предлагает добавить в ~/.ssh/config
следующие строки (это не работает)
Host gitlab.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/gitlab_com_rsa
Я спросил у ChatGPT об этом, и он предложил две вещи:
-
Выполнить
ssh-add -l
, чтобы проверить, существует ли мой ключ. Хорошо, он возвращает значение. Также он предлагает выполнить eval и добавить ключ с помощью ssh-add. -
Добавить eval и ssh-add в файл
.zshrc
. Это не очень удобно, так как каждый раз нужно вводить пароль…
Еще одна вещь, которую я проверил, это содержимое $SSH_AUTH_SOCK
, и оно возвращает /run/user/1002/keyring/ssh
.
На старом ноутбуке я использовал Ubuntu 22.04, и у меня не было этих проблем, я проверил разрешения, конфигурационные файлы, и они одинаковые.
Я не знаю, что делать, чтобы решить эту проблему.
Хорошо, я не знаю точно как, но я прочитал документацию с GitHub, чтобы сравнить её с GitLab, и шаги для добавления и конфигурации SSH ключа.
Шаги одинаковые, но я заметил, что GitHub добавляет эти строки в файл config
для github.com
.
AddKeysToAgent yes
UseKeychain yes
Я решил попробовать и добавил AddKeysToAgent yes
. Я закрыл терминал, и теперь каждый проект, клонированный из GitLab, работает, и мне не нужно каждый раз запускать агент SSH и добавлять мой ключ.
Ответ или решение
Решение проблемы с хранением SSH-ключей в Ubuntu 22.04
Введение
Недавнее приобретение нового ноутбука с Ubuntu 22.04 и настройка SSH для работы с репозиториями GitLab могут привести к различным сложностям, особенно если предыдущий опыт использования Ubuntu был более беспроблемным. В данной статье мы рассмотрим, как правильно настроить SSH-ключи и устранить проблему, связанную с тем, что SSH-ключи не сохраняются между сессиями.
Проблема
Вы столкнулись с ошибкой sign_and_send_pubkey: signing failed for ED25519 "/home/abar/.ssh/id_ed25519" from agent: agent refused operation
, когда пытались выполнить клонирование репозитория или подключение к удаленному серверу через SSH. Проблема заключается в том, что SSH-агент не сохраняет ваш ключ для автоматического использования в новых сессиях терминала.
Шаги по решению проблемы
-
Проверка ключа в SSH-агенте
Запустите команду:ssh-add -l
Если ваш ключ отображается, это означает, что он загружен в SSH-агент. Если нет, выполните команды:
eval $(ssh-agent -s) ssh-add ~/.ssh/id_ed25519
-
Добавление в конфигурационный файл SSH
Расширьте ваш~/.ssh/config
, добавив следующие строки, что позволит вашему SSH-агенту автоматически добавлять ключ при его использовании:Host gitlab.com PreferredAuthentications publickey IdentityFile ~/.ssh/id_ed25519 AddKeysToAgent yes UseKeychain yes
Это обеспечит автоматическую загрузку ключа в SSH-агент при каждом новом подключении.
-
Настройка
zsh
Вы можете добавить команды для инициализации SSH-агента в файл конфигурации вашего терминала, например, в~/.zshrc
(или~/.bashrc
, если используете bash):eval $(ssh-agent -s) ssh-add ~/.ssh/id_ed25519
Однако если это приводит к постоянному вводу пароля, лучше использовать
AddKeysToAgent yes
, чтобы избежать этого. -
Проверка переменной окружения
Убедитесь, что переменная$SSH_AUTH_SOCK
устанавливается правильно:echo $SSH_AUTH_SOCK
Если путь указывает на
keyring
, это может повлечь за собой дополнительные шаги по устранению неполадок. Обычно, если используетсяgnome-keyring
, это может конфликтовать с SSH-агентом.
Заключение
С помощью предложенных шагов вы сможете успешно настроить SSH на вашем ноутбуке с Ubuntu 22.04, избегая определения ключа в каждой новой сессии. Настройки AddKeysToAgent yes
и UseKeychain yes
значительно упростят процесс и обеспечат более надежное управление ключами. Следуя представленным рекомендациям, вы сможете легко взаимодействовать с вашими репозиториями на GitLab и другими SSH-ресурсами без дополнительных затруднений.
Если после выполнения всех шагов проблема сохраняется, рассмотрите возможность диагностики конфигураций SSH или установку альтернативного SSH-клиента для дополнительной проверки.