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 -A
den -f
Schalter 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 -A
Option gibt ssh-keygen
an,Hostschlüssel. Laut der Manualpage ssh-keygen
ist 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_dsa
oder zu erstellen~/.ssh/id_rsa
. Zusätzlich, der Systemadministrator kann dies zum Generieren von Hostschlüsseln verwenden.
Die Zusammenfassung führt dies -A
in 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, -f
wird jetzt unterstützt ssh-keygen -A
und 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
, unded25519
), 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-f
auch angegeben wurde, wird sein Argument als Präfix für den Standardpfad der resultierenden Hostschlüsseldateien verwendet. Dies wird verwendet,/etc/rc
um neue Hostschlüssel zu erzeugen.
Notizdass die etc/ssh
Ordner 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