Automatizza ssh-keygen -t rsa in modo che non richieda una passphrase


164

Ho bisogno di automatizzare ssh-keygen -t rsasenza una password, cioè inserire al prompt.
Come posso farlo da uno script di shell?

Risposte:


230

Per generare una coppia di chiavi SSH senza che venga richiesta una passphrase, è possibile effettuare le seguenti operazioni:

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

2
Ha funzionato per me! Github ha sempre chiesto una password senza l'opzione -N anche quando non si immette un passwort dopo il promt "Inserisci passphrase (vuoto per nessuna passphrase)"
Hollerweger,

4
Su RHEL 6, ho riscontrato questo errore: " ssh-keygen: option requires an argument -- N" :(
Anthony O.

1
OK, questo perché ho usato il dzdocomando di fronte, quindi ho dovuto scrivere:dzdo -i -u target_user ssh-keygen -f id_rsa -t rsa -N "''"
Anthony O.

1
Sembra che lo spazio che separa l'opzione e la passphrase vuota -N ''sia significativo. Quando ho aggiunto lo spazio è riuscito!
GH05T,

33

Se è necessario eseguire questa operazione da PowerShell in Windows, utilizzare:

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

nota anche che devi assicurarti che la directory git bin sia nel tuo percorso:

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

$env:path += ";$sshPath"

Quindi per usarlo in PoshGit è solo:

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

Grazie per questo. A proposito, git\usr\binè la directory corretta.
Majkinetor,

4
Questo non funziona per me. Viene visualizzato l'errore "Salvataggio chiave" mykey "non riuscito: passphrase troppo breve (minimo quattro caratteri)". Ho dovuto cambiare le virgolette doppie / singole, ad es ssh-keygen -f $Name -t rsq -N '""'.
Aaron Jensen,

1
@AaronJensen stesso per me. Grazie per la correzione. Ho usato'""'
Trevor Sullivan il

@AaronJensen Grazie! '""'è l'unica variante che ha funzionato per me.
Somnium,

@ Daniel-Little Non riesco a trovare un modulo PoshGit, l'unico che trovo con questo nome è posh-git che non sembra avere questo cmdlet. Altre informazioni su di esso?
Jim

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

Questa risposta è essenzialmente il copia e incolla dalla risposta da Shamoon
oᴉɹǝɥɔ

@ oᴉɹǝɥɔ La risposta di Shamoon non specifica esplicitamente il percorso della chiave privata.
GMaster,

11

Solo una correzione per rispondere 2 ... Ho scoperto sul mio sistema OL e RHEL il nome del file dovrebbe essere id_rsa non id.rsa.

Quindi su un sistema OL o RHEL il comando sarebbe:

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

2
Per quanto ho capito id_rsaè il nome del file predefinito per una chiave RSA, quindi se si desidera attenersi al valore predefinito, non si è costretti a utilizzare esplicitamente l' -fopzione.
danidemi,

3
@danidemi mentre hai ragione sul fatto che è l'impostazione predefinita, un motivo per specificare l' -fopzione è che puoi eseguirlo in uno script. Puoi semplicemente riaffermare il valore predefinito per disabilitare il prompt successivo.
Tristan Reid,

9

Che dire :

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

Come notato in 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.

(cioè con openssh-clientpacchetto Debian 9.4 stirata: OpenSSH_6.7p1 Debian-5+deb8u4)


Ha funzionato per me grazie. (OpenSSH_7.6p1 Ubuntu-4ubuntu0.2)
David Webster

0

Avevo bisogno di automatizzare in uno script bash il comando ssh-keygen e la risposta finale che funziona bene per me:

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

Il comando echo con -e interpreta "\ n" come un tasto Invio, ma non funziona con la passphrase. Quindi usando l'opzione -N "" (passphrase vuota) la password sarà vuota e non chiederà nulla. &> / dev / null invierà 'stdout' e 'stderr' a / dev / null in modo che nulla venga stampato sul display.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.