Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import argparse
- import getpass
- import os
- import paramiko
- def parse_encoding(data):
- try:
- enc = data.strip().decode('ascii')
- except UnicodeDecodeError:
- return
- try:
- u'unicode'.encode(enc)
- except LookupError:
- return
- return enc
- def ssh_connect(hostname, **kwargs):
- ssh = paramiko.SSHClient()
- ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy)
- ssh.connect(hostname, **kwargs)
- return ssh
- def execute_command(ssh, command, **kwargs):
- _, stdout, _ = ssh.exec_command(command, **kwargs)
- return stdout.read()
- def get_encoding(ssh):
- commands = [
- '$SHELL -ilc "locale charmap"',
- '$SHELL -ic "locale charmap"',
- ]
- for command in commands:
- result = execute_command(ssh, command, get_pty=True)
- # print('result:', result)
- enc = parse_encoding(result)
- if enc:
- return enc
- def get_password(args):
- if args.identity:
- prompt = "{}'s passphrase: ".format(args.identity)
- else:
- prompt = "{user}@{host}:{port}'s password: ".format(
- user=args.user, host=args.host, port=args.port
- )
- passwd = getpass.getpass(prompt).strip()
- return passwd if passwd else None
- def check_identity_file(filename):
- if filename:
- if not os.path.isfile(filename):
- raise ValueError('Identity file {!r} not found'.format(filename))
- def parse_args():
- parser = argparse.ArgumentParser()
- parser.add_argument('host', type=str, help='ssh hostname')
- parser.add_argument('-u', '--user', type=str, default=os.getenv('USER'),
- help='ssh username')
- parser.add_argument('-p', '--port', type=int, default=22,
- help='ssh port number')
- parser.add_argument('-i', '--identity', default=None,
- help='ssh identity file path')
- args = parser.parse_args()
- return args
- def main():
- args = parse_args()
- check_identity_file(args.identity)
- pwd = get_password(args)
- ssh = ssh_connect(args.host, port=args.port, username=args.user,
- password=pwd, key_filename=args.identity, timeout=3)
- print(get_encoding(ssh))
- ssh.close()
- if __name__ == '__main__':
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement