Как удалить ключевую фразу для ключа SSH без необходимости создания нового ключа?

1035

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

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

байт
источник
9
Я думаю, что строгий ответ на самом деле является ответом Торстена Марека. Трюк ssh-agent может быть тем, что вы ищете, но это ответ на другой вопрос.
Задание от
1
Фраза-пароль - это не просто ключ для разблокировки закрытого ключа SSH, но и часть механизма шифрования. Одна часть - ваш SSH-ключ, другая - пароль, введенный вручную. Только если обе части верны, составной ключ, сгенерированный из них на лету, будет действительным. Таким образом, другая ключевая фраза соответствует другому SSH-ключу (и никакая ключевая фраза не является частным случаем «другой ключевой фразы»).
Пол
97
Закрытие таких вопросов похоже на обсуждение побочных эффектов в языках программирования, поскольку они «чистые» или нет. Пуристы всегда впадают в бешенство, в то время как другим наплевать, потому что это полезная функция и облегчает жизнь. Нужен ssh, даже если он не связан строго с программированием ... не закрывайте такие вопросы. : |
sjas

Ответы:

1935

Короткий ответ:

$ ssh-keygen -p

Затем вам будет предложено ввести местоположение ключевого файла, старую парольную фразу и новую парольную фразу (которую можно оставить пустым, чтобы не иметь парольной фразы).


Если вы хотите сделать все это в одной строке без подсказок, сделайте:

$ ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]

Важно: Помните, что при выполнении команд они обычно регистрируются в вашем ~/.bash_historyфайле (или аналогичном) в виде простого текста, включая все предоставленные аргументы (т.е. парольные фразы в данном случае). Поэтому рекомендуется использовать первый вариант, если у вас нет особых причин поступать иначе.

Обратите внимание, что вы все равно можете использовать -f keyfileбез указания -Pnor -Nи что по умолчанию используется ключевой файл ~/.ssh/id_rsa, поэтому во многих случаях он даже не нужен.

Возможно, вы захотите использовать ssh-agent, который может на некоторое время кэшировать фразу-пароль. Последние версии gpg-agent также поддерживают протокол, используемый ssh-agent.

Торстен Марек
источник
464
Чтобы быть явным: вы можете просто запустить ssh-keygen -pв терминале. Затем вам будет предложено ~/.ssh/id_rsaввести ключевой файл (по умолчанию это правильный файл для меня ), старую фразу-пароль (введите то, что у вас есть сейчас) и новую фразу-пароль (ничего не вводите).
Хенрик N
34
Ex. :ssh-keygen -p -P oldpassphrase -N "" -f ~/.ssh/id_rsa
Федир Рыхтик
24
-1 для того, чтобы пользователь ввел свой пароль в терминале и сделал его доступным через ~/.bash_history. Лучше набрать:$ cd ~/.ssh && ssh-keygen -f id_dsa -p
betoharres
5
Вы, ребята, должны заметить, что если вы вводите команду, чтобы оболочка запустила (белое) пространство, то эта команда не записывается в ~/.bash_hstoryIe. используйте `ssh-keygen -p -P oldpassphrase -N" "-f ~ / .ssh / id_rsa` и все в порядке (если у вас там нет другого кейлоггера). Вы также можете избавиться от записи из истории ..
Огромный
14
Возможно, стоит добавить строку, в которой говорится, что это перезапишет существующий файл, а не запросит новое местоположение.
Ларс Франк
46

$ ssh-keygen -p работал на меня

Открыл git bash. Вставлено:$ ssh-keygen -p

Нажмите ввод для местоположения по умолчанию.

Введите старый пароль

Введите новый пароль - ПУСТО

Подтвердите новый пароль - ПУСТО

БУМ боль от ввода парольной фразы для git push прошла.

Спасибо!

Каран
источник
Если, когда вы нажмете Enter, $ ssh-keygen -pи ваш ключ не будет в местоположении по умолчанию, скажем (/Users/yourname/.ssh/id_rsa), вы можете ответить, поставив, /Users/yourname/.ssh/yourkeyкогда будет предложено
Chigozie Orunta
37

Возможно, вы захотите добавить следующее в ваш .bash_profile (или эквивалентный), который запускает ssh-agent при входе в систему.

if [ -f ~/.agent.env ] ; then
    . ~/.agent.env > /dev/null
    if ! kill -0 $SSH_AGENT_PID > /dev/null 2>&1; then
        echo "Stale agent file found. Spawning new agent… "
        eval `ssh-agent | tee ~/.agent.env`
        ssh-add
    fi 
else
    echo "Starting ssh-agent"
    eval `ssh-agent | tee ~/.agent.env`
    ssh-add
fi

В некоторых дистрибутивах Linux (Ubuntu, Debian) вы можете использовать:

ssh-copy-id -i ~/.ssh/id_dsa.pub username@host

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

Вы можете прочитать больше здесь и здесь .

mlambie
источник
7
Разве современный дистрибутив не запускает ssh-agent из коробки?
Троэльс Арвин
В некоторых дистрибутивах Linux (Ubuntu, Debian) вы можете использовать: ssh-copy-id -i ~ / .ssh / id_dsa.pub username @ host Если, конечно, у вас есть доступ таким образом. И хотя это с 2008 года, возможно, его следует отредактировать так, чтобы он ссылался на id_rsa.pub (да, я мог бы отредактировать его, но я не чувствую себя комфортно, делая это для чужих работ - и особенно это касается чего-то подобного).
Прифтан
@TroelsArvin Да. Но иногда бывают случаи, когда его убивают (хотя обстоятельства, с которыми я столкнулся, не приходят в голову - если, возможно, у X11 не возникнет проблема, и вам не придется ее перезапускать ... это может быть одним из таких случаев). В этом случае вы должны «воссоздать» его.
Прифтан
8

Чтобы изменить или удалить фразу, я часто нахожу , что проще передать только pи fфлаги, то пусть система подскажите мне поставить ключевые фразы:

ssh-keygen -p -f <name-of-private-key>

Например:

ssh-keygen -p -f id_rsa

Введите пустой пароль, если вы хотите удалить фразу-пароль.

Пример запуска для удаления или изменения пароля выглядит примерно так:

ssh-keygen -p -f id_rsa
Enter old passphrase: 
Key has comment 'bcuser@pl1909'
Enter new passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved with the new passphrase.

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

ssh-keygen -p -f id_rsa
Key has comment 'charlie@elf-path'
Enter new passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved with the new passphrase.
ccalvert
источник
3

В Windows вы можете использовать PuttyGen, чтобы загрузить файл закрытого ключа, удалить фразу-пароль и затем перезаписать существующий файл закрытого ключа.

Аджит Гоэль
источник
2

На Mac вы можете хранить фразу-пароль для вашего частного ключа ssh в цепочке для ключей, что делает его использование прозрачным. Если вы вошли в систему, она доступна, когда вы вышли из системы, ваш пользователь root не может ее использовать. Удаление парольной фразы - плохая идея, потому что ее может использовать любой, у кого есть файл.

ssh-keygen -K

Добавьте это к ~/.ssh/config

UseKeychain yes
bbaassssiiee
источник