как использовать mac os x keychain с ключами ssh?

<p>я понимаю, что, поскольку mac os x leopard связка ключей поддерживает хранение ключей ssh. может кто-нибудь объяснить, как эта функция должна работать.</p><p>у меня есть несколько сгенерированных ключей rsa, которые хранятся в моем каталоге ~/.ssh для доступа к различным серверам. у меня не установлены парольные фразы на этих клавишах. в настоящее время для входа на эти серверы я использую следующие команды в терминале:</p><pre> eval `ssh-agent` ssh-add ~/.ssh/some\_key\_rsa ssh user @ server </pre><p>(я написал несколько функций bash, чтобы сделать это проще.)</p><p>есть ли лучший способ сделать это с помощью брелка?</p>

<p>чтобы это работало, переменная окружения <code>$ssh\_auth\_sock</code> должна указывать на <code>/tmp/launch-xxxxxx/listeners</code>. предполагается, что это будет сделано автоматически при входе в систему. слушатель на этом сокете говорит по протоколу ssh-agent.</p><p>ваши bash-скрипты запускают ваш собственный ssh-агент (пишется <code>ssh-agent</code>, а не ssh\_agent) и переопределяют существующий <code>ssh-agent</code>, настроенный для вас при входе в систему.</p><p>кроме того, весь смысл цепочки для ключей заключается в сохранении паролей к вашим ssh-ключам, но вы говорите, что у вас не установлены парольные фразы для этих ключей, поэтому я не уверен, что вы ожидаете от интеграции цепочки для ключей.</p><p>наконец, при первом входе в систему вы, вероятно, не увидите процесс ssh-agent. этот процесс будет автоматически запущен службами запуска, когда кто-то попытается прочитать этот сокет в <code>/tmp</code>.</p>

<p>начиная с версии leopard os x, ssh-agent более тесно интегрирован с keychain. можно надежно хранить парольные фразы всех ваших ключей ssh в связке ключей, откуда ssh-agent будет читать их при запуске. суть в том, что ваши ключи легко защитить парольными фразами, но вам никогда не придется вводить парольную фразу, чтобы использовать их! вот как:</p><p>добавьте ключевую фразу к каждому ключу ssh в цепочку ключей: (опция -k загружает только простые личные ключи, пропускает сертификаты)</p><pre><code>ssh-add -k [path/to/private ssh key] </code></pre><p>(обратите внимание, что это заглавная k)</p><p>всякий раз, когда вы перезагружаете свой mac, все ключи ssh в вашей цепочке для ключей будут автоматически загружены. вы должны увидеть ключи в приложении keychain access, а также из командной строки:</p><pre><code>ssh-add -l </code></pre>

<p>начиная с <em>macos sierra</em>, <em>ssh-agent</em> больше не загружается автоматически загруженные ранее ssh-ключи при входе в учетную запись. это намеренно со стороны apple, они хотели переориентироваться с основной реализацией <em>openssh</em>. <a href="https://openradar.appspot.com/27348363">[1]</a> </p><hr><p>как объяснено <a href="https://developer.apple.com/library/content/technotes/tn2449/\_index.html">здесь</a> , это рекомендуемый метод, поскольку <em>macos 10.12.2</em>:</p><ol> <li> <p>добавьте следующие строки в ваш файл <code>~/.ssh/config</code>:</p> <pre><code>host * usekeychain yes addkeystoagent yes </code></pre></li> <li> <p>любой ключ, который вы добавляете в <em>ssh-agent</em> с помощью команды <code>ssh-add /path/to/your/private/key/id\_rsa</code>, будет автоматически добавлен в цепочку ключей и должен автоматически загружаться при перезагрузке.</p> </li> </ol><hr><p><em>следующее устарело (сохранено для справки).</em></p><p>чтобы вернуться к предыдущему поведению, вы должны выполнить команду <code>ssh-add -a</code> (которая автоматически загружает все ssh-ключи, которые имеют парольные фразы в цепочке для ключей) при входе в систему. для этого выполните следующие действия:</p><ol> <li> <p>сначала добавьте все ключи, которые вы хотите автоматически загрузить в <em>ssh-agent</em>, используя команду <code>ssh-add -k /absolute/path/to/your/private/key/id\_rsa</code>. аргумент <code>-k</code> обеспечивает добавление ключевой фразы в <em>цепочка для ключей macos</em>. убедитесь, что вы используете абсолютный путь к ключу. использование относительного пути заставит автоматически запускаемый скрипт не найти ваш ключ.</p> </li> <li> <p>убедитесь, что все ваши ключи отображаются как добавленные при вводе <code>ssh-add -a</code>.</p> </li> <li> <p>создайте файл с именем <code>com.yourusername.ssh-add.plist</code> в <code>~/library/launchagents/</code> с содержимым ниже. <em>файлы plist</em>, такие как этот, используются <code>launchd</code> для запуска сценариев при входе в систему. <a href="https://stackoverflow.com/a/13372744/269753">[2]</a> <a href="http://developer.apple.com/library/mac/#documentation/macosx/conceptual/bpsystemstartup/chapters/creatinglaunchdjobs.html#//apple\_ref/doc/uid/10000172i-sw7-bcieddbj">[3]</a> </p> <pre><code><?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> </code></pre></li> <li> <p>скажите <code>launchd</code> загрузить <em>plist file</em>, который вы только что создали, выполнив: <code>launchctl load ~/library/launchagents/com.yourusername.ssh-add.plist</code>.</p> </li> </ol><p>и у тебя должно быть все готово.</p>

