SSH 公钥格式

SSH 公钥格式

我有一个以下格式的公钥:

---- BEGIN SSH2 PUBLIC KEY ----

Comment: "somename-20060227"
AAAAB3NzaC1yc2EAAAABJQAAAIBmhLUTJiP[and so on]==

---- END SSH2 PUBLIC KEY ----

通常我看到的键的格式如下:

ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAqof[and so on]

我可以只复制 authorized_keys 文件中的第一个密钥吗?还是我必须以某种方式修改它以使其看起来像第二个密钥?我认为第一个是由 PUTTYgen 生成的,而第二个是由 ssh-keygen 生成的。

答案1

用于ssh-keygen -i将SSH2兼容格式转换为OpenSSH兼容格式。

man ssh-keygen

-i 此选项将读取 SSH2 兼容格式的未加密私钥(或公钥)文件,并将 OpenSSH 兼容私钥(或公钥)打印到 stdout。ssh-keygen 还读取 RFC 4716 SSH 公钥文件格式。此选项允许从多个商业 SSH 实现导入密钥。

&

-f filename
        Specifies the filename of the key file.

例子:

ssh-keygen -i -f ssh2.pub

答案2

这是完整且正确的答案:

ssh-keygen -i -m PKCS8 -f public-key.pem

答案3

您必须将公钥转换为 openssh 约定:

ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIBmhLUTJiP[and so on]== somename-20060227

还要确保密钥只占据一行,并且在复制时没有引入换行符。

答案4

要为多个密码加密的私钥创建公钥,以下脚本将:

  1. 读取私钥ssh-keygen -e并输出公钥 - 并询问私钥密码
  2. 创建基于 PEM 的公钥并存储在环境变量中
  3. 用于ssh-keygen -i创建与OpenSSH兼容的公钥
  4. 并写入.pub输出文件
for i in $(ls -1 id_rsa_* | grep -v "\.pub$")  # Ignore .pub files
do
  PEM=$(ssh-keygen -e -f $i -m PEM)  # Will ask for the private key password
  echo $(ssh-keygen -i -m PEM -f <(echo "$PEM")) KEY-ALIAS > $i.pub
done

附注:seahorseUbuntu“密码和密钥”代理,需要公钥能够存储私钥。

相关内容