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

Ssh.Net Execute()命令二次调用无返回,C#程序卡死问题排查

SSH.NET二次执行Reboot命令卡死的解决办法

我通过C#应用程序使用SSH.NET库对Yocto远程设备执行两次重启操作,第一次执行正常,设备可正常重启;两次操作间的其他步骤与该问题无关,但第二次调用Exec()命令时无返回,C#程序直接陷入卡死状态。

该功能在远程设备的旧版Yocto发行版中可正常运行,推测是远程设备上的SSH服务器发生变更导致,但不知如何调整C#应用程序解决问题。

原问题代码

public void Reboot()
{
    SshClient sshClient;
    SshCommand rebootCmd;
    sshClient.Connect();
    string rebootCmdline = "reboot";
    rebootCmd = sshClient.CreateCommand(rebootCmdline);
    try
    {
        rebootCmd.Execute(); //第二次执行此处无返回,程序卡死
    }
    catch (SshConnectionException) { }
}

命令行测试验证

通过命令行执行ssh user@host 'reboot',两次均能正常触发设备重启,说明设备端SSH服务本身可正常响应该命令。

已验证的解决方案

改用ShellStream替代SshCommand后,服务器可执行命令,且客户端无需等待响应,程序不再卡死。在命令执行与断开连接间添加延时,避免竞态条件:

public void Reboot()
{
    SshClient sshClient;
    sshClient.Connect();
    ShellStream shellStream = this.sshClient.CreateShellStream(string.Empty, 0, 0, 0, 0, 0);
    shellStream.WriteLine("reboot");
    Thread.Sleep(1000);

    this.SshDisconnect();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 15:18:54