我一直在尝试在远程计算机上启动额外的 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