Як я можу назавжди додати свій приватний ключ SSH до брелка, щоб він автоматично був доступний для ssh?


414

Здається, ssh-add -K ~/.ssh/id_rsaвін завантажить ваш ключ, але запитуватиме пароль щоразу при перезавантаженні.

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


1
Чи можете ви сказати трохи більше про те, коли з'явиться запит на введення пароля? Я прошу, бо у мене є ключ ssh для віддаленого сервера, запевняю, що він не той, як мій пароль для входу в Mac чи що-небудь, і мені не довелося вводити пароль для ssh-ключа роками . Я можу просто відкрити термінал, набрати "ssh <server>", і я там. Я думаю, що спочатку я встановив цю клавішу під OSX 10.5. id_dsa, але я не думаю, що це має мати значення.
Майкл Х.

У мого id_rsaключа є пароль.
sorin

У мене також є проблема, що я вирішив це так давно, що не можу точно пригадати, що робив. Але я думаю, що ідея - не бігати ssh-add, а просто бігати sshбезпосередньо. У вас повинно з’явитися вікно, яке буде в якості пропускної фрази для ключа, і прапорець, щоб зберігати його у вашому брелоку.
Харальд Ханш-Олсен

1
@Sorin - так само і моє! Мені довелося ввести його один раз, давно, і Mac з тих пір зберігає його для мене. Сподіваємось, порада Харальда допоможе.
Майкл Х.

Ви маєте на увазі пароль Keychain (тобто пароль для входу) або парольну фразу ключа? Якщо це останнє, чи ваші парольні фрази обов'язково зберігаються в брелоку? Ви можете перевірити це, відкривши Keychain Access і шукаючи його в брелок для входу.
Зал Меттью

Відповіді:


674

У OSX у рідного ssh-addклієнта є спеціальний аргумент для збереження парольної фрази приватного ключа у брелоку OSX, що означає, що ваш звичайний логін розблокує його для використання з ssh. На OSX Sierra та пізніших версіях вам також потрібно налаштувати SSH так, щоб завжди використовувати брелок (див. Крок 2 нижче).

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

Крок 1 - Зберігайте ключ у брелок

Просто зробіть це один раз:

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

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

(Якщо ви користуєтесь попередньою версією OSX-версії OSX, завершено, крок 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для 2-го приватного ключа.

    Це UseKeychain yesключова частина, яка повідомляє SSH шукати у вашому брелоку OSX ключову фразу.

  4. Це воно! Наступного разу, коли ви завантажуєте будь-яке ssh-з'єднання, воно спробує вказані вами приватні ключі, і він шукатиме їхню парольну фразу в брелоку OSX. Не потрібно вводити парольну фразу.


2
Це майже працювало для мене. У моєї брелок "login" вже було відключено автоматичне блокування, тому відповідь Метью Санабрії не стосувалася. Використовуючи ssh-add -K ...додані ключі до агента ssh, не вимагаючи введення пароля, але лише для поточного сеансу. Після перезавантаження мені довелося перездати команду.
Poulsbo

4
@Poulsbo & @Abram - перегляньте моє оновлення, Сьєрра змінив автоматичну поведінку, і тепер вам потрібно запустити ssh-add -Aвручну, щоб завантажити збережений брелок. Деякі можливі рішення, на які посилалося вище.
trisweb

3
@trisweb Дякую за пораду. Рішення joshbuchea щодо зміни .ssh/configфайлу виглядає перспективно! Дивіться github.com/lionheart/openradar-mirror/isissue/…
Poulsbo

2
@sorin дивіться оновлену відповідь і повідомте мені, чи маєте ви відгуки. Дякую!
trisweb

9
Чудово працює! У моєму випадку мені потрібно було використовувати Aпрапор на додаток до того, Kщоб додати свої ключі до брелка і зареєструвати в ньому пароль ( ssh-add -AK ~/.ssh/[your-private-key]). Дякую!
youssman

19

У мене була подібна проблема в тому, що мене просили ВСЕ ВРЕМЯ про свою парольну фразу під ключ.

На пропозицію користувача "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


13

Вам буде запропоновано ввести пароль кожен раз, оскільки брелок "входу" блокується після бездіяльності та / або сну, або у вашому випадку перезавантаження. Є два способи вирішити це для вас.

  1. Змініть налаштування брелка "входу". Припустимо, що ваш ключ ssh зберігається у брелоку "login".

    • Відкрийте доступ до брелка
    • Виділіть брелок "Логін"
    • Клацніть правою кнопкою миші або опцією, клацніть брелок "Логін"
    • Зніміть прапорець "Блокувати після 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отримає агент для завантаження всіх ключів, чиї паролі зберігаються на Keychain ... Так дуже зручно


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

Сподіваюся, що це допомагає


8
Я думаю, маю на увазіauthorized_keys
Рене Ларсен

У будь-якому випадку це не працює, якщо у вас є більше одного ключа!
sorin
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.