首页 > 解决方案 > SSH.Net:更改 IP 地址后执行重启命令超时

问题描述

我正在使用SSH.Net来配置某些设备的 IP 地址。设备需要重新启动才能保存更改的设置。

当我发送重启命令时,设备按预期重启,但执行方法没有返回,而是超时。如果我在不更改 IP 地址的情况下重新启动,该方法将返回并正常完成,因此 IP 地址的更改一定是问题所在。

我尝试将命令添加到队列并按顺序执行它们:

List<string> results = new List<string>();
List<string> commands = new List<string>({"ipaddress 145.43.0.69", "reboot"}); 

using (SshClient client = new SshClient(IPAddress, sshport, username, password))
    {
        // Establish connection
        client.Connect();

        foreach (string command in commands)
        {
            // Excecute ARP query
            SshCommand discover = client.CreateCommand(command);
            discover.CommandTimeout = ts;

            discover.Execute(); // Timeout occurs here

            // Log results
            results.Append(discover.Result);
            MasterLogger.Instance.LogMessage($"Command ran: {command} for {IPAddress}");
        }

        client.Disconnect();
    }

在发送重启命令之前,我还尝试在更改 IP 地址后断开并重新连接到客户端。这确认在发送重启命令之前 IP 地址没有更改。

有人可以解释为什么会发生这种情况,以及如何解决吗?我怀疑这是因为客户端期望来自旧 IP 地址的响应并且没有得到它,但我不确定如何诊断和修复它。

谢谢!

编辑:设法通过使用 ShellStream 修复它。

using (SshClient client = new SshClient(deviceInfo.IPAddress, sshport, deviceInfo.Username, deviceInfo.Password))
    {
        client.Connect();
        ShellStream shellStream = client.CreateShellStream(string.Empty, 0, 0, 0, 0, 0);
        shellStream.WriteLine("reboot");
        client.Disconnect();
    }

如果有人能解释为什么执行命令不起作用,那就太好了!

标签: c#sshssh.net

解决方案


推荐阅读