GNU/Linux >> Linux Esercitazione >  >> Linux

Come eseguire ssh-keygen senza prompt

Nessuna delle risposte fa esattamente ciò che ci si aspetta. Il comportamento desiderato:esegui ssh-keygen con le impostazioni predefinite (come se avessimo appena spammato Invio) senza mai chiedere input.

Il comando da eseguire è:

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

tralascia>/dev/null se vuoi stampare l'output.

Spiegazione:
yes y spam 'y', che ssh-keygen prende alla lettera e crea le chiavi in ​​$PWD/y e $PWD/y.pub . yes '' invia spam righe vuote (Invio) che è ciò che vogliamo. Specificare il file con -f ~/.ssh/id_rsa fallisce se la directory .ssh non esiste. L'opzione -t rsa non è richiesta se rsa è il tipo predefinito (stiamo comunque inviando spam). La passphrase non viene letta da stdin (su cui stiamo inserendo lo spamming) ma direttamente dalla tastiera in modo che nulla possa intercettarla. Per questo motivo è necessario specificare -N '' per passphrase vuota.


Per me, ho dovuto usare la combinazione della risposta di @Lukasz e quella di @Juan, quando si utilizzava il comando ssh

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

Se non si desidera richiedere all'utente un file in cui salvare la chiave, è possibile aggiungere il flag di output del file -f al comando.

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

In questo modo all'utente non verrà richiesto alcun input, a meno che id_rsa i file esistono già.


Dobbiamo compiere due passaggi automaticamente:

  1. Inserisci una passphrase . Usa il -N flag (stringa vuota per questo esempio):

    ssh-keygen -t rsa -N ''

  2. Sovrascrivi il file chiave :

Usa -f per inserire il percorso (in questo esempio id_rsa ) più una qui-stringa per rispondere alla seguente domanda:

ssh-keygen -q -t rsa -N '' -f ~/.ssh/id_rsa <<<y >/dev/null 2>&1

Oppure, sotto un bash come shell, se certamente vuoi sovrascrivere il precedente , usa solo una qui-stringa per alimentare il comando con tutti gli input necessari :

ssh-keygen -q -t rsa -N '' <<< $'\ny' >/dev/null 2>&1

Da ssh-keygen uomo pagina:

  -N new_passphrase provides the new passphrase.
  -q                silence ssh-keygen.
  -f filename       specifies the filename of the key file.

Spiegazione passo passo

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/klashxx/.ssh/id_rsa):

1 ) Per evitare di inserire la chiave utilizzare -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)?

ATTENZIONE :Se non ti interessa il nome del file RSA e sicuramente vuoi sovrascrivere quello precedente, controlla le istruzioni sotto il punto quattro.

2 ) Ora dobbiamo rispondere "y " automaticamente alla domanda di sovrascrittura (usiamo una qui-stringa per quel lavoro):

$ 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 ) Infine useremo il -N flag per inserire un passaggio nullo:

$ 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 ) Palla extra , pulisci l'output, basta controllare il codice di ritorno:

$ ssh-keygen -q -t rsa -N '' -f ~/.ssh/id_rsa <<<y >/dev/null 2>&1
$ echo $?
0

Un percorso alternativo per sovrascrivere il file RSA precedente (non è necessario il flag -f)

NOTA :Solo bash come conchiglie.

Se non ti interessa il nome RSA e vuoi solo sovrascriverlo, dobbiamo rispondere automaticamente a queste due domande:

  1. Inserisci il file in cui salvare la chiave:/example/path/.ssh/id_rsa esiste già.

  2. Sovrascrivere (y/n)?

Se lo facciamo a mano, per la prima domanda dobbiamo solo premere invio , e per il secondo digita y e premi enter .

Possiamo simulare queste azioni utilizzando la seguente qui-stringa :

$'\ny'

Dal bash pagina man:

Le parole della forma $'stringa' sono trattate in modo speciale. La parola si espande in "stringa", con i caratteri con escape backslash sostituiti come specificato dallo standard ANSI C.

\n nuova riga

Quindi, se usiamo od per analizzare la nostra stringa:

cat - <<< $'\ny' | od -c
0000000  \n   y  \n

Vediamo che stiamo ottenendo proprio ciò di cui abbiamo bisogno per rispondere alle domande.

I punti 1 e 2 possono essere riassunti in :

ssh-keygen -q -t rsa  <<< $'\ny'

E il comando finale sarà:

$ ssh-keygen -q -t rsa -N '' <<< $'\ny' >/dev/null 2>&1
$ echo $?
0

Complimenti

@lukasz-dynowski, @redochka, @mellow-yellow, @yeti e il resto delle persone in questo thread.


Linux
  1. Come testare un pacchetto senza installarlo in Linux

  2. Come abbreviare il prompt di Bash in Linux?

  3. Come rimuovere ricorsivamente le autorizzazioni di esecuzione dai file senza toccare le cartelle?

  4. Ssh:come eseguire automaticamente Ssh-add, senza una richiesta di password?

  5. Come spegnere senza il prompt di conferma?

Come personalizzare il prompt di Bash in Linux

Come eseguire un comando Shell con Python

Come eseguire un programma specifico come root senza una richiesta di password?

Come eseguire un comando in uno script della shell?

Come eseguire il file python in linux

Come eseguire un file senza estensione .sh nella shell