Я должен запустить эту команду после обновления до macOS:
ssh-add -K
Исправляет проблему после перезагрузки, но мне приходится запускать эту команду каждый раз, когда я вхожу в свой компьютер.
Если я не выполню приведенную выше команду, мои ключи ~/.ssh
будут пропущены, и мне будет предложено ввести пароль сервера для установления соединения.
Начиная с macOS Sierra 10.12.2 Apple добавила ssh_config
параметр, UseKeychain
который позволяет «правильное» решение проблемы. Добавьте в свой ~/.ssh/config
файл следующее:
Host *
AddKeysToAgent yes
UseKeychain yes
Со ssh_config
man
страницы 10.12.2:
Использоватьбрелок
В macOS указывает, должна ли система искать парольные фразы в цепочке ключей пользователя при попытке использовать определенный ключ. Когда парольная фраза предоставляется пользователем, этот параметр также указывает, следует ли сохранять парольную фразу в связке ключей после проверки ее правильности. Аргумент должен быть «да» или «нет». По умолчанию "нет".
ssh-add -K [path to key]
в a, .bash_profile
поскольку оба метода требуют определенного уровня модификации пользователем файлов в учетной записи пользователя, которая никогда не требовалась в прошлом для достижения той же функциональности.IdentityFile ~/.ssh/id_rsa
это избыточно и не нужно (при просмотре параметров по умолчанию). Я никогда не устанавливал эту опцию в своем конфигурационном файле ssh.~/.ssh/config~
предпочтительнее, поскольку оно решает проблему на ssh
уровне. Не уверен на 100%, что .bash_profile
мод будет работать для клиентов с графическим интерфейсом, использующих ssh без использования оболочки.id_rsa
в этом ответе сбивает с толку.IdentityFile
вариант из ответа, так как он не требуется.IgnoreUnknown UseKeychain
для кросс-совместимости с LinuxUseKeychain yes
в файл .ssh/config каждого ключа является лучшим методом, чем использование ssh-add
: 1. Это поддерживается и рекомендуется. 2. Он не полагается на оболочку, как добавление в .bash_profile
бы. 3. Позволяет не добавлять парольную фразу для особо секретного ключа автоматически. 4. Если вы добавите новый ключ, вам, вероятно, все равно придется отредактировать config
файл, чтобы вы могли делать все в одном месте.UseKeychain yes
к сохранению парольной фразы при перезагрузке (т.е. к записи на диск)? Если да, то есть ли способ предотвратить это? Я не вижу смысла сохранять кодовую фразу SSH в потенциально менее безопасном месте.UseKeychain yes
значит). Связки ключей macOS надежно зашифрованы. Если вы не хотите, чтобы они сохранялись в цепочке для ключей, установите для этого параметра значение «нет», но тогда, очевидно, парольные фразы не сохраняются при перезагрузке, о чем и идет речь в этом вопросе.Host *
строка не нужна. Любые параметры, не входящие в категорию a Host
, будут считаться глобальными конфигурациями.У меня также была эта проблема при попытке развернуть некоторый код с помощью Capistrano . Очень расстраивает. Вот два известных мне метода решения этой проблемы.
Поэтому одно решение, которое я нашел, — запустить ssh-add
с -A
опцией, которая добавляет все известные удостоверения к агенту SSH, используя любые парольные фразы, хранящиеся в вашей цепочке ключей, например:
ssh-add -A
Теперь это работает, но не сохраняется при перезагрузке. Поэтому, если вы хотите никогда больше не беспокоиться об этом, просто откройте файл пользователя ~/.bash_profile
следующим образом:
nano ~/.bash_profile
И добавьте эту строку внизу:
ssh-add -A 2>/dev/null;
Теперь, когда вы открываете новое окно терминала, все должно быть хорошо!
Таким образом, хотя этот ssh-add -A
вариант должен работать в большинстве основных случаев, недавно я столкнулся с проблемой, когда у меня было установлено 6-7 бродячих ящиков (которые используют ключи / идентификаторы SSH для доступа) на машине поверх более распространенных id_rsa.pub
на месте.
Короче говоря, я оказался заблокированным на удаленном сервере из-за слишком большого количества неудачных попыток, основанных на ключах/личностях SSH, поскольку доступ к серверу был основан на пароле, а ключи/идентификаторы SSH являются ключами/личностями SSH. Таким образом, агент SSH попробовал все мои ключи SSH, но потерпел неудачу, и я даже не смог получить запрос пароля.
Проблема в том, что ssh-add -A
вы просто произвольно добавите каждый SSH-ключ/идентификатор, который у вас есть, к агенту, даже если в этом нет необходимости; например, в случае ящиков Vagrant.
Мое решение после долгих испытаний было следующим.
Во-первых, если к вашему агенту добавлено больше 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 при каждом запуске/перезагрузке.
UseKeychain
опцию в открытые параметры конфигурации SSH и также рассматривает ssh-add -A
решение.Начиная с macOS Sierra 10.12.2, Apple добавила UseKeychain
параметр конфигурации для конфигураций SSH. Проверка справочной страницы (через man ssh_config
) показывает следующую информацию:
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''.
Это сводится к тому, что Apple рассматривает решение либо как добавление ssh-add -A
к вашему .bash_profile
, как описано в этом билете Open Radar , либо как добавление UseKeychain
в качестве одного из вариантов для каждого пользователя ~/.ssh/config
.
ssh-add -K [path to key]
и введите pw при появлении запроса. Связка ключей будет хранить пароль, и после этого ssh-add получит его оттуда.UseKeychain
и AddKeysToAgent
автоматически добавить ваши ключи из вашего ssh_config. Нет необходимости в сценариях оболочки. Смотрите ответ @mluisbrown ниже для получения обновленной информации для 10.12.2.~/.ssh/config
конфигурации для добавления 4 строк конфигурации и добавлением одной строки ssh-add -K [path to key]
в файл .bash_profile
, ни одно из решений не будет идеальным. Идеальным сценарием является обновление до macOS 10.12.2, которое устранит необходимость вносить какие- либо изменения в любую конфигурацию вручную для достижения этой базовой — и ожидаемой — функциональности.ssh-add -A
свой rc-скрипт, если хотите, чтобы ваши ключи всегда загружались». ¯\_(ツ)_/¯
ssh-add -A
не работает в Мохаве (10.14.6 (18G4032)), со свежим ssh-add (/usr/local/Cellar/openssh/8.3p1/bin/ssh-add). Похоже, он работает с этими двумя (используя свежий ssh-add): ssh-add -K ~/.ssh/id_rsa
тогдаssh-add ~/.ssh/id_rsa
/usr/bin/ssh-add
а не что-то, установленное доморощенным пивом, кондой и т. Д. (Проверьте which ssh-add
, чтобы быть уверенным.)Как объясняется здесь , это рекомендуемый метод, начиная с macOS 10.12.2 :
Добавьте следующие строки в ваш ~/.ssh/config
файл:
Host *
UseKeychain yes
AddKeysToAgent yes
Любой ключ, который вы добавите в ssh-агент с помощью ssh-add /path/to/your/private/key/id_rsa
команды, будет автоматически добавлен в цепочку для ключей и должен автоматически загружаться при перезагрузке.
Я добавляю этот ответ, потому что:
IdentityFile ~/.ssh/id_rsa
строку, но эта опция не нужна для автоматической загрузки ключей (и она фактически привязывает этот конкретный ключ к разделу хоста, в который вы его добавляете, что вам не понадобится, если вы используете разные ключи для разные хот-доги).UseKeychain
, но этого недостаточно, чтобы сохранить ключи ssh-agent
после перезагрузки.ssh-add -L
и он сообщит The agent has no identities
. Ничего не будет там, пока вы не подключитесь. Ключи AddKeysToAgent
никак не сохраняются между перезагрузками!Я написал небольшой пост на эту тему , который может вам помочь.
Решение вызывает ssh-add -A
команду при каждом запуске.
Просто добавьте .plist
файл со следующим содержимым в путь ~/Library/LaunchAgents/
или создайте его с помощью приложения Lingon :
<?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 -A@@@@LingonWhatEnd -->
Начиная с 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
>>
подвергается риску, если вы вводите команду несколько раз. Лучше сделать ручную редакцию файла, как описано в ответе mluisbrown или ответе ChrisJF .У меня была эта проблема раньше, и я нашел способ обойти это. Я только что создал файл с именем config
в моей ~/.ssh
папке, куда я добавил следующие строки:
Host github.com
HostName github.com
IdentityFile ~/.ssh/github
IdentitiesOnly yes
Я не уверен, почему, но Host
оба HostName
важны. В моем случае, если одного из них не было, решение не сработало.
Затем я просто сделал это, ssh-add -K
и он работал даже после перезагрузки.
Если вы используете другую версию ssh (например, установленную через homebrew), приведенные выше решения не будут работать из коробки. Например, AddKeysToAgent yes
и UseKeychain yes
в .ssh/config
файле не распознаются версиями ssh, отличными от Apple, и это вызовет ошибку. То же самое для опции -A
или для клиента.-K
ssh
Это означает , что ответ @mluisbrown вообще не сработает. Вы можете использовать метод 1 ответа @Giacomo1968 и явно использовать ssh-add
утилиту macOS .bash_profile
для добавления всех ключей в цепочку для ключей, то есть:
/usr/bin/ssh-add -A
Как упоминалось в комментарии выше , вам может потребоваться сначала добавить ключ в цепочку для ключей: например/usr/bin/ssh-add -K .ssh/github
Я обнаружил, что ssh-add -K
мне дали " незаконный вариант -- К ". Это было связано с тем, что ssh-add был странной версией из /usr/local/bin (устанавливался brew?). Я смог добавить ключ, специально используя ssh-add, расположенный в /usr/bin:
/usr/bin/ssh-add -K ~/.ssh/id_rsa
Изменение ~/.ssh/config для добавления UseKeyChain для всех хостов достаточно, чтобы остановить этот повторяющийся кошмар;)
Host *
UseKeychain yes
Если файл пуст или не существует, просто создайте и/или добавьте указанную выше конфигурацию.
Я обновился до Mac OS X Sierra (10.12.6). Я мог подключиться по ssh к другим хостам, но не к github.com.
Вот что мне пришлось вставить в ~/.ssh/config:
PubkeyAcceptedKeyTypes ssh-dss,ssh-rsa
После этого изменения я мог использовать github, как и раньше.
Ответ на аналогичный вопрос есть в этой ветке на Askubuntu. Я нашел отличное решение для этого, добавив плагин для оболочки oh-my-zsh, на который я переключился с bash.
модий
$ ssh-add -K
дает мнеssh-add: illegal option -- K
мизалигар
-K
. См. ответ @JakeGould для решения.странствующий незнакомец
Бен Кризи
мфорбс
ssh-add
: это должно быть/usr/bin/ssh-add
, а не то, что установлено доморощенным пивом, кондой и т. Д.