macOS Sierra, похоже, не запоминает ключи SSH между перезагрузками

Мне нужно запустить эту команду с момента обновления до macOS:

ssh-add -K

Исправляет проблему после перезагрузки, но я должен запускать эту команду при каждом входе в систему на своем компьютере.

Если я не запускаю приведенную выше команду, мои ключи в ~/.ssh пропущены, и мне задают пароль сервера, чтобы установить соединение.

142 голоса | спросил bisherbas 25 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSun, 25 Sep 2016 15:39:51 +0300 2016, 15:39:51

9 ответов


174

Как и в macOS Sierra 10.12.2 Apple добавила параметр ssh_config, называемый UseKeychain, который позволяет «правильно» решить проблему. Добавьте в свой файл ~/.ssh/config следующее:

Host *
   AddKeysToAgent yes
   UseKeychain yes     

На странице ssh_config man в 10.12.2:

  

UseKeychain

     

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

ответил mluisbrown 15 ThuEurope/Moscow2016-12-15T16:56:59+03:00Europe/Moscow12bEurope/MoscowThu, 15 Dec 2016 16:56:59 +0300 2016, 16:56:59
95

У меня была и эта проблема при попытке развернуть какой-то код, используя Capistrano . Очень расстраивает. Вот два метода, которые я знаю для решения этой проблемы.

Способ 1: добавьте все известные ключи к агенту SSH.

Итак, я нашел решение, чтобы запустить ssh-add с помощью -A, который добавляет все известные идентификаторы к агенту SSH с использованием любых кодовых фраз, хранящихся в вашей keychain, как это:

ssh-add -A

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

nano ~/.bash_profile

И добавьте эту строку в конец:

ssh-add -A 2>/dev/null;

Теперь, когда вы открываете новое окно терминала, все должно быть хорошо!

Способ 2. Добавьте только те ключи SSH, которые находятся в цепочке ключей .

Итак, если параметр ssh-add -A должен работать для большинства основных случаев, я столкнулся с проблемой в последнее время, когда у меня было 6-7 бранных ящиков (в которых используются SSH-ключи /идентификаторы для доступа) установки на машине поверх более распространенного id_rsa.pub на месте.

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

Проблема заключается в том, что ssh-add -A будет просто произвольно добавлять каждый отдельный ключ /идентификатор SSH, который у вас есть, даже если это не обязательно для этого; например, в случае бродячих коробок.

Мое решение после долгих испытаний было следующим.

Во-первых, если к вашему агенту добавлено больше ключей или удостоверений SSH, чем вам нужно, как показано с помощью ssh-add -l, затем очистите их от агента следующим образом:

ssh-add -D

После этого запустите агент SSH как фоновый процесс следующим образом:

eval "$(ssh-agent -s)"

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

ssh-add ~/.ssh/id_rsa

Введите свою кодовую фразу, нажмите Return , и вам должно быть хорошо идти.

Но в других случаях просто запустить это достаточно, чтобы получить добавленный ключ /идентификатор:

ssh-add -K

Если все это сработало, введите ssh-add -l, и вы увидите один одиночный SSH-ключ /идентификатор.

Все хорошо? Теперь откройте свой .bash_profile:

nano ~/.bash_profile

И добавьте эту строку в нижнюю; комментарий или удалить версию -A, если у вас это есть:

ssh-add -K 2>/dev/null;

Это позволит перезагрузить SSH-ключ /идентификатор агента SSH при каждом запуске /перезагрузке.

UPDATE: теперь Apple добавила опцию UseKeychain для открытых конфигурационных параметров SSH и также рассматривает решение ssh-add -A.

Как и в macOS Sierra 10.12.2, Apple добавила UseKeychain для конфигураций SSH. Проверка справочной страницы (через UseKeychain) показывает следующую информацию:

man ssh_config

Что сводится к тому, что Apple видит решение как добавление UseKeychain On macOS, specifies whether the system should search for passphrases in the user's keychain when attempting to use a par- ticular key. When the passphrase is provided by the user, this option also specifies whether the passphrase should be stored into the keychain once it has been verified to be correct. The argument must be ``yes'' or ``no''. The default is ``no''. к вашему ssh-add -A , как описано в этом открытом билете Radar или добавление .bash_profile в качестве одной из опций для каждого пользователя UseKeychain.

