Come automatizzato ssh-keygen senza passphrase, come?


86

Vorrei creare uno script automatizzato che chiami ssh-keygene crei delle coppie di pub / private che userò in seguito. In linea di principio, tutto funziona bene con ...
ssh-keygen -b 2048 -t rsa -f /tmp/sshkey -q
... tranne per il fatto che mi chiede la passphrase che crittograferebbe le chiavi. Questo rende -attuale difficile l'automazione.

Potrei fornire una passphrase tramite l'argomento della riga di comando -N thepassphrase, in modo da impedire la visualizzazione del prompt. Tuttavia non desidero nemmeno avere le chiavi, ulteriormente protette dalla crittografia , e voglio che le coppie di chiavi siano in chiaro.

Qual è la (migliore) soluzione a questo problema?

L' -qopzione che presumibilmente significa "silenzioso / silenzioso" non evita ancora l'interazione passphrase. Inoltre non ho trovato qualcosa del genere
ssh-keygen ...... -q --no-passphrase

Per favore, non iniziare a predicare o insegnarmi ai pro e contro della "passphrase mancante", ne sono consapevole. Nel modulo interattivo (non come uno script) l'utente può semplicemente premere [INVIO] due volte e la chiave verrà salvata come testo in chiaro. Questo è ciò che voglio ottenere in uno script come questo:

#! / Bin / bash

command1
comando2
var = $ (Command3)

# questo non dovrebbe fermare lo script e chiedere la password
ssh-kegen -b 2048 -t rsa -f / tmp / sshkey -q

Risposte:


105

Ciò impedirà la visualizzazione del prompt passphrase e imposterà la coppia di chiavi da archiviare in testo normale (che ovviamente comporta tutti gli svantaggi e i rischi di ciò):

ssh-keygen -b 2048 -t rsa -f /tmp/sshkey -q -N ""

3
Questo funziona Nel caso in cui /tmp/sshkeyesista già, si ottiene un prompt di sovrascrittura. Questo può essere evitato reindirizzando / chiudendo lo stdin, ad esempio aggiungendo 0>&-.
maxschlepzig,

34

Il modo più semplice che ho trovato per fare quello che vuoi è questo (esempio usando il nome file predefinito)

    cat /dev/zero | ssh-keygen -q -N ""

Se il ~/.ssh/id_rsafile esiste già, il comando verrà chiuso senza modificare nulla.

In caso contrario, otterrai una chiave nuova di zecca, in quel nome file.

Ad ogni modo, non hai sovrascritto nulla e sai che alla fine hai una chiave.


confermato: su lubuntu 14.04.2
user77115

Se lo vuoi davvero tranquillo, reindirizza l'output a / dev / null:cat /dev/zero | ssh-keygen -q -N "" > /dev/null
Chris Gregg,

Su SLES 11 (certamente antico) il comando precedente non riesce a produrre una chiave. yes "" | ssh-keygen -N "" >&- 2>&-funziona comunque bene e non genera nulla (indipendentemente dal fatto che esista o meno un file di chiavi) e non sovrascrive un file di chiavi esistente in precedenza.
zrajm,

Verificato su Ubuntu trusty (14.04)
Binita Bharati il

2
Perché cat / dev / zero?
maxschlepzig,


5

Puoi usare aspettati di inviare il "invio" per te

cat test.sh
#!/bin/bash
set -x
XYZ=$(expect -c "
spawn ssh-keygen -b 2048 -t rsa -f /tmp/sshkey -q
expect \"Enter passphrase (empty for no passphrase):\"
send \"\r\"
expect \"Enter same passphrase again:\"
send \"\r\"
")

Ma attenzione, se il file / tmp / sshkey esiste già, fallirà perché l'output del comando sarà diverso.


1
grazie per il contributo. l'aspettativa sembra ancora più versatile per problemi dello stesso tipo ... beh quelli in cui lo scripting e l'interazione dell'utente sarebbero in conflitto. Sarò consapevole del potenziale conflitto che / tmp / sshkey esiste già e verificherò prima di usare il tuo comando.
umanità e

2

Ho fatto una semplice eco prima di ssh-keygen. Cosìsu - <user> -c "echo |ssh-keygen -t rsa"

Questo è stato testato su Redhat 6


Non penso che questa sia la migliore risposta in circolazione, ma penso che non ci sia motivo di sottovalutare, ragazzi.
cubuspl42,

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.