554

Раньше он запоминал парольную фразу, но теперь спрашивает ее каждый раз.

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

ssh-keygen -y -f id_rsa > id_rsa.pub

но это ничего не исправило.

Как я могу заставить macOS снова запомнить мою пароль?

12 ответов12

1074

В последней версии macOS (10.12.2) это легко исправить. Просто отредактируйте ~/.ssh/config и включите опцию UseKeychain :

Host *
    UseKeychain yes

Больше не нужно ничего менять. Теперь все работает так, как раньше, до последних обновлений. Вам не нужно добавлять ключи в ssh-agent .


Редактировать: Вам все равно может понадобиться ввести пароль один раз. Если вы этого не знаете, следуйте этим инструкциям, чтобы раскрыть это.

176

У меня такая же проблема. MacOS Sierra связка ключей продолжает запрашивать пароль. Ваш id_rsa должен быть зашифрован парольной фразой для безопасности. Затем попробуйте добавить его в цепочку ключей ssh-add -K ~/.ssh/id_rsa

Если ваш ключ находится в другой папке, чем ~/.ssh замените его на правильную папку.

Keychain теперь знает ваш ключ ssh и, надеюсь, теперь все работает (мой сделал)

66

Это исправило мою похожую проблему:

/usr/bin/ssh-add -K

Это хранит пароли в вашей цепочке для ключей.

Обновление (спасибо @EasyCo): это работает, но не сохраняется между перезапусками. @ решение Юкки-Суомел на этой странице работает перезапуск. Вы можете найти этот ответ здесь:

https://superuser.com/a/1158050/234685

40

Мне нужно было ввести правильный пароль только один раз, и он начал работать. Проблема заключалась в том, что я не запомнил исходную парольную фразу SSH, но восстановил ее, выполнив следующие действия из Github:

  • В Finder найдите приложение Keychain Access.
  • В Keychain Access найдите SSH.
  • Дважды щелкните запись для вашего ключа SSH, чтобы открыть новое диалоговое окно.
  • Диалог доступа к цепочке для ключей. В левом нижнем углу выберите Показать пароль.
  • Вам будет предложено ввести пароль администратора. Введите его в диалоговом окне "Доступ к связке ключей".
  • Ваш пароль будет раскрыт.
18

Ни одно из вышеперечисленных решений не сработало после установки Sierra поверх El Capitan на новый MacBook Pro. Sierra по своему дизайну не сохраняет ключи SSH в цепочке для ключей.

Два решения работали для меня. Один из них - добавить команду ssh-add -A &> /dev/null в ~ /.bash_profile. Каждый раз, когда вы открываете терминал, эта команда будет выполняться (часть &> /dev/null отправляет вывод команды в файл /dev /null).

Более сложное, но немного более простое решение - создать список с командой, которая выполняется каждый раз при загрузке ОС, как это предлагается в разделе « Сохранение ключей SSH в цепочке ключей MacOS Sierra». Это включает использование Xcode для создания файла.

15

Одним из исправлений является добавление следующего в ваш файл ~/.ssh/config:

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

Взято из: https://www.reddit.com/r/osx/comments/52zn5r/difficulty_with_sshagent_in_macos_sierra/ Также см .: https://apple.stackexchange.com/a/264974/3810

7

Этим утром у меня возникла та же проблема, что и у вас после обновления до Sierra. В моем случае файл id_rsa был зашифрован, и после расшифровки он работал как брелок.

  1. Убедитесь, что ваш файл id_rsa зашифрован с помощью следующей команды: cat ~/.ssh/id_rsa | head -2
  2. Если во второй строке указано Proc-Type: 4,ENCRYPTED , оно зашифровано, и вы можете попробовать расшифровать его.
  3. Важно: сделайте резервную копию вашего исходного файла id_rsa ! Используйте команду cp ~/.ssh/id_rsa ~/.ssh/id_rsa.bak
  4. Расшифруйте свой закрытый ключ с помощью openssl rsa -in ~/.ssh/id_rsa -out ~/.ssh/id_rsa.decrypted
  5. Удалите исходный ключ (rm ~/.ssh/id_rsa) и замените его расшифрованным: mv ~/.ssh/id_rsa.decrypted ~/.ssh/id_rsa

После этих шагов вы сможете снова использовать ssh.

3

Я попробовал несколько ответов здесь, но все еще были проблемы с передачей удаленных ключей (например, при использовании capistrano). Чтобы решить эту проблему, я прочитал technote от apple и сделал этот мой конфигурационный файл. Больше не спрашиваю мой пароль!

