macOS продовжує просити мою парольну фразу ssh з моменту оновлення до Сьєрри


588

Раніше запам’ятовував парольну фразу, але тепер вона щоразу її задає мені.

Я прочитав, що мені потрібно відновити відкритий ключ за допомогою цієї команди, що я зробив:

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

але це нічого не виправило.

Як змусити macOS запам'ятати свою парольну фразу знову?


У мене спостерігається пов’язана поведінка: Раніше з'являлося діалогове вікно ключових дзвінків, щоб запитати пароль, тепер я отримую звичайний запит консолі SSH. Певна реєстрація помічників програми, ймовірно, вже не відбулася.
Daniel B

1
Минуло роки, як я створив id_rsa, і я ніколи не використовував парольну фразу і використовував це для ssh на багатьох серверах. Чи справді я маю на ньому пароль, чи Сьєрра вважає, що мені це треба? Зауважте, що $ cat ~ / .ssh / id_rsa | голова -2 ----- НАЧАЙТЕ КЛЮЧ ДЛЯ РСА ----- Тип набору: 4, ВИДАЛЕНО
Джо Мюррей


Якщо ви використовуєте Pretzo, і жоден з цих відповідей не вирішив вашу проблему: Переконайтеся, що у вас не sshвключений модуль zpretzorc. У macOS це все одно не потрібно, і якщо він включений, він запропонує вам ввести свою парольну фразу навіть після додавання UseKeychain.
Джимофій

1
спробуйте зробити, ssh -v ...щоб побачити, чи є в ній корисна інформація про налагодження ...
rogerdpack

Відповіді:


1128

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

Host *
    UseKeychain yes

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


Редагувати: Вам може знадобитися ввести свою парольну фразу один раз. Якщо ви цього не знаєте, дотримуйтесь цих інструкцій, щоб їх розкрити.


24
Це абсолютно працювало для мене. Все нижче здається складнішим, ніж це виправлення.
Br.Bill

82
Зауважте, Host *блок (майже) завжди повинен розміщуватися внизу вашого ~/.ssh/configфайлу. Коли sshшукає налаштування, він використовує перше знайдене значення. Таким чином, ставлячи підстановку блоку підстановки в кінці, він діє як набір за замовчуванням; ви можете змінити налаштування для конкретних хостів, вказавши їх раніше у файлі.
Моломбі

6
Це працювало і для мене, але мені довелося один раз правильно ввести пароль. Є ще одна відповідь, яка описує, як можна переглянути пароль, якщо ви його не пам’ятаєте.
ФГрег

26
Якщо конфігураційний файл не існує, його також буде працювати.
wynshaft

6
Host *Заголовок вам не потрібен . Просто додайте єдиний рядок UseKeychain yesу верхній частині вашого, .ssh/configякщо ви хочете, щоб це стосувалося всіх хостів.
sj26

185

У мене була така ж проблема. Брелок MacOS Sierra продовжує просити парольну фразу. Для безпеки id_rsa має бути зашифровано парольною фразою. Потім спробуйте додати його до брелкаssh-add -K ~/.ssh/id_rsa

Якщо ваш ключ знаходиться в іншій папці, ~/.sshто замініть його правильною папкою.

Брелок тепер знає ваш ключ ssh і, сподіваємось, зараз все працює (моє)


25
Це працює, але, здається, не зберігається, коли я перезавантажую комп'ютер. Хтось ще має те саме питання?
joshua.paling

1
Так, тут же питання. @ joshua.paling
kingkool68

18
@ joshua.paling, kingkool68 - Apple видалила можливість запам'ятовувати ваші SSH ключі під час перезавантаження, щоб відповідати основній поведінці OpenSSH. Дивіться це запитання щодо інших способів досягнення тієї ж функціональності: apple.stackexchange.com/questions/254468/…
Evan Pon

@EvanPon Але це не працюватиме із зашифрованими ключами, чи не так?
Конрад Рудольф

2
@KonradRudolph це працює для мене. Виклик за ssh-addдопомогою цієї -Aопції буде шукати в брелоку MacOS будь-які паролі для особи, про яку йдеться. Я вірю, що це підкаже, якщо паролі не знаходяться в брелоку.
Еван Пон

73

