Вопрос: Как использовать брелок для ключей Mac OS X с ключами SSH?


Я понимаю, что с Mac OS X Leopard Keychain поддерживает сохранение ключей SSH. Может кто-то объяснить, как эта функция должна работать.

У меня есть некоторые ключи RSA, которые я сгенерировал, хранящиеся в моем каталоге ~ / .ssh для доступа к различным серверам. У меня нет кодовых фраз, установленных на этих клавишах. В настоящее время для входа на эти серверы я использую следующие команды в терминале:

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

(Я написал несколько функций Bash, чтобы сделать это проще.)

Есть ли лучший способ сделать это с помощью брелка?


133
2017-12-28 12:08


Источник




Ответы:


Чтобы он работал, $SSH_AUTH_SOCK переменная среды должна указываться на /tmp/launch-xxxxxx/Listeners, Это должно выполняться автоматически при входе в систему. Слушатель в этом сокете говорит о протоколе ssh-agent.

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

Кроме того, вся суть брелка состоит в том, чтобы хранить пароли к вашим ключам ssh, но вы говорите, что у вас нет кодовых фраз, установленных на этих клавишах, поэтому я не уверен, чего вы ожидаете от интеграции с цепочкой ключей.

Наконец, при первом входе в систему вы, вероятно, не увидите процесс ssh-agent. Этот процесс будет запущен автоматически службами запуска в первый раз, когда что-то попытается прочитать этот сокет в /tmp,


16
2017-12-28 17:37



Благодарю. Поэтому мне все равно придется бежать ssh-add добавить мои идентификаторы RSA к агенту ssh по умолчанию, запущенному при входе в систему? - John Topley
Вам не нужно запускать ssh-add; ssh-agent будет запрашивать ключевую фразу ключа при первом запуске ssh. - Rudedog
Это подсказывает мне пароль каждый раз, когда я запускаю ssh. Дело в том, что я не хочу вводить какие-либо пароли. - John Topley
Что подсказывает вам пароль? Я начинаю подозревать, что на вас запрашивает удаленный сервер, который ставит ваше утверждение, что ваши ключи не имеют кодовых фраз в лучшей перспективе. Если вы хотите обойти пароль на удаленном сервере, вам нужно добавить свой открытый ключ в $HOME/.ssh/authorized_keys на этом сервере. Mac OS 'ssh-agent + keychain используется только для хранения парольной фразы для ваших локальных ключей ssh; он не предназначен для отправки удаленных паролей по существующим соединениям ssh. - Rudedog
использование ssh -v для диагностики того, что делает ssh. также использовать sshd -p 8900 -v на стороне сервера и ssh -v remote:8900 для диагностики того, что делает sshd. - Rudedog


Начиная с выпуска Leopard OS X, ssh-агент более тесно интегрирован с Keychain. В Keychain можно хранить кодовые фразы всех ваших SSH-ключей, из которых ssh-agent будет читать их при запуске. Суть в том, что вы можете просто защитить свои ключи с помощью фраз, но никогда не вводите кодовую фразу для их использования! Вот как это сделать:

Добавьте прокси-код для каждого ключа ssh для связывания ключей: (опция -k загружает только простые закрытые ключи, пропускает сертификаты)

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

(обратите внимание, что это капитал K)

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

ssh-add -l

242
2018-04-11 19:58



Это должен быть принятый ответ. - Kris
принятый ответ отвечает на этот вопрос конкретного пользователя, но это отвечает на общий вопрос пользователя - eqzx
developer.apple.com/library/mac/documentation/Darwin/Reference/...  Вам также нужна опция -K для хранения кодовых фраз в цепочке ключей. - Neeme Praks
Если вы установили другую версию SSH через систему пакетов, такую ​​как Homebrew, тогда необходимо использовать абсолютный путь, например /usr/bin/ssh-add, - Ludovic Kuty
Для macOS Sierra все изменилось. Видеть github.com/jirsbek/SSH-keys-in-macOS-Sierra-keychain - schieferstapel


