我有一个以下格式的公钥:
---- 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
要为多个密码加密的私钥创建公钥,以下脚本将:
- 读取私钥
ssh-keygen -e
并输出公钥 - 并询问私钥密码 - 创建基于 PEM 的公钥并存储在环境变量中
- 用于
ssh-keygen -i
创建与OpenSSH兼容的公钥 - 并写入
.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
附注:seahorse
Ubuntu“密码和密钥”代理,需要公钥能够存储私钥。