diff --git a/patator.py b/patator.py index 02e653e..b38b57e 100755 --- a/patator.py +++ b/patator.py @@ -2593,6 +2593,7 @@ class SSH_login(TCP_Cache): ('password', 'passwords to test'), ('auth_type', 'type of password authentication to use [password|keyboard-interactive|auto]'), ('keyfile', 'file with RSA, DSA or ECDSA private key to test'), + ('command', 'Command to execute'), ) available_options += TCP_Cache.available_options @@ -2604,8 +2605,8 @@ class SSH_login(TCP_Cache): return TCP_Connection(fp, fp.remote_version) - def execute(self, host, port='22', user=None, password=None, auth_type='password', keyfile=None, persistent='1'): - + def execute(self, host, port='22', user=None, password=None, auth_type='password', keyfile=None, persistent='1',command=None): + response_ssh="" try: with Timing() as timing: fp, banner = self.bind(host, port, user) @@ -2632,12 +2633,20 @@ class SSH_login(TCP_Cache): else: raise ValueError('Incorrect auth_type %r' % auth_type) - logger.debug('No error') code, mesg = '0', banner + + if fp.is_authenticated() and command is not None: + if response_ssh=="": + channel = fp.open_session() + channel.exec_command(command) + response_ssh = channel.recv(1024) + response_ssh=" "+response_ssh.decode("utf-8").strip() + self.reset() + except paramiko.AuthenticationException as e: logger.debug('AuthenticationException: %s' % e) code, mesg = '1', str(e) @@ -2645,8 +2654,8 @@ class SSH_login(TCP_Cache): if persistent == '0': self.reset() - return self.Response(code, mesg, timing) - + + return self.Response(code, mesg+response_ssh , timing) # }}} # Telnet {{{