【问题标题】:Copy files over SSH failed "Error: Cannot parse privateKey: Unsupported key format."通过 SSH 复制文件失败“错误:无法解析 privateKey:不支持的密钥格式。”
【发布时间】:2020-01-27 01:26:58
【问题描述】:

我试图通过 SSH 复制文件,我使用相同的 SSH 服务连接,它与其他 SSH 任务一样好,但复制文件似乎遇到了麻烦,这是我监控用户登录时的样子

 sshd[32240]: Accepted publickey for azurePPL1 from 13.69.175.211 port 1984 ssh2: ECDSA SHA256:0...

这似乎很好,但事实并非如此?

这是 Azure Pipelines 抛出的错误

Error: Failed to connect to remote machine. Verify the SSH service connection details. Error: Cannot parse privateKey: Unsupported key format.

现在我会怀疑我的 SSH 服务连接配置,但由于其他 ssh 工作我不确定它可能是什么

感谢任何帮助

【问题讨论】:

    标签: azure-devops azure-pipelines


    【解决方案1】:

    使用相同的 SSH 服务连接,其他都可以 SSH 任务但复制文件似乎遇到了麻烦

    由于其他 SSH 任务都可以使用相同的 SSH 服务连接,只是 Copy Files over SSH 失败了,这意味着您的 SSH 密钥对和连接没有错误。事实上,与Copy Files over SSH任务中使用的解析器有关。

    复制文件任务脚本功能见github开源:function run in CopyFileOverSSH.ts,类SshHelper定义:sshhelper.ts。事实上,Copy Files over SSH 任务使用Ssh2 npm package 进行 SSH 连接并验证,您面临的错误消息来自那里。对于复制文件任务本身,它不做任何密钥解析。

    关于key解析,看这个源码函数:keyParser.js。定位到第 1447 行,你会看到是你在 Azure Devops 的任务中收到的错误信息。

    据我所知,任务v0.148 正在使用ssh2 库v0.8,但现在ssh2 库已使用updated into v0.8.5

    所以要解决这个问题请用命令ssh-keygen -t rsa -m PEM重新生成密钥对,强制ssh-keygen导出为PEM格式。因此密钥可以在复制文件任务中工作。

    【讨论】:

    • 是的,这是 RSA 密钥的情况,但不是 ECDSA,希望新版本很快就会推出
    • @Tero,你可以在开发者社区或者github上提票。因此我们的产品组会注意到这个问题,这是由于库版本不是最新的。开发者社区可以直接从我们的产品组获得回复/联系。
    • 我已经创建了一个issue at github,但会尝试在开发者社区中创建一个。
    【解决方案2】:

    现在很明显,Azure 任务使用的是旧版本的 ssh2 其中不支持 Ed25519 密钥,这会导致此问题,所以现在只能使用 RSA。

    【讨论】:

      猜你喜欢
      • 2019-04-23
      • 2019-04-23
      • 2019-10-18
      • 2020-10-25
      • 2022-12-18
      • 2021-06-01
      • 2015-11-15
      • 2019-10-25
      • 2015-04-03
      相关资源
      最近更新 更多