Node.JS exec git命令错误:权限被拒绝(publickey)

时间:2018-02-23 04:34:35

标签: javascript node.js git ssh

问题:如何使用node.jspassphrase投放git push

我正在尝试构建一个小模块,我需要从node.js运行repo到远程node.js exec,但是当我使用{{{}时,我收到错误1}}但不是来自终端。

我的代码。

./command.ts

import * as util from 'util';

const exec = util.promisify(require('child_process').exec);

export default function command(command: string): Promise<string> {
  return exec(command, {cwd: process.cwd()}).then((resp) => {
    const data = resp.stdout.toString().replace(/[\n\r]/g, '');
    return Promise.resolve(data);
  });
}

./index.ts

import command from './command';

async function init() {
 try {
  await command('git add .');
  await command('git commit -m "my commit" ');
  conat result = await command('git push');
 } catch (e) {
  console.log(e);
 }
}

init();

当我运行ts-node ./index.ts时,我收到以下错误。

Error: Command failed: git push                                                                                                         
git@hostname.org: Permission denied (publickey).                                                                                       
fatal: Could not read from remote repository.                                                                                           

Please make sure you have the correct access rights                                                                                     
and the repository exists.

但是,当我从终端运行git push时,我会收到密码短语的提示并且有效。

有关如何解决此问题的任何想法,有没有办法使用git push使用密码短语运行node.js

请记住,我很乐意在没有任何外部库的情况下解决这个问题。

提前致谢。

2 个答案:

答案 0 :(得分:0)

作为described here,在以下情况下检查相同的程序是否有效:

不仅提示不应再查询您的密码(现在由代理缓存),而且您的脚本也可能从该缓存中受益。

答案 1 :(得分:0)

如果您的密钥已加载到ssh-agent进程中,则可能需要将env: process.env添加到exec()选项中。有一些环境变量ssh-agent导出,其他进程使用它来查找ssh-agent来访问其密钥。