Диалоговое окно пароля появляется, когда для разрешений закрытого ключа SSH установлено значение 0600.

Я установил свой закрытый ключ SSH ~/.ssh/id_rsaи установил для него разрешения 0600. Когда я подключаюсь к SSH-серверу, который использует мой закрытый ключ в Terminal.app через ssh, появляется диалоговое окно, в котором меня просят ввести пароль для доступа к id_rsaфайлу:

введите описание изображения здесь

Я вижу тот же диалог, когда подключаюсь к FTP-серверу с клиентом Interarchy GUI.

Обновление: я вижу это диалоговое окно каждый раз, когда подключаюсь, независимо от того, проверяю ли я «Запомнить пароль в моей связке ключей». Он появляется еще два раза, если нажата кнопка OK, независимо от того, что введено в поле пароля.

Когда я ослабляю эти разрешения, скажем, до 0640, я больше не вижу диалоговое окно с запросом моего пароля, но sshпрерывается со следующей ошибкой:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@
@ ВНИМАНИЕ: НЕЗАЩИЩЕННЫЙ ФАЙЛ ЧАСТНОГО КЛЮЧА! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@
Разрешения 0640 для «/Users/myusername/.ssh/id_rsa» слишком открыты.
Рекомендуется, чтобы ваши файлы закрытых ключей НЕ были доступны другим.
Этот закрытый ключ будет проигнорирован.
плохие разрешения: игнорируйте ключ: /Users/myusername/.ssh/id_rsa

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

Примечание. Я использую Mac OS X 10.6.8.

Ответы (19)

Убедитесь, что у вас есть соответствующий id_rsa.pubили id_dsa.pubв вашем ~/.sshкаталоге.

Когда у меня был, id_rsaно не соответствующий id_rsa.pub, Mac OS X продолжала появляться в диалоговом окне, и помните, что пароль в моей связке ключей ничего не делал.

cd ~/.ssh
ssh-keygen -y -f id_rsa > id_rsa.pub

сгенерировал для меня соответствующий файл открытого ключа.

Если у вас уже был там ваш открытый файл (переименуйте его в другое имя) и снова сгенерируйте открытый ключ с помощью приведенной выше команды, вы заметите, что сгенерированный и старый не равны. Каким-то образом более старые версии Mac OS X генерировали открытый ключ, который Lion больше не нравится, его повторное создание исправляет это.

Для любопытных ключ точно такой же, часть, которая меняется, заключается в том, что больше нет раздела «комментарии» после ключа в файле.

Это решение может не иметь особого смысла на первый взгляд, но попробуйте. У меня была точно такая же проблема, и она устранила ее. Я всегда использую пароль на своих ssh-ключах, и вы тоже должны это делать.
Это решение сработало для меня. Это не имеет смысла, но это работает! (OS X Лев)
Ничего себе, в этом нет никакого смысла, но это точно исправило много странного поведения в моей системе. Спасибо.
На всю жизнь я уже несколько дней не могу найти решение той же проблемы, и это исправило ее для меня. Это вообще не имеет смысла, но это решило мою проблему! Спасибо, проголосовал.
ОМГ спасибо! У меня сработало (горный лев и использование SourceTree), эти диалоги были такими раздражающими.
Re не имеет смысла — в некотором роде, вероятно, имеет. Процесс автоматического добавления ключа, вероятно, ожидает, что он сможет прочитать часть открытого ключа, и, если он не может, завершится с ошибкой.
Как сказал @AlexRecarey, мне это показалось странным, но я все равно сделал это, и у меня тоже сработало!
На самом деле я думал, что это IdentitiesOnly yes в моей конфигурации, потому что, когда я удалил его, ssh начал соблюдать ssh-agent. Если бы я нашел это всего несколько часов назад, черт возьми! +500!!
Такое произвольное шизофреническое поведение во многом объясняет, почему большинство людей не понимают (или не используют) криптографию, если только она не является автоматической (например, https).
О, я просто не думал иначе;)
@ Chepe77 нет, не так. Параметр -yssh-keygen используется для «чтения частного файла формата OpenSSH и вывода открытого ключа OpenSSH на стандартный вывод» — пожалуйста, прочтите справочную страницу для ssh-keygen, прежде чем выдавать подобные предупреждения. Ответ правильный.

Сначала запустите ssh-add -Kи проверьте, решает ли это вашу проблему.

Если не:

  • Удален файл rsa_id.pub и создан новый (должен находиться в ~/.ssh/):

    ssh-keygen -y -f id_rsa > id_rsa.pub
    
  • Гарантированные разрешения были установлены на 600 как для id_rsa, так и для id_rsa.pub (должны быть в ~/.ssh/):

    chmod 600 id_rsa*
    
  • Выполните следующую команду:

    ssh-add -K
    

После этого мне больше не предлагалось вводить пароль моего личного ключа. Это, по-видимому, фактически помещает пароль закрытого ключа в правильное расположение цепочки для ключей для использования OS X.

Сходил с ума, пока не наткнулся на вашу команду «ssh-add -K». Я не верю, насколько сложной стала OSX. +1000
между прочим, мне нужно было chmod 600(вместо 644), чтобы он работал
Закрытый ключ с 644 не bueno
ssh-add -Kрешил мою проблему
Не голосовать до тех пор, пока chmod 644 не будет исправлен на chmod 600, это небезопасно.
ssh-add -Kисправил мою проблему. Спасибо! Не уверен, что помешало ему работать в первую очередь.
Для тех из вас, кто использует альтернативную (например, доморощенную) версию ssh:/usr/bin/ssh-add -K ~/.ssh/mykey

В моем случае ssh-add -Kэто не помогло, мне пришлось указать ключ:

ssh-add ~/.ssh/id_rsa
больше нет -Kвариантов. Ваше решение исправил это. Интересно, зачем мне нужно было это делать. Никогда не было никаких запросов пароля.
Спасибо! Именно тогда OS X Sierra, наконец, запросила мой пароль id_rsa.
FWIW, у -Kменя флаг работал на Sierra 10.12.2
Ага. Я могу подтвердить. -K существует и исправляет проблему в новейшей Sierra! Хорошая работа @nathancahill.

Для macOS 10.12 Sierra ssh-add -Kнеобходимо запускать после каждой перезагрузки. Чтобы избежать этого, создайте ~/.ssh/configс этим контентом.

Host *
   AddKeysToAgent yes
   UseKeychain yes
   IdentityFile ~/.ssh/id_rsa

Apple добавила техническую заметку 2449 , в которой объясняется, что произошло.

До macOS Sierra ssh отображал диалоговое окно с запросом вашей парольной фразы и предлагал возможность сохранить ее в связке ключей. Некоторое время назад этот пользовательский интерфейс устарел и был удален.

Изменить: по-видимому, указывать хост и ключ не нужно. Просто добавить это достаточно.

AddKeysToAgent yes
UseKeychain yes
Это то, что сработало для меня. Сначала я попробовал ssh-add -K, но изменение работало только до перезагрузки.
Мне нужно было поставить AddKeysToAgentна верхний уровень ~/.ssh/config.

Вы должны где-то ввести парольную фразу для закрытого ключа, а OS X по умолчанию использует ssh-agent.

Если вы хотите использовать ssh-agent, но хотите избежать диалогового окна графического интерфейса, вы можете использовать ssh-add, чтобы добавить парольную фразу к агенту, а затем ssh, как обычно.

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

Спасибо, Алреша. Знаете ли вы, есть ли способ сохранить пароль вашего закрытого ключа в цепочке ключей Mac OS X на постоянной основе (а не только на один сеанс)?
Вы можете попробовать «ssh-add -K» в Терминале, но если есть ошибка, из-за которой флажок не работает, это тоже может не сработать. Я не хочу, чтобы мои пароли ssh хранились в цепочке для ключей, поэтому я не проверял это.
С помощью ssh-add -Kмне не нужно вводить пароль для подключения, но приглашение все равно появляется; Я просто отвергаю это.
ssh-add -K — это то, что вы используете, чтобы добавить свой пароль в связку ключей. Если вы не введете свой пароль, его нельзя будет поместить на связку ключей.
дополнение: как в Lion, так и в Snow Leopard, если я ввожу ssh-add -K, я получаю подсказку в Терминале, а не диалоговое окно.
Извините за путаницу. Я имел в виду, что после того, как я запустил ssh-add -Kи ввел свой пароль, в следующий раз, когда я попытаюсь подключиться к рассматриваемому серверу ssh, я все равно увижу запрос пароля Mac OS X.

