2016-07-05 5 views
0

私はPythonでSSHを使用してリモートマシンにログインするスクリプトを作成しようとしています。私のスクリプトは、そのマシンから特定の休止APIを呼び出すことになっていて、その応答を元のクライアントに返します。〜/ .ssh/configファイルを使用したSSHによるPython

私はサブプロセスを使用することができませんので、悲しいことです。私は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' 
関連する問題