C#实现远程ssh在linux异步执行多条命令后读取较大的输出内容,并分别检测输出结果如果存在"发布成功"字段则运行通过并返回,Renci.ssh为2016版本,.netframework为4.8
时间: 2024-09-25 16:01:48 浏览: 46
在C#中,使用Renci.SshNet库(已停止维护,推荐使用SSH.NET)连接Linux服务器并异步执行多条SSH命令,尤其是处理较大输出且需要检查特定字段的情况,可以按照以下步骤操作:
1. 首先,你需要安装SSH.NET库。你可以从NuGet包管理器中搜索并安装`SSH.NET`。
```csharp
using SSH.NET;
```
2. 创建SSH客户端实例,并连接到远程主机:
```csharp
var client = new SshClient();
client.HostName = "your-linux-host";
client.Username = "your-username";
client.Password = "your-password"; // 或者使用私钥等其他认证方式
client.Connect();
```
3. 异步执行命令并获取输出。由于输出可能很大,可以分批读取以避免内存溢出。例如,每次读取一部分直到遇到换行符:
```csharp
string commandOutput = string.Empty;
using (var streamReader = new StreamReader(client.Session.CreatePseudoTerminal()))
{
var commands = new List<string> { "command1", "command2", ... };
foreach (var cmd in commands)
{
client.Session.SendCommand(cmd);
while (!streamReader.EndOfStream)
{
var line = streamReader.ReadLine();
commandOutput += line;
if (line.Contains("发布成功")) // 检查输出是否包含指定字段
{
break; // 如果找到,跳出循环
}
}
}
}
```
4. 完成所有命令执行后,判断是否全部通过:
```csharp
bool allCommandsPassed = !commandOutput.Contains("错误") && commandOutput.Contains("发布成功");
if (allCommandsPassed)
{
Console.WriteLine("所有命令运行通过");
// 返回成功标志或其他处理
}
else
{
Console.WriteLine("有一个或多个命令未通过");
// 返回失败标志或其他处理
}
client.Disconnect();
```
5.
阅读全文