web-dev-qa-db-fra.com

Ssh-keygen automatisé sans mot de passe, comment?

Je voudrais créer un script automatisé qui appelle ssh-keygen et crée des paires de clés pub/privées que j'utiliserai plus tard. En principe, tout fonctionne bien avec ....
ssh-keygen -b 2048 -t rsa -f /tmp/sshkey -q
... sauf qu'il me demande la phrase secrète qui crypterait les clés. Cela rend -à présent- l'automatisation difficile.

Je pourrais fournir une phrase de passe via l'argument de ligne de commande -N thepassphrase, afin d'empêcher l'invite d'apparaître. Pourtant, je ne souhaite même pas avoir les clés -en plus sécurisées par cryptage - et je veux que les paires de clés soient en texte clair.

Quelle est (la meilleure) solution à ce problème?

Le -q L'option qui signifie soi-disant "silencieux/silencieux" n'évite toujours pas l'interaction du mot de passe. De plus, je n'ai pas trouvé quelque chose comme ça
ssh-keygen ...... -q --no-passphrase

S'il vous plaît ne commencez pas à prêcher ou à me faire la leçon pour le pour et le contre de la "phrase secrète manquante", j'en suis conscient. Dans le formulaire interactif (pas en tant que script), l'utilisateur peut simplement appuyer deux fois sur [ENTRER] et la clé sera enregistrée en texte brut. Voici 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 le mot de passe 
 ssh-kegen -b 2048 -t rsa -f/tmp/sshkey -q 
 
103
humanityANDpeace

Cela empêchera l'invite de phrase secrète d'apparaître et définira la paire de clés à stocker en texte clair (ce qui comporte bien sûr tous les inconvénients et les risques de cela):

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

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

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

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

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

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

38
JoaoCC

Cela a fonctionné pour moi:

ssh-keygen -t rsa -f /home/Oracle/.ssh/id_rsa -q -P ""

Le -P est l'option de phrase secrète et "" est la phrase secrète vide.

11
gowrish

Vous pouvez utiliser s'attendre à envoyer le "enter" 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\"
")

Mais sachez que si le fichier/tmp/sshkey existe déjà, il échouera car la sortie de la commande sera différente.

6
BitsOfNix

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

Cela a été testé sur Redhat 6

2
koopsj

Pour un autre utilisateur, testé sur Ubuntu 18.04:

Sudo -u username bash -c "ssh-keygen -f /tmp/sshkey -N ''"