Начиная с 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,

И вы должны быть настроены.


70
2017-12-12 18:17



Связанный: apple.stackexchange.com/questions/48502/... - slm


Существует более простой способ, чем Ответ Рикардо для сохранения пароля между сеансами / перезапусками вашего 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-agent в macOS 10.12 Sierra, чтобы больше не загружать предыдущие SSH-ключи, как указано в этом OpenRadar, Обсуждение в Twitter, а также Техническая нота от Apple, Решение выше будет имитировать прежнее поведение El Capitan и запомнить ваш пароль.


29
2018-01-05 18:53



Удивительно, работает как шарм, имхо намного чище, чем другие, и решил в нужном месте :) - GerardJP


Примечание: для macOS Sierra, пожалуйста, обратитесь к более позднему ответить ChrisJF,

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

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

9
2018-04-28 13:28



Это должен быть комментарий к ответу, на который вы ссылаетесь, а не новый ответ. Мы говорим о безопасности здесь. Можно предположить, что вы должны тщательно печатать его, а не слепо копировать и вставлять ssh-add -K - Phil_1984_
Используя дефис с K, я получаю illegal option -- K, Нижний регистр k указан как опция. - Sam Dutton
Спасибо за ответ. Я только что проверил macOS Sierra: -K, т. е. dash-capital-K, все еще действует - simonair


Я подозреваю, что вы не используете значение по умолчанию ssh команда. У тебя есть ssh установлен через порты? Пытаться which ssh посмотреть, какие ssh которую вы используете.

Обычно он должен отображать диалоговое окно с запросом пароля, если он еще не сохранен в вашей цепочке ключей.


6
2017-12-28 12:55



Я не использую порты. - John Topley
Спасибо за информацию :) У меня были проблемы, потому что я использовал OpenSSH от Homebrew. - ggustafsson


У меня была аналогичная проблема при попытке входа в систему с использованием сертификата клиента ssh. В этом конкретном случае это было для доступа к репозиторию git. Это была ситуация:

  • Ключ был сохранен в ~/.ssh/
  • Частный ключ имеет кодовую фразу.
  • Кодовая фраза хранится в логической цепочке OS X. ~/Library/Keychains/login.keychain
  • Соединение было следующим: мой mac -> удаленный mac -> Сервер git / ssh
  • Mac OS X 10.8.5

Когда я подключился к удаленному Mac с помощью удаленного рабочего стола, у меня не было проблем. Однако, когда я связывался с SSH с удаленным Mac, меня каждый раз спрашивали о ssh passphrase. Следующие шаги решили для меня.

  1. security unlock-keychain Кодовая фраза хранится в цепочке логина входа. Это разблокирует его и позволяет ssh-agent получить к нему доступ.
  2. eval `ssh-agent -s` Запускает ssh-agent для использования оболочки. Он получит кодовую фразу из брелка и использует его для разблокировки частного ключа ssh.
  3. Установите соединение ssh / git и выполните мою работу.
  4. eval `ssh-agent -k` Убейте запущенного ssh-agent.
  5. security lock-keychain Заблокируйте брелок снова.

6
2017-10-14 12:29



Чтобы №2 работал для меня в псевдониме, мне пришлось использовать eval \$(ssh-agent) в Re: Удаленный логин и брелок, Когда не внутри псевдонима eval $(ssh-agent) работает (без обратной косой черты $). - Travis


Смотрите также:

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 («безопасность человека», чтобы узнать, как)


4
2018-03-26 09:45



Не могли бы вы подробнее рассказать об этом ответе? Благодарю. - Matthew Williams


Лучшее решение для Apple (поскольку macOS 10.12.2) описывается Вот

Поэтому просто выполните следующие действия:

echo "UseKeychain yes" >> ~ / .ssh / config


1
2018-01-26 10:39



С помощью >> находится под угрозой, если вы вводите команду несколько раз. Лучше сделайте ручную версию файла, как описано в Ответ ChrisJF, - Cœur
Да, вы прямо там - Ben