GNU/Linux >> Tutoriels Linux >  >> Linux

Comment exécuter ssh-keygen sans invite

Aucune des réponses ne fait exactement ce qui est attendu. Le comportement souhaité :exécutez ssh-keygen avec les paramètres par défaut (comme si nous venions de spammer Enter) sans jamais demander de saisie.

La commande à exécuter est :

yes '' | ssh-keygen -N '' > /dev/null

omettez le>/dev/null si vous voulez imprimer la sortie.

Explication:
yes y spams 'y', que ssh-keygen prend littéralement et crée les clés dans $PWD/y et $PWD/y.pub . yes '' spams lignes vides (Entrée) qui est ce que nous voulons. La spécification du fichier avec -f ~/.ssh/id_rsa échoue si le répertoire .ssh n'existe pas. L'option -t rsa n'est pas requise si rsa est le type par défaut (nous spammons de toute façon). La phrase de passe n'est pas lue à partir de stdin (sur lequel nous spammons) mais directement à partir du clavier afin que rien ne puisse l'intercepter. Pour cette raison, vous devez spécifier -N '' pour une phrase de passe vide.


Pour moi, j'ai dû utiliser une combinaison de @Lukasz answer et @Juan one, lors de l'utilisation de la commande ssh

ssh -p$SSH_PORT -q [email protected]$INSTANCE_IP 'yes y | ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa'

Si vous ne souhaitez pas demander à l'utilisateur un fichier dans lequel enregistrer la clé, vous pouvez ajouter l'indicateur de sortie de fichier -f à la commande.

ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa

De cette façon, l'utilisateur ne sera invité à aucune saisie, sauf si id_rsa le ou les fichiers existent déjà.


Nous devons accomplir deux étapes automatiquement :

  1. Entrez une phrase de passe . Utilisez le -N flag (chaîne vide pour cet exemple) :

    ssh-keygen -t rsa -N ''

  2. Ecraser le fichier clé :

Utilisez -f pour entrer le chemin (dans cet exemple id_rsa ) plus une chaîne ici répondre oui à la question suivante :

ssh-keygen -q -t rsa -N '' -f ~/.ssh/id_rsa <<<y >/dev/null 2>&1

Ou, sous un bash comme shell, si vous voulez certainement écraser le précédent , utilisez juste une chaîne ici pour alimenter la commande avec toutes les contributions nécessaires :

ssh-keygen -q -t rsa -N '' <<< $'\ny' >/dev/null 2>&1

Depuis ssh-keygen homme page :

  -N new_passphrase provides the new passphrase.
  -q                silence ssh-keygen.
  -f filename       specifies the filename of the key file.

Explication étape par étape

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/klashxx/.ssh/id_rsa):

1 ) Pour éviter d'entrer la clé, utilisez -f :

$ ssh-keygen -t rsa -f ~/.ssh/id_rsa
Generating public/private rsa key pair.
/home/klashxx/.ssh/id_rsa already exists.
Overwrite (y/n)?

ATTENTION  :Si vous ne vous souciez pas du nom du fichier RSA et que vous souhaitez certainement écraser le précédent, consultez les instructions ci-dessous au point quatre.

2 ) Maintenant, nous devons répondre "y " automatiquement à la question de remplacement (utilisons une chaîne ici pour ce travail):

$ ssh-keygen -t rsa -f ~/.ssh/id_rsa <<< y
Generating public/private rsa key pair.
/home/klashxx/.ssh/id_rsa already exists.
Overwrite (y/n)? Enter passphrase (empty for no passphrase):

3 ) Enfin nous allons utiliser le -N drapeau pour saisir une passe annulée :

$ ssh-keygen -t rsa -N '' -f ~/.ssh/id_rsa <<< y
Generating public/private rsa key pair.
/home/klashxx/.ssh/id_rsa already exists.
Overwrite (y/n)? Your identification has been saved in /home/klashxx/.ssh/id_rsa.
Your public key has been saved in /home/klashxx/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:Xo0t6caMB/8TSsigxfY28JIfqYjyqxRZrFrPncx5yiU [email protected]
The key's randomart image is:
+---[RSA 2048]----+
|                 |
|  .              |
|   o .           |
|  +   *    =     |
| +.  + BSo= o    |
|...o.+o+XO...    |
|.. .o.E==+B. .   |
|o . ...=.o...    |
|.+o.  o     ..   |
+----[SHA256]-----+

4 ) Balle supplémentaire , nettoyez la sortie, vérifiez simplement le code de retour :

$ ssh-keygen -q -t rsa -N '' -f ~/.ssh/id_rsa <<<y >/dev/null 2>&1
$ echo $?
0

Un chemin alternatif pour écraser le fichier RSA précédent (aucun indicateur -f nécessaire)

REMARQUE :Uniquement bash comme des coquillages.

Si vous ne vous souciez pas du nom RSA et que vous souhaitez simplement le remplacer, nous devons répondre automatiquement à ces deux questions :

  1. Entrez le fichier dans lequel enregistrer la clé :/exemple/chemin/.ssh/id_rsa existe déjà.

  2. Remplacer (o/n) ?

Si nous le faisons à la main, pour la première question, il nous suffit d'appuyer sur enter , et pour le second, tapez y et appuyez sur enter .

Nous pouvons simuler ces actions en utilisant la chaîne here-string suivante :

$'\ny'

Du bash page de manuel :

Les mots de la forme $'string' sont traités spécialement. Le mot se développe en "chaîne", avec les caractères d'échappement avec barre oblique inversée remplacés comme spécifié par la norme ANSI C.

\n nouvelle ligne

Donc, si nous utilisons od pour analyser notre chaîne :

cat - <<< $'\ny' | od -c
0000000  \n   y  \n

Nous voyons que nous obtenons exactement ce dont nous avons besoin pour répondre aux questions.

Les points 1 et 2 peuvent être résumés en :

ssh-keygen -q -t rsa  <<< $'\ny'

Et la commande finale sera :

$ ssh-keygen -q -t rsa -N '' <<< $'\ny' >/dev/null 2>&1
$ echo $?
0

Félicitations

@lukasz-dynowski, @redochka, @mellow-yellow, @yeti et le reste des gens dans ce fil.


Linux
  1. Comment exécuter un programme spécifique en tant que root sans invite de mot de passe ?

  2. Comment supprimer récursivement les autorisations d'exécution des fichiers sans toucher aux dossiers ?

  3. Ssh - Comment exécuter Ssh-add automatiquement, sans invite de mot de passe ?

  4. Comment arrêter sans l'invite de confirmation ?

  5. Comment exécuter un fichier python sous Linux

Comment personnaliser l'invite Bash sous Linux

Comment forcer la commande cp à écraser sans confirmation

Comment exécuter une commande Shell avec Python

Comment exécuter une commande dans un script shell ?

Comment supprimer un fichier sans utiliser rm ?

Comment exécuter à distance la commande ssh une commande sudo sans mot de passe