Как выполнить ssh-keygen без приглашения

Я хочу автоматизировать создание пары ssh-ключей с помощью оболочки script на Centos7, и я пробовал

yes "y" | ssh-keygen -t rsa
echo "\n\n\n" | ssh-keygen...
echo | ssh-keygen..

вся эта команда не работает, просто введите один 'enter', а оболочка script остановлена ​​на "Введите кодовую фразу (пустую без кодовой фразы)", Я просто хочу знать, как моделировать mutiple 'enter' в оболочке непрерывно.

Большое спасибо, если кто-нибудь может помочь!

Ответ 1

Просто введите пропуск void, используя флаг -N:

ssh-keygen -t rsa -N ""

со страницы руководства:

 -N new_passphrase
         Provides the new passphrase.

Перезаписать id_rsa

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

Ответ 2

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

ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa

Таким образом, пользователю не будет предложено вводить какие-либо данные - не существует файлов id_rsa.

Ответ 3

Для меня, я должен был использовать комбинацию ответа @Lukasz и @Juan один, при использовании в команде ssh

ssh -p$SSH_PORT -q [email protected]$INSTANCE_IP 'yes y | ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa'

Ответ 4

Ни один из ответов не делает именно то, что ожидается. Требуемое поведение: запустите ssh-keygen с настройками по умолчанию (например, если мы только что нажали Enter), не запрашивая ввода.

Команда для запуска:

yes '' | ssh-keygen -N >/dev/null

пропустите>/dev/null, если вы хотите напечатать вывод.

Expalaination:
да y спам, который ssh-keygen воспринимает буквально и создает ключи в $ PWD/y и $ PWD/y.pub. да '' спамит пустые строки (Enter), что мы и хотим. Задать файл с помощью -f ~/.ssh/id_rsa не удастся, если каталог .ssh не существует. Опция -t rsa не требуется, если rsa является типом по умолчанию (мы в любом случае вводим спам). Ключевая фраза не читается из стандартного ввода (который мы вводим спамом), а непосредственно с клавиатуры, поэтому ничто не может его перехватить. По этой причине вам нужно указать -N '' для пустой парольной фразы.