Необходимо использовать ssh-add дважды при подключении по SSH.

Вопрос или проблема

Я на машине с 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 через удалённый доступ, сделав процесс более плавным и автоматизированным.

Оцените материал
Добавить комментарий

Капча загружается...