2009-12-28 12:08:48 +0000 2009-12-28 12:08:48 +0000
143
143

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

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

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

eval `ssh-agent` ssh-add ~/.ssh/some\_key\_rsa ssh user@server

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

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

Ответы (9)

255
255
255
2011-04-11 19:58:42 +0000

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

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

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

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

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

ssh-add -l
82
82
82
2016-12-12 18:17:44 +0000

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


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

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

  2. Любой ключ, который вы добавите в ssh-agent с помощью команды 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 гарантирует, что ключевая фраза pass-фраза добавлена в связку ключей macOS. Убедитесь, что используете абсолютный путь к ключу. Использование относительного пути заставит автозапущенный скрипт не найти ваш ключ.

  2. Убедитесь, что все ваши ключи показаны как добавленные, когда вы набираете ssh-add -A.

  3. Создайте файл с именем com.yourusername.ssh-add.plist в ~/Library/LaunchAgents/ с содержимым, приведенным ниже. Файлысписка, подобные этому, используются в launchd для запуска скриптов при входе в систему. [2] [[3]](http://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingLaunchdJobs.html#//appleref/doc/uid/10000172i-SW7-BCIEDDBJ)

  4. Скажите launchd, чтобы загрузили файл plist, который вы только что создали во время выполнения: launchctl load ~/Library/LaunchAgents/com.yourusername.ssh-add.plist.

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

34
34
34
2017-01-05 18:53:54 +0000

Существует более простой способ, чем Ответ Рикардо сохранить пароль между сессиями/перезагрузками Mac под управлением 10.12 Sierra.

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

Apple специально изменило поведение ssh-agent в macOS 10.12 Sierra, чтобы больше не загружать автоматически предыдущие SSH-ключи, как отмечено в этом файле OpenRadar , Twitter discussion , и Technical Note from Apple . Решение, описанное выше, будет имитировать старое поведение El Capitan и запомнит ваш пароль.

17
17
17
2009-12-28 17:37:32 +0000

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

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

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

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

10
10
10
2011-04-28 13:28:40 +0000

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

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

ssh-add -K [path/to/private SSH key]
6
6
6
2013-10-14 12:29:41 +0000

У меня была похожая проблема при попытке войти в систему с помощью клиента 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. evalssh-агент -s`` Запускает ssh-agent для использования в оболочке. Он получит кодовую фразу из связки ключей и использует ее для разблокировки приватного ключа ssh.
  3. Установите ssh/git соединение и выполняйте мою работу.
  4. evalssh-агент -k`` Убейте работающего ssh-агента.
  5. security lock-keychain Снова заблокируйте брелок.
6
6
6
2009-12-28 12:55:13 +0000

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

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

4
4
4
2014-03-26 09:45:49 +0000

См. также:

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”, чтобы узнать, как)

1
1
1
2017-01-26 10:39:16 +0000

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

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

эхо “UseKeychain yes” >> ~/.ssh/config

Похожие вопросы

19
12
5
16
3