【发布时间】:2018-07-09 21:33:01
【问题描述】:
我正在尝试通过节点通过 SSH 运行 Git 命令,但我不断收到错误消息:
权限被拒绝(公钥)
我猜这是因为 Node 无法访问我的 SSH 密钥,因为它在子进程中运行?
我怎样才能克服这个问题?
【问题讨论】:
我正在尝试通过节点通过 SSH 运行 Git 命令,但我不断收到错误消息:
权限被拒绝(公钥)
我猜这是因为 Node 无法访问我的 SSH 密钥,因为它在子进程中运行?
我怎样才能克服这个问题?
【问题讨论】:
在 Windows 上,如果您的凭据正确,那么它应该可以工作。 我猜你正在运行这样的东西-
require('child_process').spawn('git', ['push', 'origin', 'master']);
它在 ssh 和 https 这两种情况下都适用。
【讨论】:
我修复了从节点运行 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 变量的值。
【讨论】: