Comment changer une clé d'hôte SSH?

23

J'ai cloné un serveur et ils ont donc la même empreinte digitale de clé RSA.

Il semble être défini dans /etc/ssh/ssh_host_rsa_key.pub.

Quelle est la bonne façon de changer cela?

Merci.

Pascal Polleunus
la source

Réponses:

23

Ou, retirez les clés et

ssh-keygen -A

Explication:

-A: Pour chacun des types de clé (rsa1, rsa, dsa, ecdsa et ed25519) pour lesquels les clés d'hôte n'existent pas, générez les clés d'hôte avec le chemin du fichier de clés par défaut, une phrase de passe vide, des bits par défaut pour le type de clé et par défaut commentaire. Ceci est utilisé par / etc / rc pour générer de nouvelles clés d'hôte.

philippe
la source
Les balises de l'OP spécifient debian, mais n'étant pas spécifiques à la plate-forme, cette réponse semble être la meilleure solution.
mc0e
Hmm, sauf que cela ne semble pas fonctionner pour les anciennes versions. Par exemple, échoue sur Debian Squeeze, qui a OpenSSH_5.5p1
mc0e
1
Pour votre information (sur manpagez.com/man/1/ssh-keygen ), procédezssh-keygen -A comme suit: "Pour chacun des types de clés (rsa1, rsa, dsa, ecdsa et ed25519) pour lesquels les clés d'hôte n'existent pas, générez l'hôte clés avec le chemin du fichier de clés par défaut, une phrase de passe vide, des bits par défaut pour le type de clé et un commentaire par défaut. Il est utilisé par / etc / rc pour générer de nouvelles clés d'hôte. "
Rabarberski
19

Suivez ces étapes pour régénérer les clés d'hôte OpenSSH

  1. Supprimer les anciennes clés d'hôte ssh: rm /etc/ssh/ssh_host_*
  2. Reconfigurez le serveur OpenSSH: dpkg-reconfigure openssh-server
  3. Mettre à jour tous les ~/.ssh/known_hostsfichiers des clients ssh

Référence

Pascal Polleunus
la source
8

Pour une méthode générique de le faire:

ssh-keygen -q -N "" -t dsa -f /etc/ssh/ssh_host_dsa_key

ssh-keygen -q -N "" -t rsa -b 4096 -f /etc/ssh/ssh_host_rsa_key

ssh-keygen -q -N "" -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key

mélanger et assortir selon les clés prises en charge par votre version d'OpenSSH.

Olipro
la source
1
Je pense qu'une façon d'améliorer cette question serait d'ajouter la façon d'augmenter le nombre de bits. soitssh-keygen -q -N "" -t rsa -b 4096 -f /etc/ssh/ssh_host_rsa_key
Whitecat
0

Supprimez-les et redémarrez le service SSHd. Ils seront régénérés.

Heis Spiter
la source
1
Non, ça ne marche pas. /etc/init.d/ssh restart<newline> Could not load host key: /etc/ssh/ssh_host_rsa_key<newline> Could not load host key: /etc/ssh/ssh_host_dsa_key<newline> [....] Restarting OpenBSD Secure Shell server: sshdCould not load host key: /etc/ssh/ssh_host_rsa_key<newline> Could not load host key: /etc/ssh/ssh_host_dsa_key
Pascal Polleunus
1
Effectivement. Fonctionne uniquement sur les distributions basées sur RHEL. Désolé
Heis Spiter
Bon conseil, merci. Cela a fonctionné pour moi sur l'installation de CentOS.
George Gaál
Fonctionne certainement
0

Script (au cas où le redémarrage du démon sshd ne régénère pas automatiquement les clés)

#!/bin/bash

# Regenerate SSHD key materials, restart sshd if "-r" passed on command line

set -o nounset

WHERE=/etc/ssh

# go to directory

pushd $WHERE >/dev/null

if [[ $? != 0 ]]; then
   echo "Could not cd to $WHERE -- exiting" >&2
   exit 1
fi

# create backup folder

NOW=`date '+%Y%m%d.%H%M%S'` # default NOW string
BAKDIR=bak_$NOW

mkdir $BAKDIR

if [[ $? != 0 ]]; then
   echo "Could not mkdir $BAKDIR -- exiting" >&2
   exit 1
fi

# move existing key material to backup folder

mv ssh_host_* $BAKDIR

if [[ $? != 0 ]]; then
   echo "Could not move old files to $BAKDIR -- exiting" >&2
   exit 1
fi

# generate new keys

ssh-keygen -A

if [[ $? != 0 ]]; then
   echo "Could not recreate keys -- exiting" >&2
   exit 1
fi

# ssh-keygen may create DSA keys but:
# "Never use DSA or ECDSA"
# http://security.stackexchange.com/questions/5096/rsa-vs-dsa-for-ssh-authentication-keys

/bin/rm -f *_dsa_key *_dsa_key.pub
/bin/rm -f *_ecdsa_key *_ecdsa_key.pub

# on Fedora, one has to tune permissions a bit

chmod 640 *_key
chgrp ssh_keys *_key

# make sure SELinux attributes are as they should be

restorecon -R $WHERE

# Done

echo "New key material"
ls -l *_key *_key.pub

# Do the risky thing

if [[ $1 == '-r' ]]; then
   echo "Restarting SSH daemon"
   systemctl restart sshd
fi

# go back to where you where

popd >/dev/null
David Tonhofer
la source
Le lien dans votre commentaire ne dit pas que l'ECDSA ne doit pas être utilisé.
Todd Walton
@ToddWalton En fait, c'est le cas. Troisième réponse dans l'ordre: "- N'utilisez jamais DSA ou ECDSA. - Ed25519 est probablement le plus fort mathématiquement (et aussi le plus rapide), mais pas encore largement pris en charge. En prime, il a un cryptage plus fort (protection par mot de passe) de la clé privée par défaut que les autres types de clés. - RSA est le meilleur pari si vous ne pouvez pas utiliser Ed25519. "
David Tonhofer
Ah, tu as raison. Je le vois maintenant.
Todd Walton