Я пытаюсь запустить git clone через процесс C #, который также проходит в месте расположения ключа 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: В доступе отказано (publickey) «.Немедленная ошибка.
Что также интересно, процесс возвращается только из 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 также предотвратит взаимодействие.Но изменение кода, чтобы он не перенаправлял, по-прежнему пропускает взаимодействие.