Автоматизируйте ssh-keygen -t rsa, чтобы он не запрашивал пароль

164

Мне нужно автоматизировать ssh-keygen -t rsaбез пароля, т.е. введите в приглашении.
Как я могу сделать это из сценария оболочки?

Tampa
источник

Ответы:

230

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

$ ssh-keygen -f id_rsa -t rsa -N ''
Shamoon
источник
2
Работал на меня! Github всегда запрашивал пароль без опции -N, даже если не вводить пароль после запроса «Введите кодовую фразу (пусто для парольной фразы)»
Hollerweger,
4
На RHEL 6 я получил эту ошибку: " ssh-keygen: option requires an argument -- N" :(
Энтони О.
1
Хорошо, это потому, что я использовал dzdoкоманду перед ним, поэтому мне пришлось написать:dzdo -i -u target_user ssh-keygen -f id_rsa -t rsa -N "''"
Энтони О.
1
Похоже, что пробел, разделяющий опцию и пустую фразу-пароль, -N ''имеет большое значение. Когда я добавил пробел, это удалось!
GH05T
33

Если вам нужно сделать это из PowerShell в Windows, используйте:

ssh-keygen -f $Name -t rsa -N '""'

обратите внимание, что вы также должны убедиться, что каталог git bin находится на вашем пути:

$sshPath = "<path>\git\bin\"

$env:path += ";$sshPath"

Тогда использовать его в PoshGit это просто:

Add-SshKey "<path>\.shh\KeyFilename"
Даниэль Литтл
источник
Спасибо за это. Кстати, git\usr\binправильный реж.
майкинетор
4
Это не работает для меня. Я получаю сообщение об ошибке «Не удалось сохранить ключ« mykey »: слишком короткая фраза (не менее четырех символов)». Мне пришлось переключить двойные / одинарные кавычки, например ssh-keygen -f $Name -t rsq -N '""'.
Аарон Дженсен
1
@AaronJensen то же самое для меня. Спасибо за исправление. Я использовал'""'
Тревор Салливан
@AaronJensen Спасибо! '""'это единственный вариант, который работал для меня.
Somnium
@ Daniel-Little Я не могу найти модуль PoshGit, единственное, что я нахожу с этим именем, это Posh-Git, который, похоже, не имеет этого командлета. Есть еще информация об этом?
Джим
18
$ ssh-keygen -f $HOME/.ssh/id_rsa -t rsa -N ''
GMaster
источник
Этот ответ по сути является копией и
вставкой
@ oᴉɹǝɥɔ Ответ Shamoon не указывает явно путь к закрытому ключу.
GMaster
11

Просто поправка к ответу 2 ... Я обнаружил, что в моей системе OL и RHEL имя файла должно быть id_rsa, а не id.rsa.

Таким образом, в системе OL или RHEL команда будет выглядеть так:

$ ssh-keygen -f id_rsa -t rsa -N ''
ASHU
источник
2
Насколько я понял, id_rsaэто имя файла по умолчанию для ключа RSA, поэтому, если вы хотите придерживаться значения по умолчанию, вы не обязаны явно использовать эту -fопцию.
Данидеми
3
@danidemi, хотя вы правы в том, что это значение по умолчанию, одна из причин, по которой вы указываете эту -fопцию, заключается в том, что вы можете выполнить это в скрипте. Вы можете просто подтвердить значение по умолчанию, чтобы отключить последующее приглашение.
Тристан Рейд
9

Что о :

ssh-keygen -q -t rsa -f ~/.ssh/id_rsa -N ''

Как отмечено в man ssh-keygen:

SYNOPSIS
     ssh-keygen [-q] [-b bits] [-t dsa | ecdsa | ed25519 | rsa | rsa1] [-N new_passphrase] [-C comment] [-f output_keyfile]
(...)
      -q      Silence ssh-keygen.

(то есть с openssh-clientпакетом в Debian 9.4 протяжения: OpenSSH_6.7p1 Debian-5+deb8u4)

Manumie
источник
Работал на меня, спасибо. (OpenSSH_7.6p1 Ubuntu-4ubuntu0.2)
Дэвид Вебстер
0

Мне нужно было автоматизировать в bash-скрипте команду ssh-keygen и окончательный ответ, который мне подходит:

echo -e "\n" | ssh-keygen -N "" &> /dev/null

Команда echo с параметром -e интерпретирует «\ n» как клавишу ввода, но не работает с парольной фразой. Затем, используя опцию -N "" (пустая фраза-пароль), пароль будет пустым и ничего не будет запрашивать. &> / dev / null отправит 'stdout' и 'stderr' в / dev / null, поэтому на дисплее ничего не печатается.

mponceantolin
источник