仅当从RenciSSH.Net会话调用时,Python套接字超时

时间:2016-10-19 19:16:25

标签: c# sockets python-3.x ssh.net

我有一个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版本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.Net会话。有没有人有任何建议?

谢谢, 格雷格

1 个答案:

答案 0 :(得分:0)

好的 - 我发现了问题。我的Python方法标有@staticmethod。删除此属性后,代码在SSH.Net会话上运行良好。

如果有人关心为什么会这样,我会全力以赴。