使用 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

相关内容