Тайм-аут сокета Python только при вызове из сеанса RenciSSH.Net

У меня есть скрипт python 3.4, который подключается через сокет к удаленному хосту, отправляет данные и возвращает сообщение «ОК» с удаленного хоста. Он работает нормально, если выполняется непосредственно из терминала на моем сервере 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. У кого-нибудь есть предложения?

Спасибо, Грег


person Greg Enslow    schedule 19.10.2016    source источник
comment
Вы пробовали использовать обычное SSH-соединение и выполнять точно такую ​​же команду?   -  person Gusman    schedule 19.10.2016
comment
Да, он отлично работает и в обычном сеансе ssh. Это просто выходит из строя сеанс SSH.Net.   -  person Greg Enslow    schedule 19.10.2016


Ответы (1)


ОК - я нашел проблему. Мой метод Python был помечен @staticmethod. После удаления этого атрибута код нормально работает в сеансе SSH.Net.

Если кто-то хочет прокомментировать, почему это так, я весь внимание.

person Greg Enslow    schedule 19.10.2016