GNU/Linux >> Znalost Linux >  >> Linux

Jak spustit ssh-keygen bez výzvy

Žá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:

  1. Zadejte přístupovou frázi . Použijte -N flag (neplatný řetězec pro tento příklad):

    ssh-keygen -t rsa -N ''

  2. 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:

  1. Zadejte soubor, do kterého se má klíč uložit:/example/path/.ssh/id_rsa již existuje.

  2. 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.


Linux
  1. Jak otestovat balíček bez jeho instalace v Linuxu

  2. Jak provést příkaz v prostředí Shell bez jeho uložení do historie? [Tipy pro Linux]

  3. Jak rekurzivně odebrat oprávnění ke spouštění ze souborů, aniž byste se dotkli složek?

  1. Ssh – Jak spustit Ssh-add automaticky, bez výzvy k zadání hesla?

  2. Jak vypnout bez výzvy k potvrzení?

  3. ssh-keygen - jak nastavit klíč rsa s určitým uživatelským jménem

  1. Jak vynutit přepsání příkazu cp bez potvrzení

  2. Jak spustit soubor bez přípony .sh v shellu

  3. Jak vzdáleně spustit příkaz ssh a příkaz sudo bez hesla