<p>есть более простой способ, чем <a href="https://superuser.com/a/1155833/70792">ответ рикардо</a> сохранить ваш пароль между сессиями/перезагрузками вашего mac с 10.12 sierra.</p><ol> <li><code>ssh-add -k ~/.ssh/id\_rsa</code><br> примечание: измените путь к тому месту, где находится ваш ключ id\_rsa.</li> <li><code>ssh-add -a</code></li> <li> <p>создайте (или отредактируйте, если он существует) следующий файл <code>~/.ssh/config</code>:</p> <pre><code>host * usekeychain yes addkeystoagent yes identityfile ~/.ssh/id\_rsa </code></pre> <p>теперь пароль запоминается между перезагрузками!</p> </li> </ol><p>apple намеренно изменила поведение ssh-agent в macos 10.12 sierra, чтобы больше не загружать автоматически предыдущие ключи ssh, как отмечено в этом <a href="https://github.com/lionheart/openradar-mirror/issues/15361">openradar</a> , <a href="https://twitter.com/lorentey/status/753581927412686850">обсуждение в twitter</a> , и <a href="https://developer.apple.com/library/content/technotes/tn2449/\_index.html">техническое примечание от apple</a> . решение выше имитирует старое поведение el capitan и запоминает ваш пароль.</p>

<p>примечание: для macos sierra, пожалуйста, обратитесь к более свежему <a href="https://superuser.com/a/1163862/69517">ответу chrisjf</a> .</p><p>[ответ джеффа маккаррелла] [2] является правильным, за исключением того, что команда для добавления ключевой фразы содержит дефис, а не дефис, т. е. <code>–k</code> вместо <code>-k</code>, вызывая сообщение с <code>–k: no such file or directory</code>. следует читать:</p><pre><code>ssh-add -k [path/to/private ssh key] </code></pre>

<p>я подозреваю, что вы не используете команду <code>ssh</code> по умолчанию. у вас <code>ssh</code> установлен через порты? попробуйте <code>which ssh</code>, чтобы увидеть, какую команду <code>ssh</code> вы используете.</p><p>обычно должно отображаться диалоговое окно с запросом вашего пароля, если он еще не сохранен в вашей цепочке для ключей.</p>

<p>у меня была похожая проблема при попытке войти в систему с помощью ssh-сертификата клиента. в этом конкретном случае это было для доступа к хранилищу git. это была ситуация:</p><ul> <li>ключ был сохранен в <code>~/.ssh/</code></li> <li>закрытый ключ имеет парольную фразу.</li> <li>фраза-пароль хранится в цепочке ключей входа os x. <code>~/library/keychains/login.keychain</code></li> <li>соединение было следующим: мой mac <code>-></code> удаленный mac <code>-></code> git/ssh server</li> <li>mac os x 10.8.5</li> </ul><p>когда я подключился к удаленному mac с помощью удаленного рабочего стола, у меня не было проблем. однако при подключении по ssh к удаленному компьютеру mac каждый раз меня спрашивали о парольной фразе ssh. следующие шаги решили это для меня.</p><ol start="3"> <li><code>security unlock-keychain</code> фраза-пароль сохраняется в цепочке ключей входа в систему. это разблокирует его и позволит ssh-agent получить к нему доступ.</li> <li><code>eval `ssh-agent -s`</code> запускает ssh-agent для использования shell. он получит ключевую фразу из цепочки для ключей и использует ее для разблокировки закрытого ключа ssh.</li> <li>установите соединение ssh/git и сделайте мою работу.</li> <li><code>eval `ssh-agent -k`</code> убить работающий ssh-agent.</li> <li><code>security lock-keychain</code> снова заблокируйте брелок.</li> </ol>

<p>смотрите также:</p><pre><code>security import priv\_key.p12 -k ~/library/keychains/login.keychain security import pub\_key.pem -k ~/library/keychains/login.keychain </code></pre><p>... добавив это примечание, поскольку было запрошено больше подробностей: команда "security" способна импортировать ключи (и другие вещи) непосредственно в связки ключей приятно то, что в отличие от ssh-add, вы можете указать цепочку для ключей. это позволяет импортировать напрямую в систему keychain («man security», чтобы узнать, как)</p>

<p>лучшее и предназначенное apple решение<em> (поскольку macos 10.12.2) </em>описано <a href="https://apple.stackexchange.com/a/270417/212300">здесь</a> </p><blockquote> <p>так что просто сделайте следующее:</p> <p>echo "usekeychain yes" >> ~/.ssh/config</p> </blockquote>