C#通过Renci.SSH实现远程ssh在linux执行命令后异步读取较大的输出内容,并检测输出结果如果存在"发布成功"字段则运行通过并返回
时间: 2024-09-24 13:29:12 浏览: 137
在C#中,你可以使用Renci.SshNet库来实现SSH连接并在Linux服务器上执行命令,特别是当需要处理大量输出内容并且希望异步进行时。以下是使用这个库的一个基本示例:
首先,你需要安装Renci.SshNet NuGet包,可以这样添加到你的项目.csproj文件中:
```xml
<PackageReference Include="Renci.SshNet" Version="2018.2.0" />
```
然后,在你的代码中这样操作:
```csharp
using System;
using System.IO;
using Renci.SshNet;
public async Task<bool> ExecuteAsyncWithLargeOutput(string serverAddress, string username, string password, string command, string successPattern)
{
using (var client = new SshClient(serverAddress))
{
// 设置SSH连接信息
client.Username = username;
client.Password = password;
// 异步连接
await client.ConnectAsync();
try
{
// 执行命令,设置流接收输出
using var streamReader = new StreamReader(client.GetStandardOutput());
string outputLine;
while ((outputLine = await streamReader.ReadLineAsync()) != null)
{
if (outputLine.Contains(successPattern))
{
// 如果找到成功字段,认为任务已通过
return true;
}
}
// 如果未找到指定成功的字符串,表示失败
return false;
}
catch (Exception ex)
{
Console.WriteLine($"Error executing command: {ex.Message}");
return false;
}
finally
{
// 关闭连接
await client.DisconnectAsync();
}
}
}
// 使用示例
bool result = await ExecuteAsyncWithLargeOutput("your-server-address", "username", "password", "command-to-execute", "发布成功");
if (result)
{
Console.WriteLine("命令执行成功");
}
else
{
Console.WriteLine("命令执行失败");
}
```
在这个示例中,`ExecuteAsyncWithLargeOutput`方法会异步地执行给定的命令,检查输出是否包含指定的成功模式(例如“发布成功”),如果找到则返回true,反之返回false。
阅读全文