[python] ssh klient pro python

"Ing. Vladislav Ludík" vlada na ludik.cz
Neděle Srpen 12 11:51:15 CEST 2012


Zdravím všechny,

narazil jsem na problém, který se týká nespolehlivého ssh klienta z 
modulu paramiko.

Když pomocí něj čtu data například z některých verzí Mikrotiku,
například MikroTik RouterOS 5.17, stane se občas, že nedostanu kompletní 
data.
Někdy načte vše, někdy jen něco. Jak kdy.
Pokud se připojím přes PuTTy, je přenos vždy spolehlivý.
Můj modul, který pak používám v mých programech je v příloze.
Neví někdo kde bych měl hledat problém, popřípadě o spolehlivějším 
klientovi ?

Děkuji V.L.
------------- další část ---------------
"""Modul pro zadavani prikazu pres ssh"""
 
import paramiko
import cmd
import string

class RunCommand(cmd.Cmd):
	""" Jednoduchy shell pro zadavani prikazu na adresu host """

	prompt = 'ssh > '

	def __init__(self):
		cmd.Cmd.__init__(self)
		self.hosts = []
		self.connections = []

	def do_add_host(self, args):
		"""add_host <host,user,password,port>
		Prida adresu host do seznamu """
		if args:
			self.hosts.append(args.split(','))
		else:
			print "pouziti: host <hostip,user,password,port>"

	def do_connect(self, args):
		""" Pripoji se ke vsem adresam host ze seznamu """
		for host in self.hosts:
			ipcko, user, pswd, port = host
			user = string.strip(user)
			pswd = string.strip(pswd)
			port = int(string.strip(port))

			client = paramiko.SSHClient()
			client.set_missing_host_key_policy(
				paramiko.AutoAddPolicy())
			client.connect(ipcko,
				username=user,
				password=pswd,
				port=port)
			self.connections.append(client)

	def do_run(self, command):
		"""run <command>
		Provede tento prikaz pro vsechny pripojene adresy ze seznamu """
		if command:
			for host, conn in zip(self.hosts, self.connections):
				stdin, stdout, stderr = conn.exec_command(command)
				out = stdout.read()
				err = stderr.read()
				stdout.close()
				stderr.close()
				return out, err
		else:
			print "pouziti: run <command>"

	def do_close(self, args):
		for conn in self.connections:
			conn.close()
------------- další část ---------------
#!/usr/bin/python
# -*- coding: utf-8 -*-

from ssh import *

def doSSH(host, cmd, user=_user, pswd=_pswd, port=_port):
    'Provedeni prikazu SSH'
    
    con = ['%s,%s,%s,%s' % (host, user, pswd, port)]
    ssh = RunCommand()
    ssh.do_add_host(con[0])
    ssh.do_connect(con)
    stdout, stderr = ssh.do_run(cmd)
    ssh.do_close(con)
    
    return stdout, stderr
            
# atd.....


Další informace o konferenci Python