ответил JakeGould 27 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 27 Sep 2016 05:23:41 +0300 2016, 05:23:41
13

Я написал короткую публикацию об этом тему , которая может вам помочь.

Решение вызывает вызов команды ssh-add -A при каждом запуске.

Просто добавьте .plist файл со следующим контентом на путь ~/Library/LaunchAgents/ или создайте его с помощью Лингтон :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>ssh-add-a</string>
    <key>ProgramArguments</key>
    <array>
        <string>ssh-add</string>
        <string>-A</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

<!-- @@@@LingonWhatStart:ssh-add [email protected]@@@LingonWhatEnd -->
ответил Jirsbek 6 +03002016-10-06T01:36:54+03:00312016bEurope/MoscowThu, 06 Oct 2016 01:36:54 +0300 2016, 01:36:54
11

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

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

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


Я добавляю этот ответ, потому что:

  • Другие ответы говорят вам добавить строку IdentityFile ~/.ssh/id_rsa, но этот параметр не требуется для автоматической загрузки ключей (и он фактически привяжет этот конкретный ключ для раздела хоста добавьте его, который вам не понадобится, если вы используете разные клавиши для разных целей).
  • В принятом ответе упоминается UseKeychain, но этого недостаточно, чтобы сохранить ключи в ssh-agent после перезагрузки.
ответил Ricardo Sanchez-Saez 7 MaramTue, 07 Mar 2017 00:36:01 +03002017-03-07T00:36:01+03:0012 2017, 00:36:01
6

Так как macOS 10.12.2 вы можете использовать опцию UseKeychain. Подробнее здесь или загляните в man ssh_config.

     UseKeychain
         On macOS, specifies whether the system should search for passphrases in the user's keychain
         when attempting to use a particular key. When the passphrase is provided by the user, this
         option also specifies whether the passphrase should be stored into the keychain once it has
         been verified to be correct.  The argument must be ``yes'' or ``no''.  The default is ``no''.

Итак, просто выполните следующие действия:

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

ответил Ben 26 Jpm1000000pmThu, 26 Jan 2017 13:22:31 +030017 2017, 13:22:31
3

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

Host github.com
HostName github.com
IdentityFile ~/.ssh/github
IdentitiesOnly yes

Я не уверен, почему, но Host и HostName оба важны. В моем случае, если один из них отсутствовал, то решение не сработало.

Затем я просто выполнил ssh-add -K и работал даже после перезапуска.

ответил Infinity 3 42016vEurope/Moscow11bEurope/MoscowThu, 03 Nov 2016 08:57:09 +0300 2016, 08:57:09
2

Я обнаружил, что ssh-add -K дал мне « незаконный вариант - K ». Это связано с тем, что ssh-add - это странная версия, которая поступает из /usr /local /bin (устанавливается с помощью варева?). Я смог добавить ключ с помощью специального использования ssh-add, расположенного в /usr /bin:

/usr/bin/ssh-add -K ~/.ssh/id_rsa
ответил Fiskabollen 11 +03002016-10-11T20:54:18+03:00312016bEurope/MoscowTue, 11 Oct 2016 20:54:18 +0300 2016, 20:54:18
0

Изменение ~ /.ssh /config для добавления UseKeyChain для всех хостов достаточно, чтобы остановить этот повторяющийся кошмар;)

Host *
 UseKeychain yes

Если файл пуст или не существует простого создания и /или добавления вышеуказанной конфигурации.

ответил chim 27 FebruaryEurope/MoscowbMon, 27 Feb 2017 17:10:31 +0300000000pmMon, 27 Feb 2017 17:10:31 +030017 2017, 17:10:31
0

Если вы используете другую версию ssh (например, установленную через homebrew), вышеупомянутые решения не будут работать из коробки. Например, AddKeysToAgent yes и UseKeychain yes в файле .ssh/config не распознаются версиями ssh, отличными от Apple, и вызывают ошибку , То же самое для параметра -A или -K для клиента ssh.

Это означает, что ответ @mluisbrown не будет работать вообще. Вы можете использовать метод 1 ответ @JakeGould и явно использовать macOS ssh-add в вашем .bash_profile, чтобы добавить все ключи в цепочку ключей, то есть:

/usr/bin/ssh-add -A
ответил n1000 17 J0000006Europe/Moscow 2017, 21:02:45

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132