У меня есть скрипт 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. У кого-нибудь есть предложения?
Спасибо, Грег