C#通过Renci.SSH实现远程ssh在linux执行命令后异步读取较大的输出内容,并检测输出结果如果存在"发布成功"字段则运行通过并返回.,netframework版本为4.8
时间: 2024-09-24 22:29:46 浏览: 46
在.NET Framework 4.8环境下,使用Renci.SshNet库可以在C#中实现在Linux服务器上异步执行SSH命令并处理大输出流的情况。以下是一个基本步骤的示例:
首先,你需要添加Renci.SshNet NuGet包到你的项目中,可以通过NuGet Package Manager或直接在`using Renci.SshNet;`语句前加上`Install-Package Renci.SshNet;`。
```csharp
using System;
using System.Threading.Tasks;
using Renci.SshNet;
public class RemoteExecutionManager
{
private readonly SshClient _client;
public RemoteExecutionManager(string host, string username, string password)
{
_client = new SshClient(host);
_client.Connect(username, password);
}
public async Task<string> ExecuteCommandAsync(string command, Action<string> outputHandler)
{
using (var session = _client.CreateShell())
{
// 设置异步读取输出
session.SessionOpenCompleted += (_, e) =>
{
if (!e.Error)
{
session.InputStream.DataReceived += (_, data) => outputHandler(data.Data);
}
};
// 异步执行命令并获取结果
await session.RunCommandAsync(command);
// 检查输出中是否包含"发布成功"
var output = await session.OutputStream.ReadToEndAsync();
if (output.Contains("发布成功"))
{
return "操作成功";
}
else
{
return "操作失败,原因:输出中未找到'发布成功'";
}
}
}
}
// 使用示例
public async Task Main()
{
var manager = new RemoteExecutionManager("your_host", "username", "password");
try
{
var result = await manager.ExecuteCommandAsync("你的命令", line => Console.WriteLine(line));
if (result == "操作成功")
{
Console.WriteLine("任务完成");
}
}
catch (Exception ex)
{
Console.WriteLine($"发生错误: {ex.Message}");
}
}
```
阅读全文