Вопрос или проблема
Я на машине с Ubuntu. Когда я вхожу в систему обычно с моего рабочего стола, мои SSH данные аутентификации добавляются автоматически, и всё работает корректно.
Однако, когда я работаю удалённо через SSH, в начале при входе мои SSH данные аутентификации не загружаются. По этой причине у меня есть следующий скрипт, который я запускаю вручную, который вызывает ssh-add
, чтобы я мог работать нормально:
#!/bin/bash
[[ "${BASH_SOURCE[0]}" == "${0}" ]] && echo "Вам нужно выполнить этот скрипт!" && exit 1
# На самом деле это не нужно, поскольку у нас есть gnome-keyring-daemon
# killall ssh-agent
# gnome-keyring-daemon
if ! pgrep -f gnome-keyring-daemon; then
echo "Не удалось, пытаемся запустить gnome-keyring"
gnome-keyring-daemon
ssh-add -l
fi
ssh-add ~/.ssh/id_rsa
Однако, по какой-то причине, обычно мне нужно запускать скрипт дважды. В первый раз я обычно получаю сообщение вроде
> . ~/Scripts/loadSSH.sh
2918
Введите пароль для /home/svalorzen/.ssh/id_rsa:
Идентификация добавлена: /home/svalorzen/.ssh/id_rsa (/home/svalorzen/.ssh/id_rsa)
И затем git и другие инструменты работают корректно. Однако, через несколько секунд это перестаёт работать, и мне нужно повторно запустить скрипт, на этот раз с следующим выводом:
> . ~/Scripts/loadSSH.sh
Не удалось, пытаемся запустить gnome-keyring
SSH_AUTH_SOCK=/run/user/1000/keyring/ssh
[... некоторые ключи ...]
Введите пароль для /home/svalorzen/.ssh/id_rsa:
После второго раза мне больше не нужно его запускать снова. В чем причина этого? Нужно ли мне изменить скрипт или настроить что-то по-другому?
Ответ или решение
Почему необходимо дважды вызывать ssh-add по SSH: анализ проблемы
Работа с SSH-ключами на удалённых машинах может вызывать некоторые неудобства, особенно когда многие из нас полагаются на гномовский менеджер ключей (gnome-keyring) для автоматической загрузки этих ключей. Рассмотрим вашу ситуацию более подробно и разберём возможные причины, по которым вам приходится запускать скрипт дважды для успешного добавления SSH-ключей.
1. Инициализация gnome-keyring-daemon
По умолчанию, при локальном входе в систему gnome-keyring-daemon автоматически инициализируется, и ваши SSH-ключи загружаются автоматически из хранилища. Однако, в случае удалённой работы через SSH, этот процесс может не сработать:
- При удалённом подключении gnome-keyring-daemon может не запускаться автоматически, поскольку сессия SSH не создает окружение, необходимое для его корректной работы.
- В вашем скрипте вы проверяете, работает ли gnome-keyring-daemon, и если нет, запускаете его. Однако, если он не был запущен при первой попытке вызова скрипта, вы можете не получить доступ к вашему SSH_AUTH_SOCK (переменной окружения, указывающей на сокет SSH-агента).
2. Проблемы с SSH_AUTH_SOCK
При первом запуске скрипта вы получаете доступ к SSH-агенту, и ключ загружается, но, видимо, токен для доступа к SSH_AUTH_SOCK
не был установлен (или указывает на неправильное место):
- Второй запуск скрипта, после того как вы уже добавили ключ вручную, позволяет создать необходимые переменные окружения, включая корректный
SSH_AUTH_SOCK
, что и позволяет вам использовать ключ повторно без необходимости ввода пароля.
3. Оптимизация скрипта
Ваш текущий скрипт может потребовать некоторой доработки, чтобы избежать двойного вызова:
- Убедитесь, что gnome-keyring-daemon запускается правильно и что переменная SSH_AUTH_SOCK устанавливается как следует.
- После проверки gnome-keyring, добавьте код для вывода текущего значения SSH_AUTH_SOCK, чтобы убедиться, что оно установлено корректно.
Вот улучшенная версия вашего скрипта:
#!/bin/bash
[[ "${BASH_SOURCE[0]}" == "${0}" ]] && echo "You need to source this!" && exit 1
if ! pgrep -f gnome-keyring-daemon; then
echo "Trying to startup gnome-keyring-daemon"
gnome-keyring-daemon --start --components=pkcs11,secrets,ssh
export SSH_AUTH_SOCK
fi
if ! ssh-add -l > /dev/null 2>&1; then
echo "No identities found."
ssh-add ~/.ssh/id_rsa
fi
4. Заключение
Запуск скрипта дважды может указывать на проблемы с инициализацией gnome-keyring-daemon и установкой SSH_AUTH_SOCK
. Обновление скрипта позволит вам автоматически обрабатывать эти случаи. Любые дополнительные изменения, в которые вы решите войти, возможно, могут включать более глубокую проверку состояний и ошибок сессии SSH или использование альтернативных агентов, таких как ssh-agent
для более надёжного управления ключами.
Если возникнут дальнейшие проблемы, рассмотрите возможность изучения логов gnome-keyring и конфигураций SSH. Эти шаги помогут улучшить вашу работу с SSH через удалённый доступ, сделав процесс более плавным и автоматизированным.