https://developer.apple.com/library/content/technotes/tn2449/_index.html

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

Юкка Суомела ответит правильно, но если вы используете openssh установленный из homebrew , то вам также необходимо удалить его с помощью:

brew remove openssh

... чтобы вернуться к системному стандартному openssh, потому что один из homebrew не поддерживает запись конфигурации UseKeychain ssh.

3

У меня также была эта проблема при попытке развернуть некоторый код с помощью Capistrano. Очень расстраивает. Вот два известных мне метода решения этой проблемы.

Способ 1. Добавьте все известные ключи к агенту SSH.

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

ssh-add -A

Теперь это работает, но не будет сохраняться при перезагрузках. Поэтому, если вы не хотите больше беспокоиться об этом, просто откройте файл ~/.bash_profile вашего пользователя, например так:

nano ~/.bash_profile

И добавьте эту строку внизу:

ssh-add -A 2>/dev/null;

Теперь, когда вы открываете новое окно терминала, все должно быть хорошо!

Способ 2. Добавьте к агенту только ключи SSH, которые находятся в цепочке для ключей .

Поэтому, хотя опция ssh-add -A должна работать для большинства базовых случаев, недавно я столкнулся с проблемой, когда у меня было 6-7 Vagrant-боксов (которые используют SSH-ключи / идентификаторы для доступа) на компьютере поверх более распространенного id_rsa.pub на месте.

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

Проблема в том, что ssh-add -A будет просто произвольно добавлять каждый отдельный ключ / идентификатор SSH, который у вас есть, к агенту, даже если в этом нет необходимости; такой как в случае бродячих коробок.

Мое решение после большого тестирования было следующим.

Во-первых, если к вашему агенту добавлено больше ключей / идентификаторов SSH, чем нужно - как показано с помощью ssh-add -l то удалите их все из агента следующим образом:

ssh-add -D

После этого запустите агент SSH в качестве фонового процесса следующим образом:

eval "$(ssh-agent -s)"

Теперь, это становится странным, и я не слишком уверен, почему. В некоторых случаях вы можете специально добавить ключ / идентификатор ~/.ssh/id_rsa.pub к агенту следующим образом:

ssh-add ~/.ssh/id_rsa.pub

Введите свою фразу-пароль, нажмите « Return», и все будет хорошо.

Но в других случаях этого достаточно, чтобы добавить ключ / идентификатор:

ssh-add -K

Если это все сработало, введите ssh-add -l и вы увидите один одиночный ключ / идентификатор SSH.

Все хорошо? Теперь откройте ваш .bash_profile:

nano ~/.bash_profile

И добавьте эту строку внизу; прокомментируйте или удалите версию -A если она у вас есть:

ssh-add -K 2>/dev/null;

Это позволит перезагружать ключ / идентификатор SSH агенту SSH при каждом запуске / перезагрузке.

ОБНОВЛЕНИЕ: Apple теперь добавила параметр UseKeychain параметры конфигурации открытого SSH и считает ssh-add -A решением.

Начиная с macOS Sierra 10.12.2, Apple (я полагаю) добавила параметр конфигурации UseKeychain настроек SSH. Проверка страницы руководства (через man ssh_config) показывает следующую информацию:

UseKeychain
        On macOS, specifies whether the system should search for
        passphrases in the user's keychain when attempting to use a par-
        ticular key. When the passphrase is provided by the user, this
        option also specifies whether the passphrase should be stored
        into the keychain once it has been verified to be correct.  The
        argument must be ``yes'' or ``no''.  The default is ``no''.

Это сводится к тому, что Apple рассматривает решение как добавление ssh-add -A к вашему .bash_profile как описано в этом билете Open Radar, или добавление UseKeychain качестве одного из параметров для пользователя ~/.ssh/config .

1

Вам нужно добавить файл .plist в ~/Library/LaunchAgents/ чтобы запускать ssh-add -A при каждом запуске macOS.

Есть одна команда, которая делает это (из SSH-keys-in-macOS-Sierra-keychain):

curl -o ~/Library/LaunchAgents/ssh.add.a.plist https://raw.githubusercontent.com/jirsbek/SSH-keys-in-macOS-Sierra-keychain/master/ssh.add.a.plist
1

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

У меня сработало добавление следующей строки вверху .ssh/config на локальном и удаленном компьютере.

PubkeyAcceptedKeyTypes=+ssh-dss 

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .