Python套接字仅在从RenciSSH调用时超时.网络会议

本文关键字:超时 网络 会议 调用 RenciSSH 套接字 Python | 更新日期: 2023-09-27 18:13:45

我有一个python 3.4脚本,它与远程主机建立套接字连接,发送数据,并从远程主机获得'OK'消息。如果直接从我的Ubuntu服务器14.04上的终端执行,它运行得很好。以下是python脚本的相关部分:

try:
    sock = socket.socket()
    sock.settimeout(15)
    sock.connect(("10.191.0.2", 6874))
    dataSend = "<request>" + command + "</request>"
    sock.send(dataSend.encode('utf_8'))
    dataRecv = sock.recv(512).decode('utf_8')
    if dataRecv and "'OK'" in dataRecv:
        return "OK"
    else:
        return "Error."
except socket.timeout as err1:
    return "Error:" + str(err1)
except socket.error as err2:
    return "Error:" + str(err2)
finally:
    sock.close()

但是,如果我通过Renci SSH运行这个。从第三台主机发起的Net会话,我在socket.connect()上得到超时。
这里是c#/Renci代码(我使用SSH。Net version 2106.0.0)

using (var sshClient = new SshClient(host, user, keyfile))
{
    sshClient.Connect();
    SshCommand cmd = null;
    try
    {
        sshClient.ConnectionInfo.Timeout = TimeSpan.FromSeconds(timeOut);
        cmd = sshClient.RunCommand(command);
    }
    catch (SshOperationTimeoutException timeoutex)
    {
        Trace.TraceError(string.Format("SshOperationTimeoutException executing command '"{0}'" on {1}: {2}", command, sshClient.ConnectionInfo.Host, timeoutex.ToString()));
    }
    catch (SshException ex)
    {
        Trace.TraceError(string.Format("SshException executing command '"{0}'" on {1}: {2} ", command, sshClient.ConnectionInfo.Host, ex.ToString()));
    }
}

我被难住了,为什么这在本地运行良好,而不是通过SSH。网络会议。有人有什么建议吗?

谢谢,格雷格

Python套接字仅在从RenciSSH调用时超时.网络会议

好的,我找到问题了。我的Python方法被标记为@staticmethod。删除此属性后,代码可以在SSH上正常运行。网络会议。

如果有人想评论为什么会这样,我洗耳恭听。