Команда 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();
Другие вопросы по тегам