gpt4 book ai didi

python执行远程程序

转载 作者:IT王子 更新时间:2023-10-29 00:53:45 26 4
gpt4 key购买 nike

我正在使用 Python 重写一个遗留的 Windows 应用程序并在 Linux 上运行。最初,新应用程序需要调用遗留应用程序,以便我们在仍在使用遗留应用程序的客户和使用新应用程序的客户之间获得一致的结果。

所以我有一个 Linux 机器,紧挨着一个 Windows 机器,我想要 Linux 机器上的进程在 Windows 机器上执行命令并捕获结果(同步)。

我最初的想法是在 Windows 机器上编写一个 Web 服务,但这意味着除了遗留应用程序之外,还要在 Windows 机器上运行一个 Web 服务器。

然后我认为使用 Twisted.Conch 可能允许我通过网络执行命令而无需运行 Web 服务器的额外开销,但我假设运行Windows 机器上的 ssh 服务器。

除了 Web 服务或 ssh 之外,我还可以使用 Python 在不同的机器上启动同步进程的替代方法是什么,或者 Web 服务或 ssh 是最好的方法吗?另外,如果 Web 服务或 ssh 是最好的追求途径,我应该考虑使用 Twisted 吗?

最佳答案

我最终选择了 SSH + Twisted。在 Windows 机器上,我将 freeSSHd 设置为 Windows 服务。在试图让 paramiko 工作并遇到大量让我的公钥/私钥工作的问题之后,我决定尝试 Twisted,只花了几分钟就让它工作了。因此,我根据 Twisted 文档编写/窃取了它,以完成我在 Linux 的 SSH 客户端方面所需的功能。

from twisted.conch.ssh import transport
from twisted.internet import defer
from twisted.conch.ssh import keys, userauth
from twisted.conch.ssh import connection
from twisted.conch.ssh import channel, common
from twisted.internet import protocol, reactor

class ClientTransport(transport.SSHClientTransport):
def verifyHostKey(self, pubKey, fingerprint):
return defer.succeed(1)
def connectionSecure(self):
self.requestService(ClientUserAuth('USERHERE', ClientConnection()))

class ClientUserAuth(userauth.SSHUserAuthClient):
def getPassword(self, prompt=None):
return
def getPublicKey(self):
return keys.Key.fromString(data=publicKey)
def getPrivateKey(self):
return defer.succeed(keys.Key.fromString(data=privateKey))

class ClientConnection(connection.SSHConnection):
def serviceStarted(self):
self.openChannel(CatChannel(conn=self))

class CatChannel(channel.SSHChannel):
name = 'session'
def channelOpen(self, data):
data = 'abcdefghijklmnopqrstuvwxyz' * 300
self.return_data = ''
self.conn.sendRequest(self, 'exec', common.NS('C:\helloworld %-10000s' % data), wantReply=True)
def dataReceived(self, data):
self.return_data += data
def closed(self):
print "got %d bytes of data back from Windows" % len(self.return_data)
print self.return_data
self.loseConnection()
reactor.stop()

if __name__ == "__main__":
factory = protocol.ClientFactory()
factory.protocol = ClientTransport
reactor.connectTCP('123.123.123.123', 22, factory)
reactor.run()

效果很好!

关于python执行远程程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3237558/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com