我正在尝试通过SSH通过节点运行Git命令,但我一直收到错误:
许可被拒绝(公钥)
我想这是因为Node在子进程中运行时无法访问我的SSH密钥?
我怎样才能超越这个?
答案 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。