You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用JavaScript导出OpenSSH格式的ed25519私钥?

解决ED25519 PKCS8私钥转OpenSSH格式的问题

你遇到的问题并不是用错了库,而是sshpk的toString('ssh')方法对于私钥对象来说,默认返回的是对应公钥的OpenSSH字符串格式(比如ssh-ed25519 AAAAC3Nza...),而非私钥的PEM文件。

用sshpk生成OpenSSH私钥格式的正确方法

要生成-----BEGIN OPENSSH PRIVATE KEY-----格式的私钥,需要调用私钥对象的toBuffer('openssh')方法,再手动添加PEM头部和尾部,同时按Base64编码的换行规则拆分:

const sshpk = require('sshpk');
const fs = require('fs');

// 读取PKCS8格式的私钥PEM
const pkcs8Pem = fs.readFileSync('./pkcs8-private-key.pem', 'utf8');

// 解析为sshpk私钥对象
const privateKey = sshpk.parsePrivateKey(pkcs8Pem, 'pem');

// 生成OpenSSH私钥的二进制Buffer
const opensshBuffer = privateKey.toBuffer('openssh');

// 转换为符合PEM格式的字符串(Base64每70字符换行)
const opensshPem = `-----BEGIN OPENSSH PRIVATE KEY-----
${opensshBuffer.toString('base64').match(/.{1,70}/g).join('\n')}
-----END OPENSSH PRIVATE KEY-----`;

// 保存到文件
fs.writeFileSync('./id_ed25519', opensshPem);

更简便的替代方案:使用node-forge

如果觉得sshpk的步骤繁琐,可以用node-forge库,它直接提供了将PKCS8私钥转换为OpenSSH私钥PEM的方法:

const forge = require('node-forge');
const fs = require('fs');

// 读取PKCS8私钥PEM
const pkcs8Pem = fs.readFileSync('./pkcs8-private-key.pem', 'utf8');

// 解析私钥并转换为OpenSSH格式
const privateKey = forge.pki.privateKeyFromPem(pkcs8Pem);
const opensshPem = forge.ssh.privateKeyToOpenSSH(privateKey);

// 保存文件
fs.writeFileSync('./id_ed25519', opensshPem);

内容的提问来源于stack exchange,提问作者musterjunk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 21:25:53