Когда вы ослабляете разрешения, ключ игнорируется. Вы ничего не добьетесь этим.

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

Если вы установите флажок «Запомнить пароль в моей связке ключей», вам не придется вводить пароль каждый раз: он будет храниться в связке ключей вместе со всеми другими вашими паролями. Это рекомендуемый вариант.

Вы можете создать файл закрытого ключа без пароля. Вы можете изменить существующий файл закрытого ключа, чтобы он не был защищен паролем (изменение пароля влияет только на файл ключа, а не на сам ключ). В командной строке запустите ssh -p, введите существующую парольную фразу и оставьте поле для новой парольной фразы пустым. Наличие пустой парольной фразы сопряжено с риском для безопасности: любой, кто может получить доступ к вашему файлу закрытого ключа (например, получив доступ к вашим резервным копиям), может использовать его мгновенно.

Спасибо за ответ, хотя я забыл упомянуть одну вещь: проверка опции «Запомнить пароль в моей цепочке для ключей» не действует: диалоговое окно появляется снова при следующем подключении. (Использование пустой парольной фразы для меня не вариант.)
Предлагать заменить ключ, защищенный паролем, на ключ без пароля - действительно ужасная идея...

если вы добавили свой закрытый ключ в исходный каталог ~/.ssh и ввели ssh-add -K, чтобы добавить его в цепочку для ключей, и у вас есть содержимое открытого ключа, скопированное в .ssh/authorized_keys (для правильного account) на целевом сервере диалоговое окно исчезает.

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

У меня точно такая же проблема на Lion (Mac OS X 10.7). Я думаю, это ошибка ... Если аутентификация ssh является паролем, клиент сначала проходит через открытый ключ, что нормально. Однако, даже если вы решите сохранить парольную фразу в связке ключей (что не требуется для аутентификации по паролю), в следующий раз, когда будет установлено новое ssh-соединение, вас снова попросят ввести парольную фразу...

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

Не должно быть необходимости регенерировать ваши открытые ключи. Вы можете просто выполнить эти две команды:

chmod 0600 ~/.ssh/id_rsa.pub
ssh-add ~/.ssh/id_rsa

По сути, вам нужно ужесточить права доступа к файлу открытого ключа и добавить свой ключ в агент аутентификации OSX.

В последней версии macOS (10.12.2 — Sierra) это легко исправить. Просто отредактируйте файл ~/.ssh/config и включите опцию UseKeychain:

Host *
UseKeychain yes

Сохранить и решить.

Эта проблема возникла в моей системе OS X 10.7.4, когда ssh-agent умер. Перезагрузка устранила проблему. (Вы можете попробовать перезапустить ssh-agent, но я не знаю, достаточно ли умна цепочка для ключей, чтобы подобрать новый сокет ssh-agent.)

Это то, что моя проблема тоже исправлена ​​после того, как я спотыкался в течение часа.
  1. Убедитесь, что в ~/.ssh/ указан chmod 700.

  2. Убедитесь, что оба файла ~/.ssh/id* имеют chmod 600.

  3. Запустите /Applications/Utilities/Keychain Access.app и восстановите связку ключей.

  4. Выйти. (Перезагрузка не была бы ужасной идеей)

  5. Авторизоваться

  6. Если проблема не устранена, переместите существующие файлы ~/.ssh/id* на рабочий стол и попробуйте сгенерировать новые ключи с помощью ssh-keygen -t dsa -f ~/.ssh/id_dsa -C you@youremail.tldи посмотрите, будут ли новые ключи работать лучше.

