You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SSH.NET连接成功后抛出SSHConnectionException问题排查

问题排查与解决方案

针对你使用SSH.NET时连接成功但执行命令丢失连接的问题,可从以下几个方向排查:

  • 主机密钥事件绑定错误
    你代码中绑定的HostReceived事件名称错误,SSH.NET的正确事件是HostKeyReceived,且语法存在问题。错误的事件处理可能导致连接后续稳定性异常,修正后的写法:

    client.HostKeyReceived += (sender, e) => { e.CanTrust = true; };
    

    注意:生产环境请勿直接信任所有主机密钥,应验证服务器指纹匹配,此写法仅适用于测试场景

  • 代码语法错误引发隐性异常
    你的代码存在多处语法问题,这些问题可能导致程序执行流程异常,看似连接成功,实则后续逻辑因错误中断:

    • using(var client new SSHClient(...)) 缺少赋值符号=,应为using(var client = new SshClient(...))
    • client.Connect()、Console.WriteLine(sshcommand.Result) 语句末尾缺少分号
    • 混合写法var sshcommand = client.RunCommand(command) or SShCommand sshcommand = ... 是无效C#语法,需选择单一正确写法,比如:
      // 同步执行命令的正确写法
      var sshCommand = client.RunCommand("some command");
      Console.WriteLine(sshCommand.Result);
      
  • 服务器端限制或连接超时

    • 部分SSH服务器对非交互式连接的命令执行有时间限制,可尝试增加连接超时:
      client.ConnectionInfo.Timeout = TimeSpan.FromSeconds(30);
      
    • 若服务器要求交互式Shell环境,可尝试通过ShellStream执行命令:
      using (var shellStream = client.CreateShellStream("xterm", 80, 24, 800, 600, 1024))
      {
          shellStream.WriteLine("your command");
          Thread.Sleep(1000); // 根据命令执行耗时调整等待时间
          string output = shellStream.Read();
          Console.WriteLine(output);
      }
      
  • 库版本兼容性问题
    旧版本SSH.NET可能存在连接稳定性bug,建议通过NuGet更新至最新版本:

    Install-Package SSH.NET -Version latest
    
  • 网络层面连接中断

    • 防火墙或代理可能主动断开空闲连接,可配置心跳包保持连接:
      client.KeepAliveInterval = TimeSpan.FromSeconds(10);
      
    • 查看服务器端SSH日志(如/var/log/auth.log),确认是否存在服务器主动断开连接的原因(如权限不足、命令执行失败触发的中断)。

内容的提问来源于stack exchange,提问作者Emre Polat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 18:20:03