Node.js权限被拒绝公钥

时间:2018-01-30 19:07:11

标签: node.js ssh npm

我正在尝试通过SSH通过节点运行Git命令,但我一直收到错误:

  

许可被拒绝(公钥)

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

我怎样才能超越这个?

2 个答案:

答案 0 :(得分:1)

我修复了从节点运行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文件夹中来修复此问题。然后脚本能够找到正确的密钥和voilà。

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

答案 1 :(得分:1)

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

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

在两种情况下,它都适用于我,ssh和https。