2016-07-05 29 views
0

我想创建一个脚本,在Python中使用SSH来登录到远程计算机。然后,我的脚本应该从该机器调用某个剩余的API,然后将响应返回给原始客户机。通过与〜/ .ssh /配置文件Python的SSH

我不能使用子过程,所以这是可悲的问题。我尝试使用Paramiko和Fabric,但最终有很多必填字段的代码段非常复杂。我已经在我和机器之间的所有步骤中设置了公钥,并且只需键入即可轻松遍历所有中间设备。

“SSH XXX” - 在终端

所以,我正在寻找的东西,让我做这个简单的请求没有我不必重新指定一切的已经建立。有没有人做过类似的事情?

+0

为什么你不能使用子?你也可以使用ssh作为隧道,也许这就够了。 – syntonym

回答

0

是的,我做了类似的事情。

下面是一个工作示例程序,它使用Python中的SSH登录到远程机器,然后从该机器调用某个其余的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'