从C#进程运行git clone忽略密码输入

时间:2018-11-29 02:40:08

标签: c# git process

我正在尝试通过C#进程运行git clone,该进程也传递了SSH密钥的位置。

命令:

cd C:\\repo-location && SET GIT_SSH_COMMAND=ssh -o StrictHostKeyChecking=no -i path\to\.ssh\privKey && git clone git@bitbucket.org:location.git

将按预期提示输入密码,但是,使用Process似乎会忽略它,因此我得到了“ git@bitbucket.org:权限被拒绝(公钥)”。立即出错。

有趣的是,流程仅从StandardError返回。

代码如下:

ProcessStartInfo pInfo = new ProcessStartInfo();
pInfo.FileName = "C:\\Git\\git-cmd.exe";
pInfo.Arguements = "cd C:\\repo-location && " +
    "SET GIT_SSH_COMMAND=ssh -o StrictHostKeyChecking=no -i \"path\to\.ssh\privKey\" && " +
    "git clone git@bitbucket.org:location.git";
pInfo.RedirectStandardOutput = true;
pInfo.RedirectStandardError = true;
pInfo.RedirectStandardInput = true;
pInfo.UseShellExecute = false;
pInfo.CreateNoWindow = true;

Process process = Process.Start(pInfo);
process.BeginOutputReadLine();
process.BeginErrorReadLine();
process.ErrorDataReceived += new DataReceivedEventHandler((object sendingProcess, DataReceivedEventArgs outLine) => {
    if (!string.IsNullOrEmpty(outLine.Data) && outLine.Data.StartsWith("Enter passphrase")) {
        //Never hits here...
        process.StandardInput.WriteLine(password);
    }
});
process.OutputDataReceived += new DataReceivedEventHandler((object sendingProcess, DataReceivedEventArgs outLine) => {
    if (!string.IsNullOrEmpty(outLine.Data) && outLine.Data.StartsWith("Enter passphrase")) {
        //Never hits here...
        process.StandardInput.WriteLine(password);
    }
});

我尝试了其他方法来使SSH与git config core.sshCommand一起使用,但是当从git-cmd.exe运行时,它甚至不提示输入密码。

我宁愿不使用ssh-agent,因为可能需要指向一些键。

编辑:

这可能可以归结为允许C#进程不使用密码提示,而这就是问题所在。有人对此有任何解决方案吗?

更多信息:

我注意到,即使在cmd.exe中使用命令并重定向stdout也将阻止交互。但是将代码更改为不重定向仍然会跳过交互。

0 个答案:

没有答案