Як я можу назавжди додати свій приватний ключ 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.