Wie ändere ich einen SSH-Hostschlüssel?

23

Ich habe einen Server geklont und sie haben denselben RSA-Key-Fingerabdruck.

Es scheint in definiert zu sein /etc/ssh/ssh_host_rsa_key.pub.

Was ist der richtige Weg, um das zu ändern?

Vielen Dank.

Pascal Polleunus
quelle

Antworten:

23

Oder entfernen Sie die Schlüssel und

ssh-keygen -A

Erläuterung:

-A: Generieren Sie für jeden Schlüsseltyp (rsa1, rsa, dsa, ecdsa und ed25519), für den keine Hostschlüssel vorhanden sind, die Hostschlüssel mit dem Standardschlüssel-Dateipfad, einer leeren Passphrase, Standardbits für den Schlüsseltyp und Standard Kommentar. Dies wird von / etc / rc verwendet, um neue Hostschlüssel zu generieren.

philippe
quelle
Die OP-Tags spezifizieren Debian, aber da diese Antwort nicht plattformspezifisch ist, scheint sie die bessere Lösung zu sein.
mc0e
Hmm, außer es scheint nicht für ältere Versionen zu funktionieren. ZB scheitert an debian squeeze, das OpenSSH_5.5p1
mc0e
1
Zu Ihrer Information (von manpagez.com/man/1/ssh-keygen ) ssh-keygen -Awird Folgendes ausgeführt: " Generieren Sie für jeden der Schlüsseltypen (rsa1, rsa, dsa, ecdsa und ed25519), für die keine Hostschlüssel vorhanden sind, den Host Schlüssel mit dem Standard-Schlüsseldateipfad, einer leeren Passphrase, Standardbits für den Schlüsseltyp und einem Standardkommentar. Dies wird von / etc / rc verwendet, um neue Hostschlüssel zu generieren. "
Rabarberski
19

Befolgen Sie diese Schritte, um OpenSSH-Hostschlüssel neu zu generieren

  1. Löschen Sie alte SSH-Host-Schlüssel: rm /etc/ssh/ssh_host_*
  2. OpenSSH-Server neu konfigurieren: dpkg-reconfigure openssh-server
  3. Aktualisieren Sie alle ssh-Client- ~/.ssh/known_hostsDateien

Referenz

Pascal Polleunus
quelle
8

Für eine generische Methode dazu:

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

Mischen Sie und vergleichen Sie entsprechend den Schlüsseln, die Ihre Version von OpenSSH unterstützt.

Olipro
quelle
1
Ich denke, eine Möglichkeit, diese Frage zu verbessern, besteht darin, die Anzahl der Bits zu erhöhen. iessh-keygen -q -N "" -t rsa -b 4096 -f /etc/ssh/ssh_host_rsa_key
Whitecat
0

Löschen Sie sie und starten Sie den SSHd-Dienst neu. Sie werden regeneriert.

Heis Spiter
quelle
1
Nein, das geht nicht. /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
Tatsächlich. Funktioniert nur auf RHEL-basierten Distributionen. Entschuldigung
Heis Spiter
Guter Rat, danke. Bei der CentOS-Installation hat es funktioniert.
George Gaál
Funktioniert definitiv auf Fedora
David Tonhofer
0

Skript (für den Fall, dass beim Neustart des sshd-Daemons die Schlüssel nicht automatisch neu generiert werden)

#!/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
quelle
Der Link in Ihrem Kommentar besagt nicht, dass ECDSA nicht verwendet werden sollte.
Todd Walton
@ToddWalton Eigentlich schon. Dritte Antwort in Folge: "- Verwenden Sie niemals DSA oder ECDSA. - Ed25519 ist mathematisch wahrscheinlich die stärkste (und auch die schnellste), wird jedoch noch nicht allgemein unterstützt. Als Bonus verfügt es über eine stärkere Verschlüsselung (Kennwortschutz) des privaten Schlüssels standardmäßig als andere Schlüsseltypen. - RSA ist die beste Wahl, wenn Sie Ed25519 nicht verwenden können. "
David Tonhofer
Ah, du hast recht. Ich sehe es jetzt.
Todd Walton