Il s'agit d'informations destinées aux personnes qui répondent à toutes les exigences.
Vous pouvez résoudre le problème ci-dessus par les méthodes suivantes.
Cette technique peut être utilisée non seulement pour sshd, mais aussi pour démarrer d'autres démons qui utilisent des informations spécifiques à l'hôte. (Cependant, vous pouvez tout faire avec DNS ou DHCP pour l'IP et le nom d'hôte.)
Tout le travail est effectué sur le serveur NFS, chrooté sur l'image du système d'exploitation distribuée aux nœuds. Par la suite, on suppose que le nom d'hôte du nœud sans disque est host1 à host4.
Pour plus de sécurité, conservez toutes les clés dans / root / host_keys.
# 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
(Les changements sont les suivants)
#
Ajoutez la ligne suivante à / etc / fstab
tmfps /var/lib/sshd tmpfs defaults,mode=700 0 0
# vi /etc/ssh/sshd_config
(Les changements sont les suivants)
#
Modifications (activer et modifier l'entrée HostKey mise en commentaire par défaut)
(réduction)
HostKey /var/lib/sshd/ssh_host_rsa_key
HostKey /var/lib/sshd/ssh_host_ecdsa_key
HostKey /var/lib/sshd/ssh_host_ed25519_key
(réduction)
Afin de gérer correctement la synchronisation, créez un nouveau fichier d'unité de systemd et formatez-le pour appeler un script dédié à partir d'ici.
Le nom du fichier peut être n'importe quoi, mais il doit être / usr / local / sbin / copy_sshkeys.
# vim /usr/local/sbin/copy_sshkeys
# chmod 700 /usr/local/sbin/copy_sshkeys
Le contenu du script est le suivant. Définissez la valeur de retour afin que systemd puisse déterminer l'erreur.
#!/bin/bash
HN=`hostname`
RETVAL=0
if [ "${HN}" != "" ]
then
cp -pf /root/host_keys/${HN}/ssh_host* /var/lib/sshd/
RETVAL=$?
else
#Impossible d'obtenir le nom d'hôte
RETVAL=2
fi
exit $RETVAL
Créez un nouveau fichier Unit sous / etc / systemd / system. Le nom de ce fichier peut être n'importe quoi, tant que vous suivez les règles de l'extension .service, mais par souci de clarté, nommez-le ssh_hostkey_copy.service.
# vi /etc/systemd/system/ssh_hostkey_copy.service
(Le contenu est le suivant)
# systemctl enable ssh_hostkey_copy.service
(Résultat de sortie omis)
#
Le contenu du fichier Unit est le suivant.
[Unit]
Description=SSH Hostkey copy process for diskless clients
After=network.target local-fs.target
#Sshd selon la distribution.Cela peut être un service
Before=ssh.service
[Service]
ExecStart=/usr/local/sbin/copy_sshkeys
Type=oneshot
[Install]
WantedBy=multi-user.target
RequiredBy=ssh.service
Cela permettra aux clients sans disque de démarrer sshd avec une clé d'hôte unique.