Как я могу добавить свой закрытый ключ SSH в Keychain, чтобы он был автоматически доступен для ssh?

421

Кажется, что ssh-add -K ~/.ssh/id_rsaзагрузит ваш ключ, но будет запрашивать пароль при каждой перезагрузке.

Я ищу решение, которое бы не требовало от меня повторного ввода пароля между логинами.

Сорин
источник
1
Не могли бы вы рассказать немного больше о том, когда появится запрос пароля? Я спрашиваю, потому что у меня есть ssh-ключ для удаленного сервера, который, я уверяю вас, не совпадает с моим паролем для входа в Mac или чем-то еще, и мне не приходилось вводить пароль для ssh-ключа в течение многих лет . Я могу просто открыть терминал, набрать «ssh <server>», и я там. Я думаю, что сначала установил этот ключ под OSX 10.5. id_dsa, но я не думаю, что это должно иметь значение.
Майкл Х.
У моего id_rsaключа есть пароль.
Сорин
У меня также есть проблема, что я решил это так давно, что не могу точно вспомнить, что я сделал. Но я думаю, что идея состоит не в том, чтобы бежать ssh-add, а просто бежать sshнапрямую. Вы должны получить всплывающее окно с парольной фразой для ключа и с флажком, который позволит вам сохранить его в цепочке для ключей.
Харальд Ханче-Олсен
1
@ Сорин - мой тоже! Я должен был войти в него один раз, давным-давно, и Mac сохранил его для меня с тех пор. Надеюсь, совет Харальда поможет.
Майкл Х.
Вы имеете в виду пароль брелка (то есть пароль для входа в систему) или пароль? Если это последнее, ваши пароли обязательно хранятся в связке ключей? Вы можете проверить это, открыв Keychain Access и ища его в связке ключей входа.
Мэтью Холл

Ответы:

689

В OSX собственный ssh-addклиент имеет специальный аргумент для сохранения ключевой фразы секретного ключа в цепочке ключей OSX, что означает, что ваш обычный логин разблокирует его для использования с ssh. В OSX Sierra и более поздних версиях вам также необходимо настроить SSH, чтобы всегда использовать цепочку для ключей (см. Шаг 2 ниже).

В качестве альтернативы вы можете использовать ключ без ключевой фразы, но если вы предпочитаете безопасность, это, безусловно, приемлемо с этим рабочим процессом.

Шаг 1 - Храните ключ в связке ключей

Просто сделайте это один раз:

ssh-add -K ~/.ssh/[your-private-key]

Введите ключевую фразу-пароль, и вас больше не попросят.

(Если вы используете версию OSX, предшествующую Sierra, то все готово, шаг 2 не требуется.)

Шаг 2 - Настройте SSH, чтобы всегда использовать цепочку для ключей

Похоже, что OSX Sierra убрала удобное поведение сохранения ключей между логинами, и обновление по ssh больше не использует цепочку для ключей по умолчанию. По этой причине вам будет предложено ввести ключевую фразу для ключа после обновления и снова после каждого перезапуска.

Решение довольно простое и описано в этом комментарии к ветке github . Вот как вы это настроили:

  1. Убедитесь, что вы выполнили шаг 1 выше, чтобы сохранить ключ в цепочке для ключей.

  2. Если вы еще этого не сделали, создайте ~/.ssh/configфайл. Другими словами, в .sshкаталоге в вашем домашнем каталоге создайте файл с именем config.

  3. В этом .ssh/configфайле добавьте следующие строки:

    Host *
      UseKeychain yes
      AddKeysToAgent yes
      IdentityFile ~/.ssh/id_rsa
    

    Измените ~/.ssh/id_rsaфактическое имя файла вашего личного ключа. Если у вас есть другие закрытые ключи в вашем ~.sshкаталоге, также добавьте IdentityFileстроку для каждого из них. Например, у меня есть одна дополнительная строка IdentityFile ~/.ssh/id_ed25519для второго секретного ключа.

    Это UseKeychain yesключевая часть, которая говорит SSH искать в вашей цепочке ключей OSX ключевую фразу.

  4. Это оно! В следующий раз, когда вы загрузите любое ssh-соединение, он попробует указанные вами закрытые ключи и будет искать их парольную фразу в цепочке ключей OSX. Не требуется ввод пароля.

