#!/usr/bin/env python # # pylibssh2 - python bindings for libssh2 library # # Copyright (C) 2010 Wallix Inc. # # This library is free software; you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by the # Free Software Foundation; either version 2.1 of the License, or (at your # option) any later version. # # This library is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS # FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more # details. # # You should have received a copy of the GNU Lesser General Public License # along with this library; if not, write to the Free Software Foundation, Inc., # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # import socket import sys import libssh2 DEBUG = False usage = """Do a SSH remote command with username@hostname Usage: sshcmd.py """ def my_print(args): if DEBUG: print(args) class SSHRemoteClient(object): def __init__(self, hostname, username, publickey, privatekey, passphrase='', port=22): self.username = username self.hostname = hostname self.publickey = publickey self.privatekey = privatekey self.passphrase = passphrase self.port = port self.session = libssh2.Session() self.session.set_banner() try: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((self.hostname, self.port)) self.session.startup(sock) my_print(self.session.last_error()) self.session.userauth_publickey_fromfile( self.username, self.publickey, self.privatekey, '' ) my_print(self.session.last_error()) except Exception, e: print str(e) raise Exception, self.session.last_error() self.channel = self.session.open_session() my_print(self.session.last_error()) def execute(self, command="uname -a"): datas = [] buffer = 4096 rc = self.channel.execute(command) my_print(rc) while True: data = self.channel.read(buffer) if data == '' or data is None: break my_print(type(data)) print data.strip() self.channel.close() def __del__(self): self.session.close() my_print(self.session.last_error()) if __name__ == '__main__': try: if len(sys.argv) == 1: print usage sys.exit(1) src = SSHRemoteClient( sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4], '') src.execute(sys.argv[5]) except Exception, e: print str(e) except KeyboardInterrupt, e: sys.exit(1)