我正在尝试通过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也将阻止交互。但是将代码更改为不重定向仍然会跳过交互。