【问题标题】:Node.js permission denied public keyNode.js 权限被拒绝公钥
【发布时间】:2018-07-09 21:33:01
【问题描述】:

我正在尝试通过节点通过 SSH 运行 Git 命令,但我不断收到错误消息:

权限被拒绝(公钥)

我猜这是因为 Node 无法访问我的 SSH 密钥,因为它在子进程中运行?

我怎样才能克服这个问题?

【问题讨论】:

    标签: node.js ssh npm


    【解决方案1】:

    在 Windows 上,如果您的凭据正确,那么它应该可以工作。 我猜你正在运行这样的东西-

    require('child_process').spawn('git', ['push', 'origin', 'master']);
    

    它在 ssh 和 https 这两种情况下都适用。

    【讨论】:

    • prob 为您工作,因为您使用的是 .spawn() 而不是 .exec() ???然而,我正在使用一个 npm 脚本来启动它......我还有另一个问题,我的密钥没有被称为我认为节点正在寻找的默认 id_rsa......感谢您的反馈
    • 对我有用的修复程序如下,但由于我的设置的扭曲性质,我的解决方案有些扭曲!我认为这个解决方案可能是开箱即用的解决方案 - 接受
    【解决方案2】:

    我修复了从节点运行 Bash 脚本的问题,如下所示:

    "scripts": {
      "start": "npm-run-all -p server update",
      "server": "dyson rest 7070",
      "update": "sh update.sh"
    }
    

    update.sh 看起来像:

    #!/usr/bin/env bash
    
    set -e
    set -o pipefail
    
    SSH_KEY=/path/.ssh/id_rsa
    
    function update {
      eval $(ssh-agent -s)
      ssh-add ${SSH_KEY}
      git submodule update --recursive --remote
    }
    
    update
    

    主要是在 Node 中启动 ssh-agent,然后在运行 git 命令之前将你的 ssh 密钥添加到代理。

    更新:上述方法有效,但我找到了更好的答案。它失败的原因是因为在执行脚本内部 HOME 环境变量在脚本外部没有指向同一个 HOME。我通过将我的 ssh 密钥放在两个 HOME 文件夹中来解决这个问题。然后脚本能够找到正确的键,瞧。

    PS 您可以通过在 Node 中记录 process.env.HOME 或在 shell 脚本中使用 echo "${HOME}" 来确定 HOME 变量的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-11
      • 2019-11-24
      • 2014-11-08
      • 2012-01-18
      • 2012-04-25
      • 2014-03-18
      • 2023-03-22
      相关资源
      最近更新 更多