Я на Lion, но IIRC Snow Leopard работал так же.

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

У меня не работает повторное создание открытого ключа (10.8) и создание нового ключа SSH. Если я, например, запускаю git pull после блокировки цепочки для ключей входа, появляется диалоговое окно с запросом пароля к ключу вместо того, чтобы сначала пытаться получить пароль из цепочки для ключей входа.

Однако, если я сначала убью ssh-agent, мне будет предложено ввести пароль цепочки ключей для входа, который затем извлекает пароль ключа SSH.

Привет, это выглядит как отдельный вопрос, а не ответ на этот вопрос. Можете ли вы повторно опубликовать как новый вопрос?

Еще один интересный вывод: если вы скопируете и вставите содержимое файла PEM, в конце может отсутствовать тире. Поэтому просто не забудьте добавить последнюю строку:

-----END RSA PRIVATE KEY-----
Нечто подобное заключается в том, что при вставке ключа ssh из чего-то вроде lastpass он вставляет все в одну строку. Это казалось мне проблемой, и после разделения закрытого ключа на пробелы обратно в правильный формат это сработало.

Мне пришлось сделать следующие шаги, чтобы заставить его работать.

# Change working directory
cd ~/.ssh
# Remove the old public key
rm id_rsa.pub
# Create a new public key
ssh-keygen -y -f id_rsa > id_rsa.pub
# Change permission
chmod 600 id_rsa*
# Add the key to ssh
ssh-add id_rsa
# Then finally test it (I used github)
ssh -i id_rsa.pub git@github.com

Последняя команда должна вывести что-то вроде:Hi <user>! You've successfully authenticated, but GitHub does not provide shell access.

У меня такая же проблема. Кажется, я исправил это, сделав это.

1) Сохранил резервную копию, переименовав в старые файлы id_dsa и id_dsa.pub.

2) Запустил новый кейген с пустой кодовой фразой.

Работает с заданием периода запуска, отслеживая удаленный сервер, а также входя в систему по ssh в терминале.

У меня есть функция быстрой авторизации в моем терминале, так как в моем .bash_profile есть следующее:

#~/.bash_profile    
function authme {
ssh $1 'cat >>.ssh/authorized_keys' <~/.ssh/id_dsa.pub
}

Таким образом, быстрый authme remoteserver.com скопирует новый удаленный ключ.

Я думаю, что ошибка связана с тем, что кодовая фраза не была преобразована (у моего старого Snow Leopard ее вообще не было).

Попробуйте это и посмотрите, поможет ли это.

На выполнение ушло не более 10 минут. Я целую вечность гуглил, чтобы узнать, есть ли другие упоминания об этом. Этот сайт был единственным!

Оуайн.

К сожалению, использование пустой кодовой фразы для меня не вариант.

У меня была похожая проблема. Оказалось, что закрытый ключ, который я использовал, был в неправильном формате. Я использовал генератор ключей PuTTY на своей машине Win, а ssh в OS X ожидает другого формата — формата Open SSH.

Оказалось, что инструмент, который я использовал для генерации этого ключа (генератор ключей PuTTY), имел возможность преобразовать мой закрытый ключ в формат, требуемый Open SSH.

Просто как:

  1. Открыть генератор ключей PuTTY
  2. Загрузите свой закрытый ключ
  3. Выберите Преобразования > Экспорт ключа OpenSSH.

Файл, который вы сохраните, содержит исходный закрытый ключ в правильном (OpenSSH) формате.

Убедитесь, что:

  1. Вы используете формат pem для своего закрытого ключа. Это связано с тем, что Mac использует клиент openssh, который работает с pem. ppk является собственным форматом putty и не совместим с openssh. Вы можете легко преобразовать ppk в pem с помощью putty keygen, если у вас есть только ppk.
  2. Права доступа к вашему pem-файлу равны 600. Закрытые ключи должны быть доступны только их владельцу. Таким образом, если разрешения предоставляют доступ для чтения кому-либо еще, это будет считаться угрозой безопасности.

Надеюсь, это должно решить проблему.

Используйте ключ .pem, а не ключ .ppk.

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