Ssh-keygen automatisé sans phrase secrète, comment?


86

J'aimerais créer un script automatisé qui appelle ssh-keygenet crée des paires de clés publiques / privées que j'utiliserai plus tard. En principe, tout fonctionne bien avec ...
ssh-keygen -b 2048 -t rsa -f /tmp/sshkey -q
... sauf que cela me demande la phrase secrète qui chiffrerait les clés. Cela rend difficile l'automatisation.

Je pourrais fournir une phrase secrète via l'argument de ligne de commande -N thepassphrase, afin d'éviter que l'invite n'apparaisse. Malgré tout, je ne souhaite même pas que les clés - en plus sécurisées par un cryptage - et que les paires de clés soient en texte clair.

Quelle est la meilleure solution à ce problème?

L' -qoption supposée signifier "calme / silencieux" n'évite toujours pas l'interaction phrase secrète. Aussi je n'ai pas trouvé quelque chose comme ça
ssh-keygen ...... -q --no-passphrase

S'il vous plait, ne commencez pas à prêcher et ne faites pas la leçon aux avantages et inconvénients de la "phrase secrète manquante", j'en suis conscient. Dans le formulaire interactif (pas en tant que script), l'utilisateur peut simplement appuyer sur [ENTRER] deux fois et la clé sera sauvegardée en texte brut. C'est ce que je veux réaliser dans un script comme celui-ci:

#! / bin / bash

commande1
commande2
var = $ (commande3)

# cela ne devrait pas arrêter le script et demander un mot de passe
ssh-kegen -b 2048 -t rsa -f / tmp / sshkey -q

Réponses:


105

Cela empêchera l'invite de phrase secrète d'apparaître et configurera la paire de clés pour qu'elle soit stockée en texte brut (ce qui bien sûr comporte tous les inconvénients et risques de cela):

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

3
Cela marche. Dans le cas où il /tmp/sshkeyexiste déjà, un message d’écrasement apparaît. Cela peut être empêché en redirigeant / fermant stdin - par exemple en ajoutant 0>&-.
maxschlepzig

34

La façon la plus simple que j'ai trouvée de faire ce que vous voulez est la suivante (exemple avec le nom de fichier par défaut)

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

Si le ~/.ssh/id_rsafichier existe déjà, la commande se fermera sans rien modifier.

Sinon, vous obtenez une nouvelle clé, dans ce nom de fichier.

Quoi qu'il en soit, vous n'avez rien écrasé et vous savez qu'à la fin, vous avez une clé.


confirmé: le 14.04.2 sur lubuntu
user77115

Si vous le voulez vraiment silencieux, dirigez la sortie vers / dev / null:cat /dev/zero | ssh-keygen -q -N "" > /dev/null
Chris Gregg

Sur (certes antique) SLES 11, la commande ci-dessus ne produit pas de clé. yes "" | ssh-keygen -N "" >&- 2>&-Cependant, fonctionne parfaitement et ne génère rien (qu’il existe ou non un fichier de clé) et n’écrase pas un fichier de clé existant auparavant.
Zrajm

Vérifié sur Ubuntu trusty (14.04)
Binita Bharati

2
Pourquoi est-ce que tu chat / dev / zéro?
maxschlepzig


5

Vous pouvez utiliser s'attendre à envoyer le "entrer" pour vous

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\"
")

Sachez toutefois que si le fichier / tmp / sshkey existe déjà, il échouera car le résultat de la commande sera différent.


1
Merci pour votre contribution. l'attente semble même plus polyvalente pour des problèmes du même genre ... ainsi que pour ceux où script et interaction utilisateur seraient en conflit. Je serai conscient de la confusion potentielle que / tmp / sshkey existe déjà et le vérifier avant d'utiliser votre commande.
humanityANDpeace

2

J'ai fait un simple écho avant ssh-keygen. Alorssu - <user> -c "echo |ssh-keygen -t rsa"

Cela a été testé sur Redhat 6


Je ne pense pas que ce soit la meilleure réponse, mais je pense qu’il n’ya aucune raison de faire baisser le vote non plus, les gars.
Cubuspl42

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.