Запуск git clone из C # Процесс игнорирует ввод для парольной фразы - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь запустить 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 также предотвратит взаимодействие.Но изменение кода, чтобы он не перенаправлял, по-прежнему пропускает взаимодействие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...