ssh-keygen を使用して SSH ホスト キーを再作成するときに出力ディレクトリを変更する (-f スイッチは ssh-keygen が /etc/ssh/ に書き込むのを防ぐことはできません)

ssh-keygen を使用して SSH ホスト キーを再作成するときに出力ディレクトリを変更する (-f スイッチは ssh-keygen が /etc/ssh/ に書き込むのを防ぐことはできません)

リモート マシン上で追加の sshd プロセスを開始しようとしています。使用したい新しい sshd 構成ファイルを含む作業ディレクトリを作成しました。

このディレクトリの設定ファイルを使用して sshd を実行しようとすると、ホスト キーが見つからないというエラーが表示されます。作業ディレクトリの場所を指定するssh-keygen -Aスイッチを使用して実行し、不足しているホスト キーを作成しようとしました-fが、ssh-keygen は指定したディレクトリではなく、キーを配置しようとし続けます/etc/ssh/。/etc/ssh にアクセスできないため、失敗します。

このパスにアクセスせずにこれらのキーを生成するにはどうすればよいですか?

答え1

オプションは生成するように-A指示しますssh-keygenホストキーマニュアルページによると、の意図された用途ssh-keygen

通常、公開鍵認証で SSH を使用する各ユーザーは、これを 1 回実行して、、、またはに
認証キーを作成します。 ~/.ssh/identity
~/.ssh/id_ecdsa~/.ssh/id_dsa~/.ssh/id_rsaさらにシステム管理者はこれを使用してホスト キーを生成できます。

概要では、 が-A1 行に単独でリストされ、他のオプションはありません。

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

したがって、(ソースを変更して自分でコンパイルする以外は)あなたが尋ねているのは、その本来の使用法ではありません。

参考文献:

答え2

Thomas がリンクしたマニュアル ページによると、-fがサポートされるようになりssh-keygen -A、ファイルのプレフィックスが指定されるようになったため、この機能が追加されたようです。

-A

すべてのデフォルト キー タイプ ( rsaecdsaed25519) のホスト キーがまだ存在しない場合は生成します。ホスト キーは、デフォルトのキー ファイル パス、空のパスフレーズ、キー タイプのデフォルトのビット、およびデフォルトのコメントを使用して生成されます。-fも指定されている場合、その引数は、生成されるホスト キー ファイルのデフォルト パスのプレフィックスとして使用されます。これは、新しいホスト キーを生成するために によって使用されます/etc/rc

注記etc/ssh実行前に出力フォルダの下にフォルダが存在している必要があるssh-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

答え3

私がこれをやりたかった理由は、Docker にアクセスできる場合、コンテナーの外部にある新しい永続的なホスト キーを作成するために、次のコードを使用しました。

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

関連情報