Це вирішило моє подібне питання:

/usr/bin/ssh-add -K

Це зберігає паролі у вашому брелоку.

Оновлення (спасибі @EasyCo): Це працює, але не зберігається між перезавантаженнями. @ Рішення Юккі-Суомел на цій сторінці дійсно працює перезапуск. Ви можете знайти цю відповідь тут:

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


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. Сьєрра за дизайном не зберігає ключі SSH у брелоку.

На мене працювали два рішення. Перший - додати команду ssh-add -A &> /dev/nullдо ~ / .bash_profile. Кожен раз, коли ви відкриваєте термінал, ця команда буде виконуватися ( &> /dev/nullчастина надсилає висновок команди файл / dev / null).

Більш складним, але трохи плавнішим рішенням є створення списку з командою, яка виконується кожного разу при завантаженні ОС, як це пропонується в Збереження ключів SSH у макетоні Sierra Keychain . Це включає використання Xcode для створення файлу.


Це також є офіційною відповіддю Apple - див. Openradar.appspot.com/27348363
Nick Maynard

Найкраще рішення досі для мене. Я використовую 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/difficffic_with_sshagent_in_macos_sierra/ Дивіться також: https://apple.stackexchange.com/a/264974/3810


Поки що в жодній з відповідей хтось не згадував про Bad configuration option: usekeychainпомилку, яку я отримую з UseKeychain (однак вона використовується з великої літери). Але я був в змозі змусити його працювати, видаляючи тільки цю лінію і залишаючи AddKeysToAgent і IdentityFile (ви все одно повинні ввести ключову фразу в перший раз). Це з macOS Sierra 10.12.6.
Вільям Террелл

це добре працює, коли я перебуваю в терміналі і використовую команду ssh, але інші додатки, наприклад WebStorm, які використовують свій власний термінал, не приймають цю конфігурацію, поки я вперше не використаю команду ssh у звичайному терміналі. то це працює скрізь, якісь пропозиції?
santiago arizti

@WilliamTurrell Якщо це все-таки трапляється, введіть, which sshщоб переконатися, що ви використовуєте, /usr/bin/sshа не версію від Fink або MacPorts, яка буде під чимось на кшталт /usr/local/bin/sshабо/opt/local/bin/ssh
Стефан Ласєскі

7

Сьогодні вранці у мене була та сама проблема, що і у вас після оновлення до Сьєрри. У моєму випадку 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, у чому проблема з цим?
Dag Høidahl

7
@ DagHøidahl Ключ більше не буде шифруватися. Її можна вкрасти за допомогою регулярних прав користувачів, тому шифрування - ДОБРЕ ДОПОВІДНО.
Даніель Б

6
Це вилучає пароль з ключа, і саме тому він працює у вирішенні проблеми ОП. Але я рекомендую проти цього. Пароль - це все, що не дозволяє людям користуватися вашим ключем під час його викрадення. Оскільки ваш ключ, ймовірно, надасть доступ до кількох систем, ви не хочете його ослаблювати.
Martijn Heemels

5

Тут я спробував кілька відповідей, але все ще виникали проблеми з проходженням віддалених клавіш (наприклад, при використанні capistrano). Щоб вирішити це, я прочитав техніку з 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.


3

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

brew remove openssh

... щоб повернутися до системного openssh, тому що homebrew не підтримує UseKeychainзапис ssh config.


1
Якщо хтось хоче цього з домашньою, пінг мені тут: github.com/rdp/homebrew-openssh-gssapi
rogerdpack

1

Я спробував усі запропоновані тут рішення, але у мене на Mac не встановлений брелок.

Додавання до наступного рядка у верхньому .ssh/configфайлі як на локальній, так і на віддаленій машині працювало на мене.

PubkeyAcceptedKeyTypes=+ssh-dss 

1

Для запуску кожного запуску macOS вам потрібен .plistфайл .~/Library/LaunchAgents/ssh-add -A

Є одна команда, яка робить це (із SSH-ключів-в-macOS-Сьєрра-брелок ), яка:

curl -o ~/Library/LaunchAgents/ssh.add.a.plist https://raw.githubusercontent.com/jirsbek/SSH-keys-in-macOS-Sierra-keychain/master/ssh.add.a.plist
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.