Automatisation des pressions sur les touches «enter» pour le script bash générant des clés ssh

101

Je voudrais créer un script qui s'exécute simplement ssh-keygen -t rsa. Mais comment y passer 3 fois entrer?

Sławosz
la source

Réponses:

217

Essayer:

ssh-keygen -t rsa -N "" -f my.key

-N "" lui dit d'utiliser une phrase de passe vide (la même que deux des entrées dans un script interactif)

-f my.keylui dit de stocker la clé dans my.key(changez comme bon vous semble).

Le tout fonctionne sans que vous ayez à fournir de clés d'entrée :)

Pour envoyer des entrées à un script interactif:

echo -e "\n\n\n" | ssh-keygen -t rsa
Rudu
la source
4
C'est une réponse correcte, mais je voudrais toujours savoir comment appuyer sur Entrée plus d'une fois - dans un autre script.
Sławosz
3
Bien sûr - a mis à jour la réponse pour inclure comment envoyer des nouvelles lignes à un script.
Rudu
2
echo -e "\ n \ n \ n" | sshkeygen -t rsa ne fonctionne pas pour moi, pouvez-vous l'essayer vous-même? Il ne passe que la première entrée. Mais sur un autre script simple, cela fonctionne.
Sławosz
1
Je l'ai testé avant de le publier - cela fonctionne bien, bien qu'il semble que le tableau de bord ait ssh-keygenété abandonné - l'avez-vous ajouté? {édité} De plus - vous ne pouvez pas exécuter le script plus d'une fois - il modifie les questions pour confirmer que vous voulez écraser le _rsafichier de clés existant (donc ay ou n doit être fourni)
Rudu
13
Je recommanderais d'utiliser à la yes ""place de echo -e "\n\n\n"( yesrenvoie n'importe quel argument donné [ou "y" par défaut] à l'infini - parfait pour ces situations où l'on veut juste fournir une réponse "oui" à tout ce qu'un programme pourrait demander). yesest plus court, et devrait ssh-keygenjamais ajouter une question, qui sera automatiquement répondue aussi. :)
zrajm
22

une version avec mot de passe est:

$ ssh-keygen -t rsa -b 4096 -C "comment" -P "examplePassphrase" -f "desired pathAndName" -q 
  • le -q est pour silencieux

La source est http://linux.die.net/man/1/ssh-keygen

Michel Marro
la source
4
Utilisez -P pour une phrase secrète existante, utilisez -N pour une nouvelle
brianlmerritt
1

D'accord avec Michel Marro sauf qu'il en faut encore plus: si le fichier existe déjà, il sera toujours interactif en demandant s'il doit l'écraser.

Utilisez la réponse à cette question .

yes y | ssh-keygen -q -t rsa -N '' >/dev/null

La redirection vers null est nécessaire pour faire taire le message d'écrasement.

shamox
la source
0
echo -e "\n"|ssh-keygen -t rsa -N ""
Mannix
la source
Hein? Cela a en fait moins de nouvelles lignes que l'une des réponses que vous prétendez ne pas fonctionner (et c'est sur le sous-ensemble de plates-formes où echo -eémet autre chose que -edu tout, ce qui n'est pas ssh-keygendisponible partout ).
Charles Duffy
... pour être clair, j'utilise la production ssh-keygen -N ''dans le cadre d'une procédure d'installation automatisée, et il ne lit pas du tout stdin, il n'est donc pas nécessaire que la echo( aucune echo variante) y soit envoyée. (Certes, je crois que stdin est connecté à /dev/nulldans mon cas d'utilisation de production; il pourrait bien y avoir un comportement différent lorsqu'il est attaché à un TTY, mais la meilleure réponse est </dev/nullplutôt que echo ... |)
Charles Duffy
1
Il me demande un nom de fichier: $ ssh-keygen -t rsa -N '' Generating public/private rsa key pair. Enter file in which to save the key (/home/dlyons/.ssh/id_rsa):
Mannix
0

Il est recommandé d'utiliser ed25519 pour la sécurité et les performances.

yes "y" | ssh-keygen -o -a 100 -t ed25519 -C "Bla Bla" -f /mypath/bla -N ""

ici

-o Format de clé OpenSSH au lieu de l'ancien PEM (nécessite OpenSSH 6.5+)

-a Nombre de tests de primalité lors de la sélection des candidats DH-GEX

-t Type de clé (ed25519, RSA, DSA etc.)

-f /mypath/bla Le chemin et le nom du fichier de sortie

-N "" Utiliser une phase de passe vide

et yes "y"pour aucune interaction.

Il générera deux fichiers

/mypath/bla
/mypath/bla.pub

où le blafichier est privé et bla.pubpublic.

Madan Sapkota
la source