Nov-20-2018, 04:46 PM
Hi All!,
Following is my program, It asks for input, input is looked up in mysqldatabase, if host is found it will do a ssh, I'm new to python, I'm not sure where to begin to make the program take multiple comma separated input like like "172.31.200.1,172.31.200.2" it should execute the program query for each IP, How can this be achieved?
I tried split, it just passes it directly to select query which doesn't help and also throws exception. Help appreciated!
Following is my program, It asks for input, input is looked up in mysqldatabase, if host is found it will do a ssh, I'm new to python, I'm not sure where to begin to make the program take multiple comma separated input like like "172.31.200.1,172.31.200.2" it should execute the program query for each IP, How can this be achieved?
I tried split, it just passes it directly to select query which doesn't help and also throws exception. Help appreciated!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
#! python3 import paramiko import os,sys,time,xlwt sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from conf import ssh_conf as conf_file, MySQL_Connector as mysql #from conf import MySQL_Connector as mysql import socket class Ssh_Util: def __init__( self ): self .ssh_output = None self .ssh_error = None self .client = None self .host = input ( "Hostname: " ) ## self.username = mysql.username ## self.password = mysql.password self .timeout = float (conf_file.TIMEOUT) self .commands = conf_file.COMMANDS self .pkey = conf_file.PKEY self .port = conf_file.PORT self .wb = xlwt.Workbook() self .ws = self .wb.add_sheet( "Host1" ) try : mycursor = mysql.db.cursor() mycursor.execute( "select username,password, host from hosts where host = '%s';" % self .host) myresult = mycursor.fetchone() self .host = myresult[ 2 ] self .username = myresult[ 0 ] self .password = myresult[ 1 ] mycursor.close() except TypeError as e: print ( "Host not found!" ) sys.exit() def connect( self ): #"Login to the remote server" try : #Paramiko.SSHClient can be used to make connections to the remote server and transfer files print ( "Establishing ssh connection" ) self .client = paramiko.SSHClient() #Parsing an instance of the AutoAddPolicy to set_missing_host_key_policy() changes it to allow any host. self .client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #Connect to the server if ( self .password = = ''): self .pkey = paramiko.RSAKey.from_private_key_file( self .pkey) self .client.connect(hostname = self .host, port = self .port, username = self .username,pkey = self .pkey ,timeout = self .timeout, allow_agent = False , look_for_keys = False ) print ( "Connected to the server" , self .host) else : self .client.connect(hostname = self .host, port = self .port,username = self .username,password = self .password,timeout = self .timeout, allow_agent = False , look_for_keys = False ) print ( "Connected to the server" ), self .host except paramiko.AuthenticationException: print ( "Authentication failed, please verify your credentials" ) result_flag = False except paramiko.SSHException as sshException: print ( "Could not establish SSH connection: %s" % sshException) result_flag = False except socket.timeout as e: print ( "Connection timed out" ) result_flag = False except Exception as e: print ( '\nException in connecting to the server' ) print ( 'PYTHON SAYS:' ,e) result_flag = False self .client.close() else : result_flag = True return result_flag def execute_command( self ,commands): """Execute a command on the remote host.Return a tuple containing an integer status and a two strings, the first containing stdout and the second containing stderr from the command.""" self .ssh_output = None result_flag = True try : if self .connect(): for command in commands: print ( "Executing command --> {}" . format (command)) stdin, stdout, stderr = self .client.exec_command(command,timeout = 10 ) #self.ssh_output = stdout.read() self .ssh_output = stdout.readlines() self .ssh_error = stderr.read() if self .ssh_error: print ( "Problem occurred while running command:" + command + " The error is " + self .ssh_error) result_flag = False else : print ( "Command execution completed successfully" ) print (''.join( self .ssh_output)) self .ws.write( 0 , 0 ,( self .ssh_output)) self .wb.save( "writing.xls" ) self .client.close() else : print ( "Could not establish SSH connection" ) result_flag = False except socket.timeout as e: print ( "Command timed out." , command) self .client.close() result_flag = False except paramiko.SSHException: print ( "Failed to execute the command!" ,command) self .client.close() result_flag = False return result_flag if __name__ = = '__main__' : print ( "\nStart of %s" % __file__) #Initialize the ssh object ssh_obj = Ssh_Util() #Sample code to execute commands if ssh_obj.execute_command(ssh_obj.commands) is True : print ( "Commands executed successfully\n" ) else : print ( "Unable to execute the commands" ) """ #Sample code to upload a file to the server if ssh_obj.upload_file(ssh_obj.uploadlocalfilepath,ssh_obj.uploadremotefilepath) is True: print "File uploaded successfully", ssh_obj.uploadremotefilepath else: print "Failed to upload the file" #Sample code to download a file from the server if ssh_obj.download_file(ssh_obj.downloadremotefilepath,ssh_obj.downloadlocalfilepath) is True: print "File downloaded successfully", ssh_obj.downloadlocalfilepath else: print "Failed to download the file" """ |