¿Cómo cambiar una clave de host SSH?

23

Cloné un servidor y tienen la misma huella digital de clave RSA.

Parece estar definido en /etc/ssh/ssh_host_rsa_key.pub.

¿Cuál es la forma correcta de cambiar eso?

Gracias.

Pascal Polleunus
fuente

Respuestas:

23

O bien, quite las llaves y

ssh-keygen -A

Explicación:

-A: Para cada uno de los tipos de clave (rsa1, rsa, dsa, ecdsa y ed25519) para las que no existen claves de host, genere las claves de host con la ruta de archivo de clave predeterminada, una frase de contraseña vacía, bits predeterminados para el tipo de clave y predeterminado comentario. / Etc / rc lo utiliza para generar nuevas claves de host.

philippe
fuente
Las etiquetas del OP especifican debian, pero al no ser específicas de la plataforma, esta respuesta parece ser la mejor solución.
mc0e el
Hmm, excepto que no parece funcionar para versiones anteriores. Por ejemplo, falla en debian squeeze, que tiene OpenSSH_5.5p1
mc0e
1
Para su información (de manpagez.com/man/1/ssh-keygen ), ssh-keygen -Ahaga lo siguiente: "Para cada uno de los tipos de clave (rsa1, rsa, dsa, ecdsa y ed25519) para las que no existen claves de host, genere el host claves con la ruta de archivo de clave predeterminada, una frase de contraseña vacía, bits predeterminados para el tipo de clave y comentario predeterminado. / etc / rc lo utiliza para generar nuevas claves de host ".
Rabarberski
19

Siga estos pasos para regenerar las claves de host de OpenSSH

  1. Eliminar las viejas claves de host ssh: rm /etc/ssh/ssh_host_*
  2. Reconfigure el servidor OpenSSH: dpkg-reconfigure openssh-server
  3. Actualizar todos los ~/.ssh/known_hostsarchivos de cliente (s) ssh

Referencia

Pascal Polleunus
fuente
8

Para un método genérico de hacer esto:

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

mezcle y combine de acuerdo con las teclas que admite su versión de OpenSSH.

Olipro
fuente
1
Creo que una forma de mejorar esta pregunta sería agregar la forma de aumentar el número de bits. es decirssh-keygen -q -N "" -t rsa -b 4096 -f /etc/ssh/ssh_host_rsa_key
Whitecat
0

Elimínelos y reinicie el servicio SSHd. Serán regenerados.

Heis Spiter
fuente
1
No, no funciona /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
En efecto. Solo funciona en distribuciones basadas en RHEL. Lo siento
Heis Spiter
Buen consejo, gracias. Me funcionó en la instalación de CentOS.
George Gaál
Definitivamente funciona en Fedora
David Tonhofer
0

Script (en caso de que reiniciar el demonio sshd no regenere automáticamente las claves)

#!/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
fuente
El enlace en su comentario no dice que ECDSA no debe usarse.
Todd Walton
@ToddWalton En realidad lo hace. Tercera respuesta en secuencia: "- Nunca use DSA o ECDSA. - Ed25519 es probablemente el más fuerte matemáticamente (y también el más rápido), pero aún no es ampliamente compatible. Como beneficio adicional, tiene un cifrado más fuerte (protección con contraseña) de la clave privada por defecto que otros tipos de teclas. - RSA es la mejor opción si no puede usar Ed25519 ".
David Tonhofer
Ah, tienes razon. Ya lo veo.
Todd Walton