OpenSSH私钥BEGIN OPENSSH PRIVATE KEY与BEGIN RSA PRIVATE KEY转换方式。

比如Git使用时已经生成了openssh格式的密钥,但其他系统需要用你的私钥时,发现格式不对,恼火!

  • OpenSSH
  • BEGIN OPENSSH PRIVATE KEY
  • BEGIN RSA PRIVATE KEY
  • OPENSSH PRIVATE KEY
  • RSA PRIVATE KEY
  • ssh-keygen
  • puttygen

一、简单对比

ssh-keygen -t rsa 生成ssh,默认是以新的格式生成,与OpenSSH 1 有关,高版本默认OPENSSH格式,不同的加密算法 2

OPENSSH加密算法

-----BEGIN OPENSSH PRIVATE KEY-----
xxxxxxxxxxx
-----END OPENSSH PRIVATE KEY-----

RSA加密算法

-----BEGIN RSA PRIVATE KEY-----
xxxxxxxxxxx
-----END RSA PRIVATE KEY-----

二、如何生成RSA格式加密文件

ssh-keygen指定格式

执行以下命令,指定格式为PEM,即-m PEM:

loongshawn@xxx /usr/bin$ssh-keygen -m PEM -t rsa -b 4096 -f /home/loongshawn/.ssh/demo

执行结果如下:

Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/loongshawn/.ssh/demo
Your public key has been saved in /home/loongshawn/.ssh/demo.pub
The key fingerprint is:
SHA256:xxxx loongshawn@xxx
The key's randomart image is:
+---[RSA 4096]----+
|       . + d =   |
|          ..+ .  |
+----[SHA256]-----+

进入生成加密密钥的文件夹,找到加密文件,查看格式:

loongshawn@xxx ~/.ssh$cat demo
-----BEGIN RSA PRIVATE KEY-----
DXGGHTRFFDFAsDmHEcSRdAIj0kjdgu65sggsx4dPWaM0grptdn

关于ssh-kengen3后面的参数说明:

  • -m: 参数指定密钥的格式,PEM(也就是RSA格式)是之前使用的旧格式
  • -b:指定密钥长度;
  • -e:读取openssh的私钥或者公钥文件;
  • -C:添加注释;
  • -f:指定用来保存密钥的文件名;
  • -i:读取未加密的ssh-v2兼容的私钥/公钥文件,然后在标准输出设备上显示openssh兼容的私钥/公钥;
  • -l:显示公钥文件的指纹数据;
  • -N:提供一个新密语;
  • -P:提供(旧)密语;
  • -q:静默模式;
  • -t:指定要创建的密钥类型

puttygen工具转换

工具下载地址:https://www.puttygen.com/ ,有Linux、Mac、Windows版本,按需下载,安装方式自行百度或Google。

以Linux版本为例说明。

loongshawn@xxx /home/develop/puttygen#./puttygen /home/xxxx/.ssh/id_rsa -o loongshawn.ppk
loongshawn@xxx /home/develop/puttygen#ll
-rw-------. 1 root               root                      1900 1月  01 21:21 loongshawn.ppk
loongshawn@xxx /home/develop/puttygen#./puttygen loongshawn.ppk -O private-openssh -o loongshanw_id_rsa
loongshawn@xxx /home/develop/puttygen#ll
总用量 3952
-rw-------. 1 root               root                      1900 1月  01 21:21 loongshawn.ppk
-rw-------. 1 root               root                      1900 1月  01 21:25 loongshanw_id_rsa
loongshawn@xxx /home/develop/puttygen#cat loongshanw_id_rsa 
-----BEGIN RSA PRIVATE KEY-----
HMGRG5AIBAAKCAYEA5yaDVP9DltF1XGthgdgdjgggweEHEeqzvwHg6AVvS8XREM
0ccvvshahkahknvhrGGGHjJKKKNIwvTHazjB59pNX/RyCpjZIIk5I4cxkyHsnBo
  • 第一步:生成ppk文件,puttygen /home/xxxx/.ssh/id_rsa(源文件) -o loongshawn.ppk(中间文件)
  • 第二步:转换为rsa-pem格式转换,puttygen loongshawn.ppk(中间文件) -O private-openssh -o loongshanw_id_rsa(目标文件)

日常中若已经生成了openssh的key, 也不便删除从新生成rsa的key,可以使用本方式进行格式转换。若文中有不对指出,望不吝指出,谢谢!

  1. What is OpenSSH? ↩︎

  2. SSH keys (简体中文) ↩︎

  3. ssh-keygen 维基百科 ↩︎

现在使用命令 ssh-keygen -t rsa 生成ssh,默认是以新的格式生成,id_rsa的第一行变成了“BEGIN OPENSSH PRIVATE KEY” 而不在是“BEGIN RSA PRIVATE KEY”,此时用来msyql、MongoDB,配置ssh登陆的话,可能会报 “Resource temporarily unavailable. Authentication ... 当前支持具有NIST曲线的ssh-rsassh-dss(DSA),ssh-ed25519和ecdsa密钥。 pip install sshpubkeys 或克隆并使用 python setup.py install import sys from sshpubkeys import SSHKey ssh = SSHKey("ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAYQCxO38tKAJXIs9ivPxt7AY" "dfybgtAR1ow3Qkb9GPQ6 关于ssh连接在github上建立一个ssh连接如何管理多个ssh连接整理地址 在github上建立一个ssh连接 1.使用提供的电子邮件作为标签,这将创建一个新的ssh密钥 $ ssh-keygen -t rsa -b 4096 -C "your_email@example.com" > Generating public/private rsa key pair. # $ ssh-key... 发现mac生成的ssh private key是id_rsa 打开发现是OpenSSHkey 没有现成的命令可以生成,使用puttygen转 1、mac安装puttygen brew install putty 2、转成ppk格式 puttygen id_rsa -o id_rsa.ppk 3、转成RSA PRIVATE KEY puttygen id_rsa.ppk -O private-...... 最近在用RSA做签名校验,遇到个坑,对方给的RSA密钥一直不能解析成PublicKey对象, 他们那边使用PHP可以直接使用,我这边是用java代码却用不了,百度相关的资料也很少, 后来才发现是RSA密钥的证书格式不一样,今天做一下总结; 一、区别: 1.1、-----BEGIN CERTIFICATE-----格式密钥: 这种密钥的格式是cer的密钥证书,如下图: 在PHP代码中是可以...... 这是生成的key格式不同,新的openssh的格式 -----BEGIN OPENSSH PRIVATE KEY----- b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn -----END OPENSSH PRIVATE KEY----- 安装git后,右键打开git bash putt... -----BEGIN OPENSSH PRIVATE KEY----- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -----END OPENSSH PRIVATE KEY----- 但是,JSCH不支持这种形式的秘钥; OPENSSH PRIVATE KEY转换为RSA PRIVATE KEY 一、解决问题 部分库(如:JSch)不支持OPENSSH PRIVATE KEY格式的私钥 二、涉及工具 puttygen 三、具体内容 1、OPENSSH PRIVATE KEY格式 -----BEGIN OPENSSH PRIVATE KEY----- XXXXXXXXXXXXXXXXXXXXXXXXXXXXX... [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gMRxYesO-1629690137976)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210823112323037.png)] Publish Over SSH 配置认证方式密码或者是密钥 Passphrase:密码