Автоматизированный ssh-keygen без пароля, как?


86

Я хотел бы создать автоматический скрипт, который вызывает ssh-keygenи создает несколько парных / закрытых пар ключей, которые я буду использовать позже. В принципе все работает хорошо с ....
ssh-keygen -b 2048 -t rsa -f /tmp/sshkey -q
... за исключением того, что он запрашивает у меня пароль, который будет шифровать ключи. Это делает - в настоящее время - автоматизацию трудной.

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

Что является (лучшим) решением этой проблемы?

-qВариант , который якобы означает «тихий / бесшумный» действительно все еще не избежать взаимодействия ключевой фразы. Также я не нашел что-то подобное
ssh-keygen ...... -q --no-passphrase

Пожалуйста, не начинайте проповедовать или рассказывать мне о плюсах и минусах «пропущенной фразы», ​​я знаю об этом. В интерактивной форме (не в виде скрипта) пользователь может просто дважды нажать [ENTER], и ключ будет сохранен в виде открытого текста. Это то, что я хочу достичь в сценарии, как это:

#! / Bin / Баш

command1
command2
вар = $ (command3)

# это не должно останавливать скрипт и запрашивать пароль
ssh-kegen -b 2048 -t rsa -f / tmp / sshkey -q

Ответы:


105

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

ssh-keygen -b 2048 -t rsa -f /tmp/sshkey -q -N ""

3
Это работает. В случае, если он /tmp/sshkeyуже существует, можно получить запрос на перезапись. Это может быть предотвращено с помощью перенаправления / закрытия стандартного ввода - например, путем добавления 0>&-.
maxschlepzig

34

Я нашел самый простой способ сделать то, что вы хотите, это (пример с использованием имени файла по умолчанию)

    cat /dev/zero | ssh-keygen -q -N ""

Если ~/.ssh/id_rsaфайл уже существует, команда выйдет без каких-либо изменений.

Если нет, вы получите новый ключ в этом имени файла.

В любом случае, вы ничего не перезаписали, и в конце вы знаете, что у вас есть ключ.


подтверждено: на lubuntu 14.04.2
user77115

Если вы действительно хотите, чтобы это было тихо, направьте вывод в / dev / null:cat /dev/zero | ssh-keygen -q -N "" > /dev/null
Крис Грегг,

На (по общему признанию старинном) SLES 11 вышеупомянутая команда не в состоянии произвести ключ. yes "" | ssh-keygen -N "" >&- 2>&-Однако работает очень хорошо и ничего не выводит (независимо от того, существует ли уже файл ключа), и не перезаписывает ранее существующий файл ключа.
Зрайм

Проверено на Ubuntu trusty (14.04)
Бинита Бхарати

2
Почему ты кот / dev / zero?
maxschlepzig


5

Вы можете использовать ожидать, чтобы отправить «ввод» для вас

cat test.sh
#!/bin/bash
set -x
XYZ=$(expect -c "
spawn ssh-keygen -b 2048 -t rsa -f /tmp/sshkey -q
expect \"Enter passphrase (empty for no passphrase):\"
send \"\r\"
expect \"Enter same passphrase again:\"
send \"\r\"
")

Но имейте в виду, что если файл / tmp / sshkey уже существует, он потерпит неудачу, поскольку выходные данные команды будут другими.


1
спасибо за вклад. Ожидание кажется даже более универсальным для задач такого же типа ... ну, в тех случаях, когда сценарии и взаимодействие с пользователем будут конфликтовать. Я буду знать о потенциальном конфликте, что / tmp / sshkey уже существует, и проверю его перед использованием вашей команды.
человечествоANDpeace

2

Я сделал простое эхо перед ssh-keygen. Такsu - <user> -c "echo |ssh-keygen -t rsa"

Это было проверено на Redhat 6


Я не думаю, что это лучший ответ из всех, но я думаю, что нет никаких оснований для отрицания либо, ребята.
cubuspl42

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.