Як автоматизований ssh-keygen без парольної фрази, як?


86

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

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

Яке (найкраще) рішення цієї проблеми?

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

Будь ласка, не починайте проповідувати про чи мінуси про «мінуси пропущеної фрази», я це знаю. У інтерактивній формі (не як сценарій) користувач може просто натиснути [ENTER] двічі, і ключ буде збережено як відкритий текст. Це я хочу досягти у такому сценарії:

#! / бін / баш

команда1
команда2
var = $ (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вже існує, ви отримуєте запит на перезапис. Це можна запобігти за допомогою перенаправлення / закриття stdin - наприклад, шляхом додавання 0>&-.
maxschlepzig

34

Найпростіший спосіб, який я знайшов робити те, що ви хочете, це це (наприклад, використовуючи ім'я файлу за замовчуванням)

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

Якщо ~/.ssh/id_rsaфайл вже існує, команда вийде, не змінюючи нічого.

Якщо ні, то ви отримаєте абсолютно новий ключ у цьому імені файлу.

Так чи інакше, ви нічого не переписали, і в кінці ви знаєте, що у вас є ключ.


підтверджено: в lubuntu 14.04.2
користувач77115

Якщо ви дійсно хочете, щоб це було тихо, передайте вихід / dev / null:cat /dev/zero | ssh-keygen -q -N "" > /dev/null
Кріс Грегг

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

Підтверджено на
Trubu

2
Чому ти кіт / dev / zero?
maxschlepzig

9

Це працювало для мене:

ssh-keygen -t rsa -f /home/oracle/.ssh/id_rsa -q -P ""

Параметр -P"парольна фраза" ""є порожньою фразою.


key_save_private: Немає такого файлу чи каталогу
Dimitri Kopriwa

5
-P <passphrase>Варіант полягає в наданні (старий) пароль. linux.die.net/man/1/ssh-keygen
Gianfranco P.

5

Ви можете використовувати очікувати, щоб надіслати "enter" для вас

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.