Автоматическое нажатие клавиш ввода для сценария 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
22

версия с парольной фразой:

$ ssh-keygen -t rsa -b 4096 -C "comment" -P "examplePassphrase" -f "desired pathAndName" -q 
  • -q для молчания

Источник http://linux.die.net/man/1/ssh-keygen

Мишель Марро
источник
4
Используйте -P для существующей кодовой фразы, используйте -N для новой
brianlmerritt
1

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

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

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

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

шамокс
источник
0
echo -e "\n"|ssh-keygen -t rsa -N ""
Mannix
источник
А? На самом деле здесь меньше символов новой строки, чем один из ответов, который, по вашему мнению, не работает (и это на подмножестве платформ, где 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общедоступным.

Мадан Сапкота
источник