it-swarm-ru.tech

Как использовать Mac OS X Keychain с ключами SSH?

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

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

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

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

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

137
John Topley

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

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

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

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

16
Rudedog

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

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

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

(обратите внимание, что это заглавная K)

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

ssh-add -l
252
jeffmcc

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


Как объяснено здесь , это рекомендуемый метод, поскольку macOS 10.12.2:

  1. Добавьте следующие строки в ваш файл ~/.ssh/config:

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


Следующее устарело (сохранено для справки).

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

  1. Сначала добавьте все ключи, которые вы хотите автоматически загрузить в ssh-agent, используя команду 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/ с содержимым ниже. Файлы Plist, такие как этот, используются 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 file, который вы только что создали, выполнив: launchctl load ~/Library/LaunchAgents/com.yourusername.ssh-add.plist.

И у тебя должно быть все готово.

76
Ricardo Sanchez-Saez

Есть более простой способ, чем ответ Рикардо сохранить ваш пароль между сессиями/перезагрузками вашего 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 и запоминает ваш пароль.

32
ChrisJF

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

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

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

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

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

6
Olly

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

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

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

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

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

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

... добавив это примечание, поскольку было запрошено больше подробностей: команда "security" способна импортировать ключи (и другие вещи) непосредственно в связки ключей Приятно то, что в отличие от ssh-add, вы можете указать цепочку для ключей. Это позволяет импортировать напрямую в систему Keychain («man security», чтобы узнать, как)

4
xaphod

Лучшее и предназначенное Apple решение (поскольку macOS 10.12.2) описано здесь

Так что просто сделайте следующее:

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

1
Ben