Žádná z odpovědí nedělá přesně to, co se očekává. Požadované chování:spusťte ssh-keygen s výchozím nastavením (jako kdybychom spamovali Enter), aniž byste kdy požadovali zadání.
Příkaz ke spuštění je:
yes '' | ssh-keygen -N '' > /dev/null
Pokud chcete tisknout výstup, vynechejte>/dev/null.
Vysvětlení:
yes y
spamuje 'y', což ssh-keygen bere doslova a vytváří klíče v $PWD/y a $PWD/y.pub . yes ''
spamuje prázdné řádky (Enter), což je to, co chceme. Zadání souboru pomocí -f ~/.ssh/id_rsa selže, pokud adresář .ssh neexistuje. Volba -t rsa není vyžadována, pokud je rsa výchozím typem (tak jako tak posíláme spam). Přístupová fráze se nečte ze stdin (na který spamujeme), ale přímo z klávesnice, takže ji nic nemůže zachytit. Z tohoto důvodu musíte zadat -N '' pro prázdnou přístupovou frázi.
Pro mě jsem musel použít kombinaci odpovědi @Lukasz a @Juan, když jsem použil příkaz ssh
ssh -p$SSH_PORT -q [email protected]$INSTANCE_IP 'yes y | ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa'
Pokud nechcete uživatele vyzvat k zadání souboru, do kterého má klíč uložit, můžete přidat příznak výstupu souboru -f
k příkazu.
ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa
Tímto způsobem nebude uživatel vyzván k zadání žádného vstupu – pokud není id_rsa soubor(y) již existují.
Musíme provést dva kroky automaticky:
-
Zadejte přístupovou frázi . Použijte
-N
flag (neplatný řetězec pro tento příklad):ssh-keygen -t rsa -N ''
-
Přepsat soubor klíče :
Použijte -f
zadejte cestu (v tomto příkladu id_rsa
) plus řetězec zde odpovědět ano na následující otázku:
ssh-keygen -q -t rsa -N '' -f ~/.ssh/id_rsa <<<y >/dev/null 2>&1
Nebo pod bash
jako shell, pokud určitě chcete přepsat předchozí , použijte pouze řetězec zde k podávání příkazu se všemi potřebnými vstupy :
ssh-keygen -q -t rsa -N '' <<< $'\ny' >/dev/null 2>&1
Od ssh-keygen
muž stránka:
-N new_passphrase provides the new passphrase. -q silence ssh-keygen. -f filename specifies the filename of the key file.
Vysvětlení krok za krokem
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/klashxx/.ssh/id_rsa):
1 ) Chcete-li se vyhnout zadávání klíče, použijte -f
:
$ ssh-keygen -t rsa -f ~/.ssh/id_rsa
Generating public/private rsa key pair.
/home/klashxx/.ssh/id_rsa already exists.
Overwrite (y/n)?
POZOR :Pokud vás nezajímá název souboru RSA a určitě chcete přepsat předchozí, přečtěte si pokyny pod bodem čtyři.
2 ) Nyní musíme odpovědět „y “ automaticky na přepsat otázku (použijme řetězec zde pro tuto práci):
$ ssh-keygen -t rsa -f ~/.ssh/id_rsa <<< y
Generating public/private rsa key pair.
/home/klashxx/.ssh/id_rsa already exists.
Overwrite (y/n)? Enter passphrase (empty for no passphrase):
3 ) Nakonec použijeme -N
příznak pro zadání neplatného průchodu:
$ ssh-keygen -t rsa -N '' -f ~/.ssh/id_rsa <<< y
Generating public/private rsa key pair.
/home/klashxx/.ssh/id_rsa already exists.
Overwrite (y/n)? Your identification has been saved in /home/klashxx/.ssh/id_rsa.
Your public key has been saved in /home/klashxx/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:Xo0t6caMB/8TSsigxfY28JIfqYjyqxRZrFrPncx5yiU [email protected]
The key's randomart image is:
+---[RSA 2048]----+
| |
| . |
| o . |
| + * = |
| +. + BSo= o |
|...o.+o+XO... |
|.. .o.E==+B. . |
|o . ...=.o... |
|.+o. o .. |
+----[SHA256]-----+
4 ) Míč navíc , vyčistěte výstup, jen zkontrolujte návratový kód:
$ ssh-keygen -q -t rsa -N '' -f ~/.ssh/id_rsa <<<y >/dev/null 2>&1
$ echo $?
0
Alternativní cesta k přepsání předchozího souboru RSA (není potřeba příznak -f)
POZNÁMKA :Pouze bash
jako mušle.
Pokud vás nezajímá název RSA a chcete jej pouze přepsat, musíme automaticky odpovědět na tyto dvě otázky:
Zadejte soubor, do kterého se má klíč uložit:/example/path/.ssh/id_rsa již existuje.
Přepsat (y/n)?
Pokud to uděláme ručně, u první otázky stačí stisknout enter a pro druhý zadejte y
a stiskněte enter
.
Tyto akce můžeme simulovat pomocí následujícího řetězce :
$'\ny'
Z bash
manuálová stránka:
Slova ve tvaru $'string' jsou zpracována speciálně. Slovo se rozšíří na "řetězec", přičemž znaky s escapováním zpětného lomítka jsou nahrazeny podle specifikace standardu ANSI C.
\n nový řádek
Pokud tedy použijeme od
pro analýzu našeho řetězce:
cat - <<< $'\ny' | od -c
0000000 \n y \n
Vidíme, že dostáváme právě to, co potřebujeme k zodpovězení otázek.
Body 1 a 2 lze shrnout do :
ssh-keygen -q -t rsa <<< $'\ny'
A poslední příkaz bude:
$ ssh-keygen -q -t rsa -N '' <<< $'\ny' >/dev/null 2>&1
$ echo $?
0
Sláva
@lukasz-dynowski, @redochka, @mellow-yellow, @yeti a ostatní lidé v tomto vláknu.