Як використовувати брелок Mac OS X з ключами SSH?


140

Я розумію, що оскільки Mac OS X Leopard Keychain підтримує зберігання ключів SSH. Не могли б хто-небудь пояснити, як ця функція повинна працювати.

У мене є кілька ключів RSA, які я генерував, зберігається в моєму каталозі ~ / .ssh для доступу до різних серверів. У мене не встановлені парольні фрази на цих клавішах. В даний час для входу на ці сервери я використовую наступні команди в Терміналі:

eval `ssh-agent '
ssh-add ~ / .ssh / some_key_rsa
ssh user @ server

(Я написав деякі функції Баша, щоб полегшити це.)

Чи є кращий спосіб зробити це за допомогою брелка?

Відповіді:


16

Щоб він працював, $SSH_AUTH_SOCKслід вказати на змінну середовища /tmp/launch-xxxxxx/Listeners. Це передбачається зробити автоматично, коли ви входите в систему. Слухач цього сокета говорить протокол ssh-agent.

Ваші bash-скрипти запускають власний агент ssh (написано ssh-agent, а не ssh_agent) і замінюють існуючий, ssh-agentякий налаштовано для вас при вході в систему.

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

Нарешті, під час першого входу ви, ймовірно, не побачите процес ssh-agent. Цей процес буде запущений автоматично сервісами запуску, коли перший раз спробує прочитати цей сокет /tmp.


1
Дякую. Тож мені все одно доведеться запустити, ssh-addщоб додати свої ідентичності RSA до агента ssh за замовчуванням, запущеного при вході?
Джон Топлі

Вам не потрібно запускати ssh-add; ssh-agent запитає прохідну фразу ключа при першому запуску ssh.
Рудедог

3
Це запрошує мене на пароль щоразу, коли я запускаю ssh. Справа в тому, що я не хочу вводити паролі.
Джон Топлі

1
Що спонукає вас до пароля? Я починаю підозрювати, що саме вас спонукає віддалений сервер, який ставить вашу заяву про те, що ваші ключі не мають кращих фразових фраз. Якщо ви хочете обійти пароль на віддаленому сервері, вам потрібно додати свій відкритий ключ $HOME/.ssh/authorized_keysна цьому сервері. Ssh-agent + keychain Mac OS використовується лише для зберігання парольної фрази для ваших локальних ключів ssh; це не призначено для надсилання віддалених паролів через існуючі ssh-з'єднання.
Рудедог

1
використовувати ssh -vдля діагностики того, що робить ssh. також використовувати sshd -p 8900 -vна стороні сервера та ssh -v remote:8900діагностувати, що робить sshd.
Рудедог

252

Що стосується випуску Leopard OS X, ssh-агент більш тісно інтегрований з Keychain. Можна зберігати паролі всіх ваших ключів SSH у Keychain, звідки ssh-агент прочитає їх при запуску. Суть полягає в тому, що просто закріпити ваші ключі прохідними фразами, але ніколи не потрібно набирати пароль, щоб використовувати їх! Ось як:

Додайте фразу проходу до кожної клавіші ssh до брелка: (опція -k завантажує лише звичайні приватні ключі, пропускає сертифікати)

ssh-add -K [path/to/private SSH key]

(зауважте, що це велика столиця K)

Щоразу, коли ви перезавантажуєте Mac, усі SSH ключі у вашій брелоку автоматично завантажуватимуться. Ви повинні мати можливість бачити ключі в додатку Keychain Access, а також у командному рядку за допомогою:

ssh-add -l

ssh-add -lне відображає жодних клавіш при віддаленому підключенні (де $ DISPLAY не встановлено). Тут потрібно використовувати спеціальні хитрощі, щоб використовувати брелок (наприклад, в superuser.com/questions/141044/… )
Ефір

2
developer.apple.com/library/mac/documentation/Darwin/Reference/… Також вам потрібна опція -K для зберігання парольних фраз у брелок.
Neeme Praks

5
Якщо ви встановили іншу версію SSH через систему пакетів, наприклад Homebrew, тоді необхідно використовувати абсолютний шлях на зразок /usr/bin/ssh-add.
Людовик Куті

1
Цікаво, що в моєму macOS Sierra він не запитує пароль після перезавантаження, але ssh-add -lповертає "Агент не має посвідчень". ( ps auxвключає /usr/bin/ssh-agent -l).
Halil Özgür

4
Для macOS Sierra все змінилося. Див github.com/jirsbek/SSH-keys-in-macOS-Sierra-keychain
schieferstapel

79

Оскільки в macOS Sierra , ssh-агент більше не завантажує автоматично завантажені раніше ключі ssh, коли ви входите у свій обліковий запис. З боку Apple це навмисно, вони хотіли знову узгодитись із основним впровадженням OpenSSH . [1]


Як пояснено тут , це рекомендований метод, починаючи з macOS 10.12.2 :

  1. Додайте у ~/.ssh/configфайл наступні рядки :

    Host *
        UseKeychain yes
        AddKeysToAgent yes
    
  2. Будь-який ключ, який ви додасте до ssh-агента за допомогою ssh-add /path/to/your/private/key/id_rsaкоманди, буде автоматично доданий до брелка і повинен бути автоматично завантажений при перезавантаженні.


Далі є застарілим (зберігається для довідки).

Щоб повернутися до попередньої поведінки, ви хочете запустити ssh-add -Aкоманду (яка автоматично завантажує всі ключі ssh, які містять фрази пропуску у ваш брелок). Для цього виконайте такі дії:

  1. Спочатку додайте всі ключі, які ви хочете автоматично завантажити в ssh-агент за допомогою ssh-add -K /absolute/path/to/your/private/key/id_rsaкоманди. -KАргумент гарантує , що ключ доступу фраза додається брелка Macos в . Обов’язково використовуйте абсолютний шлях до ключа. Використання відносного шляху дозволить автоматично запустити скрипт не знайти ваш ключ.

  2. Переконайтесь, що всі ваші клавіші відображаються як додані під час введення ssh-add -A.

  3. Створіть файл com.yourusername.ssh-add.plistв ~/Library/LaunchAgents/з нижче вмістом. Файли списків, такі як цей, використовуються launchdдля запуску скриптів під час входу. [2] [3]

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
    <key>Label</key>
      <string>com.user.loginscript</string>
    <key>ProgramArguments</key>
      <array>
        <string>ssh-add</string>
        <string>-A</string>
      </array>
    <key>RunAtLoad</key>
      <true/>
    </dict>
    </plist>
    
  4. Скажіть , launchdщоб завантажити файл Plist тільки що створений командою: launchctl load ~/Library/LaunchAgents/com.yourusername.ssh-add.plist.

І ви повинні бути все налаштовані.



33

Існує простіший спосіб, ніж відповідь Рікардо, зберігати пароль між сесіями / перезавантаженнями вашого Mac під керуванням 10.12 Sierra.

  1. ssh-add -K ~/.ssh/id_rsa
    Примітка. Змініть шлях до того, де знаходиться ваш ключ id_rsa.
  2. ssh-add -A
  3. Створіть (або відредагуйте, якщо він існує) наступний ~/.ssh/configфайл:

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

    Тепер пароль запам'ятовується між перезавантаженнями!

Apple навмисно змінила поведінку для ssh-агента в macOS 10.12 Sierra, щоб більше не автоматично завантажувати попередні ключі SSH, як зазначено в цій дискусії OpenRadar , Twitter і Технічній записці від Apple . Наведене вище рішення буде імітувати стару поведінку Ель-Капітан і запам'ятати ваш пароль.


2
Дивовижно, працює як принадність, їм набагато чистіше, ніж інші, і вирішено в потрібному місці :)
GerardJP


10

Примітка: для macOS Сьєрра зверніться до останньої відповіді ChrisJF .

[Відповідь Джеффа МакКаррелла] [2] правильна, за винятком того, що команда для додавання фрази пропуску містить крапку замість дефісу, тобто –Kзамість того -K, щоб викликати повідомлення ефекту –K: No such file or directory. Він повинен читати:

ssh-add -K [path/to/private SSH key]

2
Це має бути коментарем до відповіді, на який ви посилаєтесь, а не свіжою відповіддю. Тут ми говоримо про безпеку. Можна запропонувати вам ретельно вводити його, а не сліпо копіювати та вставлятиssh-add -K
Phil_1984_

1
Використовуючи дефіс з K, я отримую illegal option -- K. Малий регістр k вказаний як варіант.
Сем Даттон

Дякуємо за відгук. Я щойно перевірив на macOS Sierra: -Kтобто тире-капітал-K все ще діє
simonair

6

Я підозрюю, що ви не використовуєте sshкоманду за замовчуванням . Ви sshвстановили через порти? Спробуйте which sshпобачити, яку sshкоманду ви використовуєте.

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


Я не використовую порти.
Джон Топлі

Дякую за інформацію :) У мене виникли проблеми, оскільки я використовував OpenSSH від Homebrew.
ggustafsson

6

У мене була схожа проблема під час спроби входу за допомогою клієнтського ssh cert. У цьому конкретному випадку це було для доступу до сховища git. Така ситуація була:

  • Ключ збережено в ~/.ssh/
  • У приватному ключі є парольна фраза.
  • Західна фраза зберігається в брелоку входу в систему OS X. ~/Library/Keychains/login.keychain
  • Підключення було таким: мій mac ->віддалений mac ->git / ssh сервер
  • Mac OS X 10.8.5

Коли я підключився до віддаленого Mac за допомогою віддаленого робочого столу, у мене не виникло проблем. Однак під час підключення з SSH до віддаленого mac мене щоразу просили пройти парольну фразу ssh. Наступні кроки вирішили це для мене.

  1. security unlock-keychainПарольна фраза зберігається в брелоку входу. Це розблокує його та надає доступ ssh-агенту до нього.
  2. eval `ssh-agent -s`Запускає ssh-агент для використання оболонки. Він отримає фразу з брелка і використовуватиме її для розблокування приватного ключа ssh.
  3. Встановіть ssh / git зв’язок і виконайте мою роботу.
  4. eval `ssh-agent -k` Вбийте запущений ssh-агент.
  5. security lock-keychain Знову заблокуйте брелок.

1
Для того, щоб номер 2 працював на мене в псевдонімі, мені довелося використовувати дистанційний логін і брелокeval \$(ssh-agent) для Re: віддалений вхід . Якщо немає в псевдонімі, eval $(ssh-agent)працює ( без зворотної косої частини $ ).
Тревіс

4

Дивитися також:

security import priv_key.p12 -k ~/Library/Keychains/login.keychain
security import pub_key.pem -k ~/Library/Keychains/login.keychain

... додавши цю замітку, оскільки вимагалося більш детально: команда "security" здатна імпортувати ключі (та інші речі) безпосередньо в Keychains. Приємно те, що на відміну від ssh-add, ви можете вказати брелок. Це дає можливість імпортувати безпосередньо в систему Keychain ("безпека людини", щоб дізнатися, як)


1
Чи можете ви детальніше розказати цю відповідь? Дякую.
Меттью Вільямс

1

Краще і Apple , призначене рішення (з MacOS 10.12.2) описано тут

Тому просто виконайте наступне:

ехо "UseKeychain так" >> ~ / .ssh / config


1
Використання >>загрожує, якщо ввести команду кілька разів. Краще зробіть вручну видання файлу, як описано у відповіді ChrisJF .
Cœur

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