Автоматическое нажатие клавиш ввода для сценария bash, генерирующего ключи ssh


102

Я хочу создать скрипт, который просто запускается ssh-keygen -t rsa. Но как перейти на него 3 раза войти?

Ответы:


218

Пытаться:

ssh-keygen -t rsa -N "" -f my.key

-N "" сообщает ему использовать пустую парольную фразу (то же самое, что и два ввода в интерактивном скрипте)

-f my.keyуказывает ему хранить ключ my.key(измените по своему усмотрению).

Все работает без каких-либо ключей ввода :)

Чтобы отправить ввод в интерактивный скрипт:

echo -e "\n\n\n" | ssh-keygen -t rsa

4
Это правильный ответ, но я все же хотел бы знать, как нажимать ввод более одного раза - в другом скрипте.
Славош

3
Конечно, обновлен ответ, чтобы включить в него, как отправлять новые строки в скрипт.
Руду 07

2
echo -e "\ n \ n \ n" | sshkeygen -t rsa у меня не работает, можете попробовать сами? Проходит только первый вход. Но на другом, простом скрипте он работает.
Славош

1
Я протестировал его перед тем, как опубликовать - он работает нормально, хотя похоже, что черта ssh-keygenупала - вы добавили это обратно? {отредактировано} Также - вы не можете запускать скрипт более одного раза - он меняет вопросы, чтобы подтвердить, что вы хотите перезаписать существующий _rsa
ключевой файл

13
Я бы рекомендовал использовать yes ""вместо echo -e "\n\n\n"( yesвыводит любой заданный аргумент [или «y» по умолчанию] в бесконечности - идеально подходит для таких ситуаций, когда нужно просто дать ответ «да» на все, что программа может запросить). yesкороче, и он должен ssh-keygenкогда-либо добавлять вопрос, на который также будет автоматически дан ответ. :)
zrajm


1

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

Воспользуйтесь ответом на этот вопрос .

yes y | ssh-keygen -q -t rsa -N '' >/dev/null

Перенаправление на null необходимо, чтобы отключить сообщение о перезаписи.


0
echo -e "\n"|ssh-keygen -t rsa -N ""

А? На самом деле здесь меньше символов новой строки, чем один из ответов, который, по вашему мнению, не работает (и это на подмножестве платформ, где echo -eизлучается что-то иное, чем -eвообще, что ssh-keygenдоступно не везде ).
Чарльз Даффи

... чтобы быть ясным, я использую производственное использование ssh-keygen -N ''как часть процедуры автоматической установки, и он вообще не читает stdin, поэтому нет необходимости в echo( любом echo варианте), переданном в него. (Конечно, я считаю, что stdin подключен к /dev/nullмоему производственному варианту использования; вполне может быть другое поведение, когда он подключен к TTY, но лучший ответ - это </dev/nullне так echo ... |)
Чарльз Даффи

1
Он запрашивает у меня имя файла: $ ssh-keygen -t rsa -N '' Generating public/private rsa key pair. Enter file in which to save the key (/home/dlyons/.ssh/id_rsa):
Mannix

0

Рекомендуется использовать ed25519 для безопасности и производительности.

yes "y" | ssh-keygen -o -a 100 -t ed25519 -C "Bla Bla" -f /mypath/bla -N ""

Вот

-o Формат ключа OpenSSH вместо старого PEM (требуется OpenSSH 6.5+)

-a Количество тестов первичности при скрининге кандидатов DH-GEX

-t Тип ключа (ed25519, RSA, DSA и т. Д.)

-f /mypath/bla Путь и имя выходного файла

-N "" Использовать пустую парольную фазу

и yes "y"без взаимодействия.

Будет создано два файла

/mypath/bla
/mypath/bla.pub

где blaфайл является частным и bla.pubобщедоступным.

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