使用 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 的使用者都會執行一次該命令,以在、或中
建立身份驗證金鑰。 ~/.ssh/identity
~/.ssh/id_ecdsa~/.ssh/id_dsa~/.ssh/id_rsa另外,系統管理員可以使用它來產生主機金鑰。

該概要-A單獨列出了一行,沒有其他選項:

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

rsa產生所有預設密鑰類型( 、ecdsa和)的主機密鑰(ed25519如果它們尚不存在)。主機密鑰是使用預設密鑰檔案路徑、空密碼、密鑰類型的預設位元和預設註釋產生的。如果-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

相關內容