trisweb
источник
2
Это почти сработало для меня. У моей цепочки для ключей входа в систему уже была отключена автоматическая блокировка, поэтому ответ Мэтью Санабриа не применялся. Используя ssh-add -K ...добавленные ключи к агенту ssh без запроса пароля, но только для текущего сеанса. После перезагрузки мне пришлось переиздать команду.
Пулсбо
4
@Poulsbo & @Abram - посмотрите мое обновление, Sierra изменила автоматическое поведение, и теперь вам нужно запустить его ssh-add -Aвручную, чтобы загрузить сохраненную цепочку ключей. Некоторые возможные решения упомянуты выше.
trisweb
3
@trisweb Спасибо за совет. Решение joshbuchea по изменению .ssh/configфайла выглядит многообещающе! См github.com/lionheart/openradar-mirror/issues/...
Poulsbo
2
@sorin посмотрите обновленный ответ и дайте мне знать, если у вас есть какие-либо отзывы. Спасибо!
trisweb
9
Работает отлично! В моем случае мне нужно было использовать Aфлаг в дополнение к флагу, Kчтобы добавить мои ключи в цепочку для ключей и зарегистрировать в нем кодовую фразу ( ssh-add -AK ~/.ssh/[your-private-key]). Спасибо!
youssman
22

У меня была похожая проблема: меня КАЖДЫЙ РАЗ спрашивали о моей парольной фразе-ключе.

Согласно предложению пользователя "trisweb" выше, я включил эти параметры в ~ / .ssh / config:

Host *
  UseKeychain yes
  AddKeysToAgent yes
  IdentityFile ~/.ssh/id_rsa

НО это все еще подсказывало каждый раз, когда я хотел использовать ssh.

В конце концов я включил "ssh -v" и нашел следующую строку отладки:

debug1: key_load_private: неверная фраза-пароль для расшифровки закрытого ключа

Затем я открыл свою цепочку для ключей в «Keychain Access.app», нашел ключ с именем «SSH: /Users/username/.ssh/id_rsa» и открыл его.

Я нажал «Показать пароль», чтобы раскрыть пароль, и действительно обнаружил, что парольная фраза в связке ключей была старой парольной фразой.

Я обновил ключевую фразу в Keychain Access, и теперь работает без пароля.

Я мог бы также обновить фразу-пароль с помощью этой фразы:

ssh-keygen -p -f ~ / .ssh / id_rsa

user2688272
источник
13

Каждый раз вам предлагается ввести пароль, потому что ваша цепочка для ключей входа в систему блокируется после неактивности и / или сна или, в вашем случае, перезагрузки. Есть два способа решить это для вас.

  1. Измените настройки вашей цепочки для ключей входа в систему. Предполагая, что ваш ключ ssh хранится в цепочке для ключей входа в систему.

    • Открытый доступ к брелку
    • Выделите брелок «Логин»
    • Щелкните правой кнопкой мыши или выберите опцию «Логин» брелок
    • Снимите флажки «Блокировать через X минут бездействия» и «Блокировать во время сна».
  2. Создайте другой ключ SSH без использования ключевой фразы.

    • Откройте Терминал.
    • Введите команду: ssh-keygen -t rsa -b 4096 -C <comment> -f <.ssh/id_rsa>
    • -t для типа, -b это размер ключа, -C это комментарий, -f выходной файл (сначала нужно создать каталоги)
    • Не устанавливайте парольную фразу.
    • Импортируйте ключ SSH в связку ключей входа ssh-add -K <path to ssh key>

Вам больше не нужно запрашивать пароль для связки ключей.

Мэтью Санабриа
источник
2
Обратите внимание, что при вызове ssh-addизнутри SSH, security unlock-keychainсначала должен быть вызван. Кроме того, мне не нужно было создавать каталоги для -fпараметра. К сожалению, мне все еще приходилось вызывать security unlocl-keychainсеансы SSH, чтобы получить доступ к связке ключей входа в систему, которая запрашивает пароль каждый раз ...
Охад Шнайдер,
2
Весь смысл в том, чтобы иметь ключевую фразу на ключе. Я сомневаюсь, что создание нового ключа SSH полезно для вопроса.
Серый,
7

Кроме того, в macOS Sierra и HighSierra (не знаю о предыдущих версиях), запуск ssh-add -Aзаставит агента загружать все ключи, парольные фразы которых хранятся в связке ключей ... Очень удобно

JJarava
источник
7

Для всех, где вышеперечисленное не сработало, похоже, моя проблема была в том, что я дублировал UseKeychain yes& AddKeysToAgent yesво всех профилях / сочетаниях клавиш ssh. Я обновил свой ~/.ssh/configфайл, чтобы объявить их только один раз, и теперь все они загружаются при входе в систему без запроса паролей при запуске, например:

Host *
  UseKeychain yes
  AddKeysToAgent yes
  IdentityFile ~/.ssh/foo
  IdentityFile ~/.ssh/bar

Host foo
  HostName foo.com
  User fooUser
  IdentityFile ~/.ssh/foo

Host bar
  HostName bar.com
  User barUser
  IdentityFile ~/.ssh/bar
безволия
источник
-3

Добавьте открытый ключ в:

.ssh/known_hosts

Открытый ключ обычно находится на:

/home/user/.ssh/id_rsa.pub

надеюсь, это поможет

lluisi
источник
8
Я думаю, что означаетauthorized_keys
Рене Ларсен
Во всяком случае, это не работает, если у вас есть более одного ключа!
сорин