Es sind Informationen für Personen, die alle Anforderungen erfüllen.
Sie können das obige Problem mit den folgenden Methoden lösen.
Diese Technik kann nicht nur für sshd verwendet werden, sondern auch zum Starten anderer Daemons, die hostspezifische Informationen verwenden. (Mit DNS oder DHCP können Sie jedoch alles für IP und Hostnamen tun.)
Alle Arbeiten werden auf dem NFS-Server ausgeführt, indem auf das an die Knoten verteilte Betriebssystem-Image chrootet wird. Im Folgenden wird angenommen, dass der Hostname des plattenlosen Knotens host1 bis host4 ist.
Bewahren Sie aus Sicherheitsgründen alle Schlüssel in / root / host_keys auf.
# mkdir /root/host_keys; cd /root/host_keys
# for N in `seq 1 4`; do HN="host${N}"; mkdir ${HN}; for T in rsa ecdsa ed25519; do ssh-keygen -h -t ${T} -C ${HN} -N '' -f ${HN}/ssh_host_${T}_key; done; done
# mkdir /var/lib/sshd
# vim /etc/fstab
(Die Änderungen sind wie folgt)
#
Fügen Sie die folgende Zeile zu / etc / fstab hinzu
tmfps /var/lib/sshd tmpfs defaults,mode=700 0 0
# vi /etc/ssh/sshd_config
(Die Änderungen sind wie folgt)
#
Änderungen (aktivierter und geänderter HostKey-Eintrag standardmäßig auskommentiert)
(Kürzung)
HostKey /var/lib/sshd/ssh_host_rsa_key
HostKey /var/lib/sshd/ssh_host_ecdsa_key
HostKey /var/lib/sshd/ssh_host_ed25519_key
(Kürzung)
Um das Timing richtig zu handhaben, erstellen Sie eine neue Unit-Datei von systemd und formatieren Sie sie, um von hier aus ein dediziertes Skript aufzurufen.
Der Dateiname kann beliebig sein, sollte aber / usr / local / sbin / copy_sshkeys sein.
# vim /usr/local/sbin/copy_sshkeys
# chmod 700 /usr/local/sbin/copy_sshkeys
Der Inhalt des Skripts ist wie folgt. Stellen Sie den Rückgabewert so ein, dass systemd den Fehler ermitteln kann.
#!/bin/bash
HN=`hostname`
RETVAL=0
if [ "${HN}" != "" ]
then
cp -pf /root/host_keys/${HN}/ssh_host* /var/lib/sshd/
RETVAL=$?
else
#Fehler beim Abrufen des Hostnamens
RETVAL=2
fi
exit $RETVAL
Erstellen Sie eine neue Unit-Datei unter / etc / systemd / system. Der Name dieser Datei kann beliebig sein, solange Sie die Regeln für die Erweiterung .service befolgen. Der Klarheit halber nennen Sie sie jedoch ssh_hostkey_copy.service.
# vi /etc/systemd/system/ssh_hostkey_copy.service
(Der Inhalt ist wie folgt)
# systemctl enable ssh_hostkey_copy.service
(Ausgabeergebnis weggelassen)
#
Der Inhalt der Unit-Datei lautet wie folgt.
[Unit]
Description=SSH Hostkey copy process for diskless clients
After=network.target local-fs.target
#Sshd abhängig von der Verteilung.Es kann Service sein
Before=ssh.service
[Service]
ExecStart=/usr/local/sbin/copy_sshkeys
Type=oneshot
[Install]
WantedBy=multi-user.target
RequiredBy=ssh.service
Jetzt können auch plattenlose Clients sshd mit dem eindeutigen Hostschlüssel starten.