前几天使用 FinalShell 客户端连接SSH时,发现不能识别Linux下生成的私钥格式。
几年前Linux生成的私钥反而还能识别。不能识别私钥时,如下提示:
暂不支持此私钥格式,请参考以下方法解决:
1.转换成PEM格式私钥
ssh-keygen -p -m PEM -f 私钥路径
2.生成PEM格式的私钥
生成时增加 -m PEM参数
ssh-keygen -m PEM -t rsa -C "注释"
发现最近ssh-keygen生成的私钥都变成以 -----BEGIN OPENSSH PRIVATE KEY-----
开头,
而几年前的私钥,以 -----BEGIN RSA PRIVATE KEY-----
开头
方案一:
在Linux服务器,先备份原有RSA私钥,再执行 FinalShell 提示的私钥转换命令。
因为 执行私钥转换新私钥会覆盖原私钥内容
。
方案二:
使用puttygen先将私钥转为.ppk格式,再转换回来。
例:
tempkey的内容:
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAA...
-----END OPENSSH PRIVATE KEY-----
转换为ppk格式:
puttygen tempkey -o tempkey.ppk
转换回openssh格式:
puttygen tempkey.ppk -O private-openssh -o tempkey.oldformat
tempkey.oldformat的内容:
-----BEGIN RSA PRIVATE KEY-----
MIIJJwIBAAKCAgEAzmmS5aA0....
-----END RSA PRIVATE KEY-----
几个概念说明:id_rsa、id_rsa.pub、ppk、pem
目前有两个主流的密钥格式:OpenSSH格式的密钥 和 PuTTY格式的密钥。
id_rsa和id_rsa.pub
都是OpenSSH格式的密钥。
id_rsa是OpenSSH格式的SSH私钥。
id_rsa.pub是OpenSSH格式的SSH公钥。
ppk文件
ppk文件是Putty的私钥。PuTTY Private Key 的缩写。
但是ppk文件中同时包含了公钥和私钥,可用记事本打开查看。
pem文件
pem文件可以包含任何东西: 具有公共密钥的证书,SSH公钥,公钥私钥,具有公钥私钥的证书。 PEM是一个文本文件,可以用记事本打开。
OpenSSH格式 和 PuTTY格式使用的都比较多,经常拿到其中一种格式,而使用中却需要另一种格式的。这就需要转换。
linux下的相互转换
安装putty工具
sudo apt-get install putty-tools
ppk转换为OpenSSH格式
ppk转私钥
puttygen /path/to/puttykey.ppk -O private-openssh -o ~/.ssh/id_rsa
ppk转公钥
puttygen /path/to/puttykey.ppk -O public-openssh -o ~/.ssh/id_rsa.pub
OpenSSH格式转换为ppk
puttygen keyname -o keyname.ppk
关于ssh-keygen 生成的key以“BEGIN OPENSSH PRIVATE KEY”开头 https://www.cnblogs.com/soner/p/10412888.html
PuTTY的ppk密钥与OpenSSH密钥互相转换 https://www.jianshu.com/p/7818b3ad1d72
SSH私钥新格式(OPENSSH)转换回老格式(RSA)