ssh-add не сохраняется между перезагрузками

150

Я добавил ключ ssh к агенту:

$ ssh-add ~/.ssh/id_rsa_mac
Identity added: /Users/alex/.ssh/id_rsa_mac (/Users/alex/.ssh/id_rsa_mac)

После перезагрузки агент больше не добавляет этот ключ:

$ ssh-add -l
The agent has no identities.

Почему это случилось?

ア レ ッ ク ス
источник
У меня нет времени, чтобы ответить полностью прямо сейчас, но gpg-agent в режиме ssh сделает то, что вы хотите. Попробуйте это вместо устаревшего ssh-agent. Если это поможет, я мог бы попытаться расширить это, когда у меня будет время позже.
Vality
@Vality: я сомневаюсь, что gpg-agent будет постоянным после перезагрузок.
Павел Шимерда
@ PavelŠimerda Зашифровывает закрытые ключи с помощью пароля пользователя, а затем помещает их, $HOME/.gnupg/private-keys-v1.dкак только вы добавите их с помощью ssh-add. Это действительно настойчиво. Хорошо, если у вас есть энергонезависимый домашний каталог.
Vality
@Vality: Разве это не должно рассматриваться как проблема безопасности? Не могли бы вы с таким же успехом использовать ключ без ключевой фразы и покончить с этим без необходимости какого-либо агента?
Павел Шимерда
1
@ PavelŠimerda На самом деле это не проблема безопасности, так как ключ хранится в зашифрованном виде с помощью пароля пользователя, ему все еще нужен пароль, который вводится каждый раз при входе пользователя в систему для его расшифровки. Хранение ключа в незашифрованном виде означает, что пользователь с правами root (или вор, который забрал ваш жесткий диск) может украсть их из вашего домашнего каталога, а с помощью gnupg они украдут их, они будут зашифрованы вашим паролем и, следовательно, бесполезны.
Vality

Ответы:

174

Добавление ключей к агенту является временным. Они действуют только до тех пор, пока агент работает. Если вы убьете его или перезагрузите компьютер, они будут потеряны, пока вы не добавите их снова. Со ssh-agentстраницы руководства :

ssh-agent - это программа для хранения закрытых ключей, используемая для аутентификации с открытым ключом (RSA, DSA, ECDSA). Идея состоит в том, что ssh-agent запускается в начале сеанса X или сеанса входа в систему, а все другие окна или программы запускаются как клиенты для программы ssh-agent. Благодаря использованию переменных среды агент может быть найден и автоматически использован для аутентификации при входе на другие машины с использованием ssh (1).

Агент изначально не имеет закрытых ключей. Ключи добавляются с помощью ssh-add (1). При выполнении без аргументов, SSH-добавить (1) добавляет файлы ~/.ssh/id_rsa, ~/.ssh/id_dsa, ~/.ssh/id_ecdsaи ~/.ssh/identity. Если у удостоверения есть фраза-пароль, ssh-add (1) запрашивает фразу-пароль на терминале, если он имеет одну или небольшую программу X11, если она работает под X11. Если ни один из этих случаев не подходит, проверка подлинности не будет выполнена. Затем он отправляет личность агенту. Несколько идентификаторов могут храниться в агенте; агент может автоматически использовать любую из этих идентичностей. ssh-add -lотображает личность, которая в данный момент хранится у агента.

macOS Сьерра

Начиная с macOS Sierra 10.12.2 , Apple добавила параметр конфигурации UseKeychain для настроек SSH. Вы можете активировать эту функцию, добавив UseKeychain yesв свой ~/.ssh/config.

Host *
  UseKeychain yes

OSX Keychain

Я не использую OSX, но нашел этот вопрос и ответы на SuperUser под названием: Как использовать Mac OS X Keychain с ключами SSH? ,

Я понимаю, что, поскольку Mac OS X Leopard связка ключей поддерживает хранение ключей SSH. Может кто-нибудь объяснить, как эта функция должна работать.

Итак, по звуку вы можете импортировать ваши ключи SSH в связку ключей, используя эту команду:

$ ssh-add -K [path/to/private SSH key]

Ваши ключи должны сохраняться от загрузки к загрузке.

Всякий раз, когда вы перезагружаете свой Mac, все ключи SSH в вашей цепочке для ключей будут автоматически загружены. Вы должны увидеть ключи в приложении Keychain Access, а также из командной строки:

  ssh-add -l

Источник: Super User - Как использовать Mac OS X Keychain с ключами SSH?

SLM
источник
действительно? В Linux у меня нет этой проблемы. Должен ли я "ssh-add my_key" каждый раз перезагружать компьютер?
ス レ ッ ク ス
2
@Alex Как ответ объясняет, агент автоматически добавляет ~/.ssh/id_rsa. Я предполагаю, что это местоположение вашего ключевого файла в Linux. Также возможно, что вы не используете стандартный агент ключей ssh. Есть и другие, такие как gnome-keyring-daemon, которые могут иметь другое поведение.
Патрик
но на Mac это называется "id_rsa_mac". Как заставить агента добавить его автоматически?
ス レ ッ ク ス
@ Патрик: Я не уверен, ssh-agentдобавляет ли классик какие-либо ключи автоматически. По моему мнению, это то, ssh-addчто читает стандартные местоположения, или sshклиент, если вы не используете агент.
Павел Шимерда
5
Небольшое примечание: если ваша команда ssh-add не распознает флаг -K, вы, вероятно, используете версию ssh-add для macports ... вы можете обойти версию macports, указав полный путь к OSX-версии ssh-add. как это:/usr/bin/ssh-add -K /path/to/private/key
ChrisR
20

ssh-agentЯвляется службой сеанса , который хранит ключи временно для пользователя.

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

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

Стандартные местоположения перечислены на странице руководства ssh(1):

По умолчанию используется ~ / .ssh / identity для версии протокола 1 и ~ / .ssh / id_dsa, ~ / .ssh / id_ecdsa, ~ / .ssh / id_ed25519 и ~ / .ssh / id_rsa для версии протокола 2.

При использовании нестандартных расположений вы можете использовать -iпереключатель, sshописанный на той же странице руководства, или соответствующую опцию в используемом SSH-клиенте.

Павел Шимерда
источник
4
+1 за пропаганду неиспользованияssh-agent
dg99
7

В Сьерре :

Используйте UseKeychain . (Я не пробовал это, но это звучит как самое правильное решение.)

Или же

ssh-add -K /your/key
echo ssh-add -A | cat >> ~/.bash_profile

Или создайте файл plist вместо добавления к ~/.bash_profile.

Отказ от ответственности: как уже отмечали другие, я не знаю, насколько безопасно хранить ssh пароли в цепочке для ключей.

Дэвид Винецки
источник
Я перепробовал все методы выше, но только этот работает. Спасибо!
Duannx