Автоматизуйте ssh-keygen -t rsa, щоб він не запитував парольну фразу


164

Мені потрібно автоматизувати ssh-keygen -t rsaз паролем, тобто ввести у відповідь.
Як я можу це зробити із сценарію оболонки?

Відповіді:


230

Щоб створити ключ SSH, не вимагаючи ввести парольну фразу, ви можете зробити наступне:

$ ssh-keygen -f id_rsa -t rsa -N ''

2
Працювали для мене! Github завжди просив пароль без опції -N, навіть коли не вводив пароль після запиту "Введіть пароль (порожній для без парольної фрази)"
Hollerweger

4
На RHEL 6 я отримав цю помилку: " ssh-keygen: option requires an argument -- N" :(
Ентоні О.

1
Гаразд це було, тому що я використовував dzdoкоманду перед ним, тому мені довелося написати:dzdo -i -u target_user ssh-keygen -f id_rsa -t rsa -N "''"
Ентоні О.

1
Здається, простір, що розділяє опцію та порожню парольну фразу, -N ''є значним. Коли я додав простір, це вдалося!
GH05T

33

Якщо вам потрібно зробити це з PowerShell у Windows, використовуйте:

ssh-keygen -f $Name -t rsa -N '""'

зауважте, що ви також повинні переконатися, що каталог вашого git bin знаходиться на вашому шляху:

$sshPath = "<path>\git\bin\"

$env:path += ";$sshPath"

Тоді для використання в PoshGit просто:

Add-SshKey "<path>\.shh\KeyFilename"

Дякую за це До речі, git\usr\binправильний реж.
майкінетор

4
Це не працює для мене. Я отримую помилку "Збереження клавіші" mykey "не вдалося: пароль занадто короткий (мінімум чотири символи)". Мені довелося перемикати подвійні / одиничні лапки, наприклад ssh-keygen -f $Name -t rsq -N '""'.
Аарон Дженсен

1
@AaronJensen те саме для мене. Дякуємо за виправлення. Я використав'""'
Тревор Салліван

@AaronJensen Дякую! '""'це єдиний варіант, який працював для мене.
Somnium

@ Daniel-Little Я не можу знайти модуль PoshGit, єдиний я знайшов це ім'я posh-git, який, схоже, не має цього командлета. Будь-яка інформація про нього?
Джим

18
$ ssh-keygen -f $HOME/.ssh/id_rsa -t rsa -N ''

Ця відповідь по суті є копією та вставкою з відповіді Shamoon
oᴉɹǝɥɔ

@ oᴉɹǝɥɔ Відповідь Шамона прямо не вказує шлях до приватного ключа.
GMaster

11

Просто виправлення відповіді 2 ... Я дізнався, що в моїй системі OL та RHEL назва файлу має бути id_rsa, а не id.rsa.

Отже, в системі OL або RHEL командою було б:

$ ssh-keygen -f id_rsa -t rsa -N ''

2
Наскільки я зрозумів, id_rsaце ім'я файлу за замовчуванням для ключа RSA, тому, якщо ви хочете дотримуватися типового, ви не змушені явно використовувати цю -fопцію.
danidemi

3
@danidemi, хоча ви маєте рацію, що це за замовчуванням, одна з причин визначення -fпараметра полягає в тому, що ви можете виконати це в сценарії. Ви можете просто підтвердити за замовчуванням, щоб відключити наступний запит.
Трістан Рейд

9

А як на рахунок :

ssh-keygen -q -t rsa -f ~/.ssh/id_rsa -N ''

Як зазначається в man ssh-keygen:

SYNOPSIS
     ssh-keygen [-q] [-b bits] [-t dsa | ecdsa | ed25519 | rsa | rsa1] [-N new_passphrase] [-C comment] [-f output_keyfile]
(...)
      -q      Silence ssh-keygen.

(Тобто з openssh-clientпакетом в Debian 9.4 протягу: OpenSSH_6.7p1 Debian-5+deb8u4)


Працювали для мене спасибі. (OpenSSH_7.6p1 Ubuntu-4ubuntu0.2)
Девід Вебстер

0

Мені потрібно було автоматизувати в скрипті bash команду ssh-keygen та остаточну відповідь, яка добре працює для мене:

echo -e "\n" | ssh-keygen -N "" &> /dev/null

Команда echo за допомогою -e інтерпретує "\ n" як клавішу Enter, але не працює з парольною фразою. Тоді за допомогою параметра -N "" (порожня парольна фраза) пароль буде порожнім і нічого не запитуватиме. &> / dev / null надсилає 'stdout' і 'stderr' в / dev / null, щоб нічого не друкувалося через дисплей.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.