【问题标题】:Convert single line RSA private ssh key to multi line将单行 RSA 私有 ssh 密钥转换为多行
【发布时间】:2019-05-28 01:24:57
【问题描述】:

我有这些已转换为单行等效密钥的私钥。

这些键是相当多的。

所以我决定花点时间写一个脚本来转换。

这并没有产生太大的影响。

-----BEGIN RSA PRIVATE KEY----pEdInVAbH4d0PH4=pEdInVAbH4d0PH4=pEdInVAbH4d0PH4=pEdInVAbH4d0PH4= pEdInVAbH4d0PH4=pEdInVAbH4d0PH4=pEdInVAbH4d0PH4=pEdInVAbH4d0PH4= pEdInVAbH4d0PH4=pEdInVAbH4d0PH4=pEdInVAbH4d0PH4=pEdInVAbH4d0PH4= pEdInVAbH4d0PH4=pEdInVAbH4d0PH4=pEdInVAbH4d0PH4=pEdInVAbH4d0PH4= pEdInVAbH4d0PH4=pEdInVAbH4d0PH4=pEdInVAbH4d0PH4=pEdInVAbH4d0PH4= -----END RSA PRIVATE KEY-----

我正在使用echo ~/.ssh/id_rsa | tr " " "\n"

这会返回:

-----BEGIN 
RSA 
PRIVATE 
KEY----- 
pEdInVAbH4d0PH4=pEdInVAbH4d0PH4=pEdInVAbH4d0PH4=pEdInVAbH4d0PH4=
pEdInVAbH4d0PH4=pEdInVAbH4d0PH4=pEdInVAbH4d0PH4=pEdInVAbH4d0PH4=
pEdInVAbH4d0PH4=pEdInVAbH4d0PH4=pEdInVAbH4d0PH4=pEdInVAbH4d0PH4=
pEdInVAbH4d0PH4=pEdInVAbH4d0PH4=pEdInVAbH4d0PH4=pEdInVAbH4d0PH4=
pEdInVAbH4d0PH4=pEdInVAbH4d0PH4=pEdInVAbH4d0PH4=pEdInVAbH4d0PH4=
-----END
RSA
PRIVATE
KEY-----

我一直在尝试找出将其恢复为正确格式的最佳方法。

【问题讨论】:

  • 大声笑,你只是使用我尚未发布的 C# 中的 PEM 编码器/解码器。说真的,这是标准的 OpenSSL / PEM 格式,它不是 SSH 特定的。
  • 呃,写 RSA 私钥完全出错的人,这不是一个 base64 行,它可能只是所有 base64 单独编码的组件。它还在封装前边界(即标题行)中缺少破折号。
  • @MaartenBodewes 我认为这只是虚拟字符,因为 OP 不想透露他们的私钥。

标签: encryption ssh openssl rsa


【解决方案1】:

假设一个标准 RSA 私钥刚刚删除了换行符,几个 sed 替换将使您恢复到原始格式:

sed -e "s/-----BEGIN RSA PRIVATE KEY-----/&\n/"\
    -e "s/-----END RSA PRIVATE KEY-----/\n&/"\
    -e "s/\S\{64\}/&\n/g"\
    ~/.ssh/id_rsa

标准密钥格式要求BEGINEND 语句位于单独的一行,并且base64 编码的密钥格式为64 列。上面的命令会让你到达那里。

【讨论】:

  • @WilliamRoss 最好的猜测:你没有与我的代码中的相同的开始节(-----BEGIN RSA PRIVATE KEY-----)。也许你的有BEGIN EC PRIVATE KEYBEGIN PRIVATE KEY。或者,也许您在某些时候不小心删除了连字符...
  • @WilliamRoss 删除你的评论是为了表明我的猜测是正确的,你的问题已经解决了吗?
【解决方案2】:

@robby 感谢您的回答,我改编了以下对我有用的内容。

sed -e "s/-----BEGIN RSA PRIVATE KEY-----/&\n/" -e "s/\S\{64\}/&\n/g" | sed "s/^\s//g" ~/.ssh/id_rsa

【讨论】:

  • 我在 Ubuntu 上试过这个并且工作正常。但不是在 MacBook 上
  • 您需要在 mac 中安装 GNU sed,例如 brew install gnu-sed,然后使用 gsed 而不是 sed
【解决方案3】:

我将解决方案改编为 ed25519 算法,以通过 SSH 与 Gitlab 对话。谢谢@Robby!

RUN sed -i -e "s/-----BEGIN OPENSSH PRIVATE KEY-----/&\n/"\
    -e "s/-----END OPENSSH PRIVATE KEY-----/\n&/"\
    -e "s/\S\{70\}/&\n/g"\
    /root/.ssh/id_ed25519

输入

-----BEGIN OPENSSH PRIVATE KEY----- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX== -----END OPENSSH PRIVATE 
KEY-----

输出

-----BEGIN OPENSSH PRIVATE KEY-----
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX==
-----END OPENSSH PRIVATE KEY-----

【讨论】:

    猜你喜欢
    • 2015-09-08
    • 2010-11-03
    • 2013-07-17
    • 2023-03-29
    • 1970-01-01
    • 2014-11-27
    • 1970-01-01
    • 2019-11-15
    • 2012-07-13
    相关资源
    最近更新 更多