【问题标题】:Invalid format when creating an id_rsa file with Node使用 Node 创建 id_rsa 文件时格式无效
【发布时间】:2020-12-22 21:34:31
【问题描述】:

我在 Ubuntu 上使用 NodeJS 为 ssh 生成 id_rsa 文件。我的代码如下所示,私有 ssh 密钥存储在一个名为 action.deployKey 的环境变量中。

import { isNullOrUndefined } from "./util";
import {promisify} from 'util';
import { appendFile } from 'fs';

const action = {
  deployKey: `
    -----BEGIN OPENSSH PRIVATE KEY-----
    ...
    -----END OPENSSH PRIVATE KEY-----
  `
}

const ssh = `${process.env.HOME}/.ssh`;
const createFile = promisify(appendFile)
await createFile(`${ssh}/id_rsa`, action.deployKey)

文件似乎正在创建中,但是当我尝试运行使用密钥的经过身份验证的请求时遇到以下错误。

Load key "/home/runner/.ssh/id_rsa": invalid format

我是否需要为此设置某种编码以使密钥有效?或者密钥是否可能没有正确写入文件?

ssh 客户端在发出尝试请求之前会打印以下内容,因此它似乎确实知道我添加了一个 id_rsa 文件。

Warning: Permanently added the RSA host key for IP address x.x.x.x to the list of known hosts.

我在 GitHub 操作中使用它,所以我唯一的见解是打印我不想做的密钥。

任何帮助将不胜感激!

【问题讨论】:

  • 文件必须以换行符结尾。是这样吗?
  • 该变量以换行符存储,但我想知道 Node 是否正在删除它?
  • 最小的可重现示例 - 请添加重现问题的 action.deployKey 分配。
  • 完成。到目前为止,我已经尝试了很多事情,但我似乎无法让它发挥作用。有没有办法可以将其重新格式化为所需的格式?
  • 您是否尝试删除每行前的前导空格、开始标记的第一个 - 之前的 CR/LF 以及结束标记的最后一个 - 之后的 CR/LF 和空格?

标签: javascript node.js ssh


【解决方案1】:

当使用OPENSSH 而不是RSA 时,Github Actions 会发生此错误

您需要将 ssh 密钥编码为 RSA 密钥。

    -----BEGIN O̶P̶E̶N̶S̶S̶H̶ RSA PRIVATE KEY-----
    ...
    -----END O̶P̶E̶N̶S̶S̶H̶ RSA PRIVATE KEY-----

【讨论】:

    猜你喜欢
    • 2020-08-06
    • 2020-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多