Node.JS执行git命令错误:Permission denied (publickey)。

3
问题:如何在node.js中使用passphrase运行git push
我正在尝试构建一个小模块,其中需要从node.js运行git push到远程repo,但是当我用node.js exec而不是终端时,会出现错误。
以下为我的代码: ./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 时,会提示输入密码并且可以工作。

有什么办法解决这个问题吗?是否有一种方法可以使用 node.js 运行带有密码的 git push 命令?

请注意,我希望在不使用任何外部库的情况下解决此问题。

先行致谢。


如果您愿意使用用户名和密码,您可以轻松地执行 git push https://username:password@myrepository.biz/file.git --all - Jiby Jose
2个回答

0

此处所述, 检查同一程序在以下情况下是否有效:

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


谢谢您的回复,它有效,但是如果没有SSH密钥,用户将被提示输入用户名和密码。 - diegoddox
@diegoddox 嗯,没错... 但是在你的情况下,有一个SSH密钥,对吧? - VonC
我会,但是我将要交接模块的人可能没有。最好的方法是如果exec在需要时可以提示输入passphrase/user:pass - diegoddox
1
@diegoddox 那么使用 https URL 可能更好:这样他们就可以缓存自己的凭据。 - VonC

0
你可能需要在你的 exec() 选项中添加 env: process.env,如果你的密钥已经加载到 ssh-agent 进程中。ssh-agent 导出了一些环境变量,其他进程使用这些变量来找到 ssh-agent 并访问其密钥。

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