Advertisement
Guest User

Untitled

a guest
Oct 20th, 2019
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.23 KB | None | 0 0
  1. import argparse
  2. import getpass
  3. import os
  4. import paramiko
  5.  
  6.  
  7. def parse_encoding(data):
  8. try:
  9. enc = data.strip().decode('ascii')
  10. except UnicodeDecodeError:
  11. return
  12.  
  13. try:
  14. u'unicode'.encode(enc)
  15. except LookupError:
  16. return
  17.  
  18. return enc
  19.  
  20.  
  21. def ssh_connect(hostname, **kwargs):
  22. ssh = paramiko.SSHClient()
  23. ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy)
  24. ssh.connect(hostname, **kwargs)
  25. return ssh
  26.  
  27.  
  28. def execute_command(ssh, command, **kwargs):
  29. _, stdout, _ = ssh.exec_command(command, **kwargs)
  30. return stdout.read()
  31.  
  32.  
  33. def get_encoding(ssh):
  34. commands = [
  35. '$SHELL -ilc "locale charmap"',
  36. '$SHELL -ic "locale charmap"',
  37. ]
  38.  
  39. for command in commands:
  40. result = execute_command(ssh, command, get_pty=True)
  41. # print('result:', result)
  42. enc = parse_encoding(result)
  43. if enc:
  44. return enc
  45.  
  46.  
  47. def get_password(args):
  48. if args.identity:
  49. prompt = "{}'s passphrase: ".format(args.identity)
  50. else:
  51. prompt = "{user}@{host}:{port}'s password: ".format(
  52. user=args.user, host=args.host, port=args.port
  53. )
  54. passwd = getpass.getpass(prompt).strip()
  55. return passwd if passwd else None
  56.  
  57.  
  58. def check_identity_file(filename):
  59. if filename:
  60. if not os.path.isfile(filename):
  61. raise ValueError('Identity file {!r} not found'.format(filename))
  62.  
  63.  
  64. def parse_args():
  65. parser = argparse.ArgumentParser()
  66. parser.add_argument('host', type=str, help='ssh hostname')
  67. parser.add_argument('-u', '--user', type=str, default=os.getenv('USER'),
  68. help='ssh username')
  69. parser.add_argument('-p', '--port', type=int, default=22,
  70. help='ssh port number')
  71. parser.add_argument('-i', '--identity', default=None,
  72. help='ssh identity file path')
  73. args = parser.parse_args()
  74. return args
  75.  
  76.  
  77. def main():
  78. args = parse_args()
  79. check_identity_file(args.identity)
  80. pwd = get_password(args)
  81. ssh = ssh_connect(args.host, port=args.port, username=args.user,
  82. password=pwd, key_filename=args.identity, timeout=3)
  83. print(get_encoding(ssh))
  84. ssh.close()
  85.  
  86.  
  87. if __name__ == '__main__':
  88. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement