Ändern des Ausgabeverzeichnisses beim Neuerstellen von SSH-Hostschlüsseln mit ssh-keygen (der Schalter -f verhindert nicht, dass ssh-keygen nach /etc/ssh/ schreibt)

Ändern des Ausgabeverzeichnisses beim Neuerstellen von SSH-Hostschlüsseln mit ssh-keygen (der Schalter -f verhindert nicht, dass ssh-keygen nach /etc/ssh/ schreibt)

Ich habe versucht, einen zusätzlichen SSHD-Prozess auf einem Remotecomputer zu starten. Ich habe ein Arbeitsverzeichnis mit der neuen SSHD-Konfigurationsdatei erstellt, die ich verwenden möchte.

Wenn ich versuche, sshd mit der Konfigurationsdatei in diesem Verzeichnis auszuführen, wird bemängelt, dass keine Hostschlüssel gefunden werden können. Ich habe versucht, fehlende Hostschlüssel zu erstellen, indem ich ssh-keygen -Aden -fSchalter verwendet habe, um den Speicherort meines Arbeitsverzeichnisses anzugeben, aber ssh-keygen versucht weiterhin, die Schlüssel anstelle des von mir angegebenen Verzeichnisses zu platzieren /etc/ssh/. Ich habe keinen Zugriff auf /etc/ssh, also schlägt es fehl.

Wie kann ich diese Schlüssel generieren, ohne Zugriff auf diesen Pfad zu haben?

Antwort1

Die -AOption gibt ssh-keygenan,Hostschlüssel. Laut der Manualpage ssh-keygenist der vorgesehene Einsatzzweck

Normalerweise führt jeder Benutzer, der SSH mit öffentlicher Schlüsselauthentifizierung verwenden möchte,
dies einmal aus, um den Authentifizierungsschlüssel in ~/.ssh/identity,
~/.ssh/id_ecdsa, ~/.ssh/id_dsaoder zu erstellen ~/.ssh/id_rsa. Zusätzlich, der Systemadministrator kann dies zum Generieren von Hostschlüsseln verwenden.

Die Zusammenfassung führt dies -Ain einer eigenen Zeile auf, ohne weitere Optionen:

SYNOPSIS
     ssh-keygen [-q] [-b bits] -t type [-N new_passphrase] [-C comment]
                [-f output_keyfile]
     ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]
     ssh-keygen -i [-m key_format] [-f input_keyfile]
     ssh-keygen -e [-m key_format] [-f input_keyfile]
     ssh-keygen -y [-f input_keyfile]
     ssh-keygen -c [-P passphrase] [-C comment] [-f keyfile]
     ssh-keygen -l [-f input_keyfile]
     ssh-keygen -B [-f input_keyfile]
     ssh-keygen -D pkcs11
     ssh-keygen -F hostname [-f known_hosts_file] [-l]
     ssh-keygen -H [-f known_hosts_file]
     ssh-keygen -R hostname [-f known_hosts_file]
     ssh-keygen -r hostname [-f input_keyfile] [-g]
     ssh-keygen -G output_file [-v] [-b bits] [-M memory] [-S start_point]
     ssh-keygen -T output_file -f input_file [-v] [-a num_trials] [-K checkpt]
                [-W generator]
     ssh-keygen -s ca_key -I certificate_identity [-h] [-n principals]
                [-O option] [-V validity_interval] [-z serial_number] file ...
     ssh-keygen -L [-f input_keyfile]
     ssh-keygen -A

Das, wonach Sie fragen (abgesehen davon, dass Sie den Quellcode ändern und ihn selbst kompilieren), ist also nicht der beabsichtigte Verwendungszweck.

Weiterführende Literatur:

Antwort2

Laut der Manpage, auf die Thomas verlinkt hat, -fwird jetzt unterstützt ssh-keygen -Aund gibt ein Präfix für die Dateien an. Es sieht also so aus, als wäre diese Funktion hinzugefügt worden.

-A

Erzeugt Hostschlüssel aller Standardschlüsseltypen ( rsa, ecdsa, und ed25519), falls diese noch nicht vorhanden sind. Die Hostschlüssel werden mit dem Standardschlüsseldateipfad, einer leeren Passphrase, Standardbits für den Schlüsseltyp und einem Standardkommentar erzeugt. Wenn -fauch angegeben wurde, wird sein Argument als Präfix für den Standardpfad der resultierenden Hostschlüsseldateien verwendet. Dies wird verwendet, /etc/rcum neue Hostschlüssel zu erzeugen.

Notizdass die etc/sshOrdner unter dem Ausgabeordner vorhanden sein müssen, bevor sie ausgeführt werdenssh-keygen

$ mkdir -p output/etc/ssh

$ ssh-keygen -A -f output
ssh-keygen: generating new host keys: RSA ECDSA ED25519

$ ls output/etc/ssh/
ssh_host_ecdsa_key  ssh_host_ecdsa_key.pub  ssh_host_ed25519_key  ssh_host_ed25519_key.pub  ssh_host_rsa_key  ssh_host_rsa_key.pub

Antwort3

Wenn Sie Zugriff auf Docker haben (was der Grund war, warum ich dies tun wollte), habe ich Folgendes verwendet, um einen neuen, dauerhaften Host-Schlüssel zu erstellen, der sich außerhalb des Containers befindet:

docker run -d --name get_host_keys lscr.io/linuxserver/openssh-server:latest
sleep 5
docker cp get_host_keys:/etc/ssh/. .
rm *config*
docker stop get_host_keys
docker rm get_host_keys

verwandte Informationen