You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

33 lines
1.4 KiB

7 years ago
  1. #!/usr/bin/python
  2. import subprocess
  3. import argparse
  4. import configparser
  5. import os
  6. import shlex
  7. HOME = os.path.expandvars('$HOME')
  8. cp = configparser.ConfigParser(interpolation=configparser.ExtendedInterpolation())
  9. cp.read('{HOME}/.ssh/config/hostnames.ini'.format(HOME=HOME))
  10. if __name__ == "__main__":
  11. parser = argparse.ArgumentParser()
  12. group = parser.add_mutually_exclusive_group(required=True)
  13. group.add_argument('-o','--wan',action = 'store_true')
  14. group.add_argument('-l','--lan',action = 'store_true')
  15. parser.add_argument('-p','--pre-script', help= 'script to run before connecting(script must be in config dir)')
  16. parser.add_argument('--ssh-opt',help='pass options to ssh command, use "+" instead of "-"')
  17. parser.add_argument('name',help='name of config file to use (sans .cfg)')
  18. parser.add_argument('arg',nargs = '*',help = 'command to be run')
  19. args = parser.parse_args()
  20. try:
  21. if args.pre_script:
  22. pre = '{HOME}/.ssh/config/{}'.format(args.pre_script,HOME=HOME)
  23. subprocess.check_call(pre)
  24. if args.wan:
  25. host = cp['wan'][args.name]
  26. elif args.lan:
  27. host = cp['lan'][args.name]
  28. cmd = ['ssh','-F','{HOME}/.ssh/config/{}.cfg'.format(args.name,HOME=HOME)]
  29. if args.ssh_opt:
  30. cmd += shlex.split(args.ssh_opt.replace('+','-'))
  31. cmd += [host] + args.arg
  32. subprocess.call(cmd)
  33. except KeyboardInterrupt:
  34. pass