web-dev-qa-db-fra.com

Comment générer des clés SSH avant le démon ssh

Je dois configurer un Raspberry Pi de manière à connaître ses empreintes SSH avant le premier démarrage. Par conséquent, le seul moyen est de générer les clés de la carte SD de mon ordinateur et de récupérer les empreintes digitales. C'est ce que j'ai fait, mais lorsque la framboise démarre, cela crée de nouvelles clés par-dessus celles que j'ai générées. Comment empêcher le démon ssh de le faire? Il lit certainement quelque part si c'est le premier démarrage, ce doit être un moyen de le changer.

EDIT:

Mon script place les fichiers ssh générés dans/etc/ssh. Lors du premier démarrage, il s'agit du journal de /var/log/daemon.log pour le service sh:

Sep  7 16:12:31 raspberrypi sh[297]: removed '/etc/ssh/ssh_Host_dsa_key'
Sep  7 16:12:31 raspberrypi sh[297]: removed '/etc/ssh/ssh_Host_dsa_key.pub'
Sep  7 16:12:31 raspberrypi sh[297]: removed '/etc/ssh/ssh_Host_ecdsa_key'
Sep  7 16:12:31 raspberrypi sh[297]: removed '/etc/ssh/ssh_Host_ecdsa_key.pub'
Sep  7 16:12:31 raspberrypi sh[297]: removed '/etc/ssh/ssh_Host_rsa_key'
Sep  7 16:12:31 raspberrypi sh[297]: removed '/etc/ssh/ssh_Host_rsa_key.pub'

Il sait en quelque sorte que ces clés n'ont pas été générées par le service SSH. Notez que je n'ai pas généré la ssh_Host_ed25519_key. Cela pourrait-il être la raison? Mais j'ai commenté sa ligne dans sshd_config:

# HostKeys for protocol version 2
HostKey /etc/ssh/ssh_Host_rsa_key
HostKey /etc/ssh/ssh_Host_dsa_key
HostKey /etc/ssh/ssh_Host_ecdsa_key
#HostKey /etc/ssh/ssh_Host_ed25519_key

Serait-ce la raison pour laquelle il a détecté et enlevé les clés?

EDIT 2:

J'ai ajouté la clé ed25519 d'une carte sd démarrée précédemment et celle-ci a toujours supprimé toutes les clés:

Sep  7 16:12:32 raspberrypi sh[311]: removed '/etc/ssh/ssh_Host_dsa_key'
Sep  7 16:12:33 raspberrypi sh[311]: removed '/etc/ssh/ssh_Host_dsa_key.pub'
Sep  7 16:12:33 raspberrypi sh[311]: removed '/etc/ssh/ssh_Host_ecdsa_key'
Sep  7 16:12:33 raspberrypi sh[311]: removed '/etc/ssh/ssh_Host_ecdsa_key.pub'
Sep  7 16:12:33 raspberrypi sh[311]: removed '/etc/ssh/ssh_Host_ed25519_key'
Sep  7 16:12:33 raspberrypi sh[311]: removed '/etc/ssh/ssh_Host_ed25519_key.pub'
Sep  7 16:12:33 raspberrypi sh[311]: removed '/etc/ssh/ssh_Host_rsa_key'
Sep  7 16:12:33 raspberrypi sh[311]: removed '/etc/ssh/ssh_Host_rsa_key.pub'

J'ai également vu que j'ai oublié d'ajouter les autorisations appropriées pour chaque fichier, mais je n'ai rien fait dans cette dernière tentative. J'ai utilisé 600 pour les clés privées et 644 pour les clés publiques, tout comme le sshd quand il en génère de nouvelles.

EDIT 3:

J'ai essayé de rechercher "enlevé" sur le github source pour voir si je pouvais trouver le code qui a déclenché la suppression de la clé mais je ne l'ai pas trouvé: https://github.com/openssh/openssh- portable/search? utf8 =% E2% 9C% 93 & q = supprimé & type =

1
Guerlando OCs

Raspbian a un service dans l'image appelé regenerate_ssh_Host_keys.

[Unit]
Description=Regenerate SSH Host keys
Before=ssh.service

[Service]
Type=oneshot
ExecStartPre=-/bin/dd if=/dev/hwrng of=/dev/urandom count=1 bs=4096
ExecStartPre=-/bin/sh -c "/bin/rm -f -v /etc/ssh/ssh_Host_*_key*"
ExecStart=/usr/bin/ssh-keygen -A -v
ExecStartPost=/bin/systemctl disable regenerate_ssh_Host_keys

[Install]
WantedBy=multi-user.target

Cela supprime les clés déjà présentes, puis régénère les clés, puis désactive le service afin qu'il ne s'exécute plus. Vous pouvez désactiver ce service (en supprimant le fichier /etc/systemd/system/multi-user.target.wants/regenerate_ssh_Host_keys.service] en même temps que vous installez les clés.

1
BowlOfRed