我正在尝试创建一个在Python中使用SSH登录远程计算机的脚本。然后我的脚本应该从该机器调用某个rest API,然后将响应返回给原始客户端。
我无法使用子流程,因此不可思议。我尝试使用Paramiko和Fabric,但最终得到了非常复杂的代码段,其中包含许多必填字段。我已经在我和机器之间的所有步骤中设置了我的公钥,只需输入即可轻松浏览所有中间机器。
" SSH xxx" - 在终端
所以我正在寻找的东西允许我做这个简单的请求,而不必重新指定已经设置的所有内容。有没有人做过类似的事情?
答案 0 :(得分:0)
是的,我做过类似的事情。
这是一个工作示例程序,它在Python中使用SSH登录到远程计算机,然后从该计算机调用某个rest API,然后将响应返回给原始客户端。
import paramiko
from xml.etree import ElementTree as ET
import sys
my_server = sys.argv[1]
client = paramiko.SSHClient()
client.load_system_host_keys()
client.connect(my_server)
stdin, stdout, stderr = client.exec_command(
'curl http://www.thomas-bayer.com/sqlrest/CUSTOMER/3/')
xml = stdout.read()
xml = ET.fromstring(xml)
assert xml.find('.//FIRSTNAME').text == 'Michael'
如果你可以使用subprocess
,这是另一个这样的程序:
import subprocess
import sys
from xml.etree import ElementTree as ET
my_server = sys.argv[1]
xml = subprocess.check_output([
'ssh',
my_server,
'curl -s http://www.thomas-bayer.com/sqlrest/CUSTOMER/3/'])
xml = ET.fromstring(xml)
assert xml.find('FIRSTNAME').text == 'Michael'