SHARE
TWEET

ssh_test_2

DeaD_EyE Jul 26th, 2019 42 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import sys
  2. import getpass
  3. from pathlib import Path
  4. from argparse import ArgumentParser
  5. from paramiko.client import (
  6.     SSHClient,
  7.     MissingHostKeyPolicy,
  8. )
  9. from paramiko.ssh_exception import AuthenticationException
  10.  
  11.  
  12. def ask_password():
  13.     return getpass.getpass('Please enter password: ')
  14.  
  15.  
  16. def connect(
  17.     hostname,
  18.     username=None,
  19.     password=None,
  20.     port=22,
  21.     key=False,
  22.     **kwargs,
  23.     ):    
  24.     client = SSHClient()
  25.     client.set_missing_host_key_policy(MissingHostKeyPolicy)
  26.     if key:
  27.         # use only private keys for login,
  28.         # if it was explicit requested
  29.         client.load_system_host_keys()
  30.     client.connect(hostname, port=port, username=username, password=password)
  31.     return client
  32.  
  33.  
  34. def command_executor(client, script):
  35.     with script.open() as fd:
  36.         for line in fd:
  37.             print(f'Executing command: {line.rstrip()}')
  38.             stdin, stdout, stderr = client.exec_command(line)
  39.             stdout, stderr = stdout.read().decode(), stderr.read().decode()
  40.             print(stdout, end='')
  41.  
  42.  
  43. def main(**kwargs):
  44.     if not kwargs['key']:
  45.         kwargs['password'] = ask_password()
  46.     client = connect(**kwargs)
  47.     command_executor(client, kwargs['script'])
  48.     client.close()
  49.  
  50.  
  51. if __name__ == '__main__':
  52.     parser = ArgumentParser()
  53.     parser.add_argument('hostname', help='Hostname of the host you want to connect')
  54.     parser.add_argument('username', type=str, help='User for login')
  55.     parser.add_argument('script', type=Path, help='Path to script file, which should executed')
  56.     parser.add_argument('--port', type=int, default=22, help='Port of SSH service')
  57.     parser.add_argument('--key', action='store_true', help='Use only private key for login')
  58.     args = parser.parse_args()
  59.     if not args.script.exists():
  60.         print(f'The script {args.script} does not exist')
  61.         sys.exit(1)
  62.     try:
  63.         main(**vars(args))
  64.     except AuthenticationException:
  65.         print('Problem with authentication', file=sys.stderr)
  66.         sys.exit(2)
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top