2014-01-17 3 views
1

Я нахожусь в маринаде, написав скрипт, который может использовать SSH на устройстве, запустить команду и проанализировать эти данные в файл. Я написал это с помощью Pyparsing и Exscript, тогда я узнал, что устройство, на котором я буду использовать это, использует Python 2.4.4 и Debian 4.1.1, поэтому модули не будут работать над этим. Теперь я вернулся к чертежной доске, пытаясь выяснить, как это сделать: NO модулей. У кого-нибудь есть ссылка или укажите мне в правильном направлении? Заранее спасибо.Использование Python для ssh без модулей

Вот мой код:

from Exscript.util.interact import read_login 
from Exscript.protocols import SSH2 
import uuid 
from pyparsing import * 
import re 
import yaml 

account = read_login()    
conn = SSH2()      
conn.connect('172.0.0.1')  
conn.login(account)   

conn.execute('foobar') 
data = conn.response 
conn.send('exit\r')    
conn.close() 

###### PARSER ###### 

date_regex = re.compile(r'\d\d-\d\d-\d\d') 
time_regex = re.compile(r'\d\d:\d\d:\d\d') 
pairs = [{'category': 'General Information', 
      'kv': Group(Word(alphanums) + Word(alphanums))}, 
     {'category': 'Last Reset:', 
      'kv': Group(Word(alphas, max=1) + Word(alphas)) + Literal(':').suppress() 
       + Group(Regex(date_regex) + Regex(time_regex) 
       + Optional(SkipTo(LineEnd()))) 
      } 
     ] 
# build list of categories with associated parsing rules 
categories = [Word("# ").suppress() + x['category'] 
       + OneOrMore(Group(x['kv'])) 
       for x in pairs] 
# account for thing you don't have specific rules for 
categories.append(Word("#").suppress() + Optional(SkipTo(LineEnd())) + 
        Group(OneOrMore(Combine(Word(alphanums) + SkipTo(LineEnd())))) 
       ) 
# OR all the categories together 
categories_ored = categories[0] 
for c in categories[1:]: 
    categories_ored |= c 
configDef = OneOrMore(categories_ored) 
suppress_tokens = ["show all", "SSH>", "Active System Configuration"] 
suppresses = [Literal(x).suppress() for x in suppress_tokens] 
for s in suppresses: 
    configDef.ignore(s) 

result = configDef.parseString(data) 
for e in result: 
    print(e) 
with open('/Users/MyMac/development/data.yml', 'w') as outfile: 
     outfile.write(yaml.dump(e)) 

UPDATE

Я следовал советам ниже и теперь установили Pexpect и нашел старую версию Python-Pyparsing, что я также установлен. Поэтому я снова нахожусь на пути к тому, чтобы мои скрипты работали с модулями. Благодаря!

+0

Как насчет использования 'subprocess' для общения с системой' ssh'? 'pexpect' выглядит как ранний чистый модуль Python, который требует только' pty'. – hpaulj

+0

http://www.lag.net/paramiko/legacy.html paramiko - еще одна ранняя чистая библиотека SSH Python. – hpaulj

+0

@hpaulj Я искал использование 'subprocess', но имел проблемы с этим подключением и запуском команды. Я посмотрел на «paramiko», прежде чем написал сценарий выше, но имел некоторые проблемы, поэтому я пошел с «Exscript». Я посмотрю на ранние выпуски 'paramiko' и посмотрим, сработает ли это. Другое дело, что 'debian' настолько старый и не позволяет мне устанавливать модули очень легко. – tjoenz

ответ

1

Похоже, это уже решено, но ...

Пока ваш SSH настроен для этого хоста (или хост не требует, чтобы войти в), вы должны быть в состоянии сделать следующие.

import os 

""" This will execute foobar on the remote host 
and store the command output to a text file 
on your machine.""" 
os.system("ssh 172.0.0.1 foobar > ~/data.txt") 

""" Commence processing """ 
data = open("data.txt", mode='r') 
# and so on and so on 

Вы также можете использовать subprocess библиотеки, но os.system для этих типов задач являются простейшими ИМО.

Смежные вопросы