Frage Wie ändere ich einen SSH-Hostschlüssel?


Ich habe einen Server geklont und deshalb haben sie den gleichen RSA-Schlüssel-Fingerabdruck.

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

Was ist der richtige Weg, das zu ändern?

Vielen Dank.


20
2018-01-22 10:24


Ursprung




Antworten:


Oder entfernen Sie die Tasten und

ssh-keygen -A

Erläuterung:

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


18
2018-01-22 11:42



Die Tags des OP geben debian an, aber diese Antwort ist nicht plattformspezifisch und scheint die bessere Lösung zu sein. - mc0e
Hmm, außer es scheint nicht für ältere Versionen zu funktionieren. ZB scheitert Debian Squeeze, die OpenSSH_5.5p1 hat - mc0e
Zu Ihrer Information (von manpagez.com/man/1/ssh-keygen) ssh-keygen -Amacht folgendes: "Für jeden der Schlüsseltypen (rsa1, rsa, dsa, ecdsa und ed25519), für die keine Hostschlüssel existieren, generieren Sie die Hostschlüssel mit dem Standardschlüsseldateipfad, einer leeren Passphrase, Standardbits für den Schlüssel Typ und Standardkommentar. Dies wird von / etc / rc verwendet, um neue Hostschlüssel zu generieren. " - Rabarberski


Befolgen Sie diese Schritte, um OpenSSH Host Keys neu zu generieren

  1. Lösche alte SSH-Hostschlüssel: rm /etc/ssh/ssh_host_*
  2. Reconfigure OpenSSH Server: dpkg-reconfigure openssh-server
  3. Aktualisieren Sie alle ssh-Clients ~/.ssh/known_hosts Dateien

Referenz


16
2018-01-22 10:41





Für eine generische Methode, dies zu tun:

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 und passen Sie nach den Schlüsseln, die Ihre Version von OpenSSH unterstützt.


6
2018-01-22 11:32



Ich denke, ein Weg, diese Frage zu verbessern, wäre es, die Anzahl der Bits zu erhöhen. d.h. ssh-keygen -q -N "" -t rsa -b 4096 -f /etc/ssh/ssh_host_rsa_key - Whitecat


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


0
2018-01-22 10:28



Nein, es funktioniert 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
Tatsächlich. Funktioniert nur auf RHEL-basierten Distributionen. Es tut uns leid - Heis Spiter
Guter Rat, danke. Es hat für mich bei CentOS-Installation funktioniert. - George Gaál
Funktioniert definitiv auf Fedora - David Tonhofer


Skript (falls der sshd-Daemon neu gestartet wird, werden die Schlüssel nicht automatisch neu generiert)

#!/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

0
2017-08-12 08:43