我有一个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会话。有没有人有任何建议?
谢谢, 格雷格
答案 0 :(得分:0)
好的 - 我发现了问题。我的Python方法标有@staticmethod。删除此属性后,代码在SSH.Net会话上运行良好。
如果有人关心为什么会这样,我会全力以赴。