Команда SSH из C# клиента, перенаправляющего файлы
Исходная реализация Unix просто сделала что-то вроде этого:
ssh [batchname] < [inputfilename] > [outputfilename]
Я должен быть в состоянии сделать то же самое с Windows-машины, на которой запущено приложение, написанное на C#. Я пытался использовать SharpSsh, который включает потоки ввода и вывода, но они, похоже, не работают.
Как я могу передать входные и выходные файлы / потоки, используя SharpSsh (или любую другую.Net библиотеку)?
1 ответ
Решение
Догадаться. Либо запущенное приложение, либо сам SSH ожидает, что ctrl-d будет сигнализировать о конце ввода. В этот момент выходной поток может быть прочитан без зависания.
Если кто-то еще ищет это, посмотрите CliWrap. Он позволяет вам очень легко запускать процессы и конвейерные вводы / выводы.
await using var input = File.Open("input.txt");
await using var output = File.Create("output.txt");
await using var error = File.Create("error.txt");
var cmd = input | Cli.Wrap("child.exe").WithArguments("foo bar") | (output, error);
await cmd.ExecuteAsync();