Node.js权限被拒绝公钥

3
我尝试通过SSH在Node中运行Git命令,但是一直出现错误:

权限被拒绝(公钥)

我猜测这是因为Node没有访问我的SSH密钥,因为它正在子进程中运行?

我该如何解决这个问题?

2个回答

1
我通过以下方式运行了一个Bash脚本来解决这个问题:

从Node中运行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 您可以通过记录 process.env.HOME 在 Node 中确定 HOME 变量的值,或者使用 echo "${HOME}" 在 shell 脚本中确定它的值。


1
在Windows上,如果您的凭据正确,则应该可以正常工作。我猜您正在运行类似于这样的东西 -
require('child_process').spawn('git', ['push', 'origin', 'master']);

在我的情况下,无论是使用ssh还是https,它都可以正常工作。


可能是因为你使用了.spawn()而不是.exec(),所以才能正常工作?但是我是使用npm脚本启动的...另外我还有一个问题,我的密钥不叫默认的id_rsa,我想Node.js正在寻找它...感谢反馈。 - danday74
我的解决方案有些扭曲,因为我的设置比较复杂,但下面的修复方法对我有效。我认为这个解决方案可能是最简单的解决方案。 - danday74

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接