macOS продолжает спрашивать мою парольную фразу ssh с тех пор, как я обновился до Sierra

588

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

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

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

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

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

Эрвана
источник
Я испытываю похожее поведение: раньше диалоговое окно для ключей вызывало запрос пароля, теперь я просто получаю обычную консольную подсказку SSH. Регистрация некоторых вспомогательных программ, вероятно, прошла.
Даниэль Б.
1
Прошло много лет с тех пор, как я создал свой id_rsa, и я никогда не использовал парольную фразу и использовал ее для ssh на многих серверах. У меня действительно есть пароль или просто Сьерра считает, что я должен? Обратите внимание, что $ cat ~ / .ssh / id_rsa | голова -2 ----- НАЧАТЬ RSA ЧАСТНЫЙ КЛЮЧ ----- Тип Proc: 4, ЗАКРЫТЫЙ
Джо Мюррей
Если вы используете Pretzo и ни один из этих ответов не решил вашу проблему: убедитесь, что у вас не sshвключен модуль zpretzorc. В любом случае, в macOS это не нужно, и, если оно включено, оно будет запрашивать вашу пароль даже после добавления UseKeychain.
Джимоти
1
попробуйте сделать, ssh -v ...чтобы увидеть, есть ли у него полезная информация отладки ...
rogerdpack

Ответы:

1129

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

Host *
    UseKeychain yes

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


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

Юкка Суомела
источник
24
Это абсолютно сработало для меня. Все ниже кажется более сложным, чем это исправить.
Br.Bill
82
Обратите внимание, Host *блок должен (почти) всегда располагаться внизу вашего ~/.ssh/configфайла. Когда sshищет настройки, он использует первое найденное значение. Таким образом, помещая блок подстановки в конце, он действует как набор значений по умолчанию; Вы можете переопределить настройки для определенных хостов, указав их ранее в файле.
Моломби
6
Это сработало и для меня, но мне нужно было один раз правильно ввести пароль. Существует другой ответ, который описывает, как вы можете просмотреть пароль, если вы его не помните.
FGreg
26
Если файл конфигурации не существует, его создание и добавление также будут работать.
wynshaft
6
Вам не нужен Host *заголовок. Просто добавьте одну строку UseKeychain yesвверху, .ssh/configесли вы хотите, чтобы это применялось ко всем хостам.
sj26
185

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

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

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

Ларс Г.
источник
25
Это работает, но, кажется, не сохраняется при перезагрузке компьютера. У кого-то еще есть такая же проблема?
joshua.paling
1
Да, та же проблема здесь. @ joshua.paling
kingkool68
18
@ joshua.paling, kingkool68 - Apple удалила возможность запоминать ваши ключи SSH при перезагрузке, чтобы соответствовать общепринятому поведению OpenSSH. Посмотрите этот вопрос, чтобы узнать о других способах достижения той же функциональности: apple.stackexchange.com/questions/254468/…
Эван Пон
@EvanPon Но это не будет работать с зашифрованными ключами, не так ли?
Конрад Рудольф
2
@KonradRudolph это работает для меня. Вызов ssh-addс этой -Aопцией будет искать в цепочке ключей MacOS любые пароли для рассматриваемых идентификаторов. Я полагаю, это подскажет вам, если пароли не находятся в цепочке для ключей.
Эван Пон
73

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

/usr/bin/ssh-add -K

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

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

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

critikaster
источник
3
Это единственное, что работает.
cryptic0
5
Мне не нужно было создавать .ssh / .config при использовании этого решения.
Шай
Это сработало для меня. Нет необходимости редактировать файл хоста. Я на Сьерре.
cchiera
Это работало для меня на Mac OS Sierra.
Дайрон Галлардо
2
Как указывалось ранее, это работает, но не сохраняется между перезапусками. Решение @ jukka-suomela работает через перезапуски.
EasyCo
40

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

  • В Finder найдите приложение Keychain Access.
  • В Keychain Access найдите SSH.
  • Дважды щелкните запись для вашего ключа SSH, чтобы открыть новое диалоговое окно.
  • Диалог доступа к цепочке для ключей. В левом нижнем углу выберите Показать пароль.
  • Вам будет предложено ввести пароль администратора. Введите его в диалоговом окне «Доступ к связке ключей».
  • Ваш пароль будет раскрыт.
Олли Яаккола
источник
2
Не работает Терминал по-прежнему говорит «плохой пароль»
Джейден Лоусон
18

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

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

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

Хэнк Сноу
источник
Похоже, это и официальный ответ Apple - см. Openradar.appspot.com/27348363
Ник Мейнард,
Лучшее решение до сих пор для меня. Я использую Mac OSX Sierra (10.12.2).
Zyc
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

ThomasW
источник
До сих пор ни в одном из ответов никто не упоминал об Bad configuration option: usekeychainошибке, которую я получаю с UseKeychain (однако она написана с большой буквы). Но я был в состоянии заставить его работать, удаляя только эту линию и оставляя AddKeysToAgent и IdentityFile (вы все равно должны ввести ключевую фразу в первый раз). Это с macOS Sierra 10.12.6.
Уильям
это работает нормально, когда я нахожусь в терминале и использую команду ssh, но другие приложения, такие как WebStorm, которые используют свой собственный терминал, не принимают эту конфигурацию, пока я сначала не использую команду ssh в обычном терминале. тогда работает везде, есть предложения?
Сантьяго Аристи
@WilliamTurrell Если это все еще происходит, напечатайте, which sshчтобы убедиться, что вы используете, /usr/bin/sshа не версию от Fink или MacPorts, которая будет находиться под чем-то вроде /usr/local/bin/sshили/opt/local/bin/ssh
Stefan Lasiewski
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.

Мартейн Питерс
источник
4
Хотя это своего рода обходной путь, я не думаю, что это действительно решает проблему ОП.
Даниэль Б.
Это работает для меня. @ DanielB, в чем проблема с этим?
Даг Хёйдал
7
@ DagHøidahl Ключ больше не будет зашифрован. Он может быть украден с правами обычного пользователя, поэтому шифрование является сильным ДОЛЖНО.
Даниэль Б
6
Это удаляет пароль из ключа, поэтому работает вокруг проблемы ОП. Но я рекомендую против этого. Пароль - это все, что мешает людям использовать ваш ключ, когда он украден. Поскольку ваш ключ, вероятно, даст доступ к нескольким системам, вы не хотите его ослаблять.
Мартейн Химельс
5

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

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

Host *  
   IdentityFile ~/.ssh/id_rsa  
   IgnoreUnknown UseKeychain  
   UseKeychain yes  
   AddKeysToAgent yes
Компьютерщик Богиня
источник
4

У меня также была эта проблема при попытке развернуть некоторый код с помощью 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.

JakeGould
источник
3

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

brew remove openssh

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

Грег Дубицки
источник
1
Если кто-то хочет это с домашним
пивом,
1

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

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

PubkeyAcceptedKeyTypes=+ssh-dss 
Рой Бар Авив
источник
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
AlecRust
источник