#!/usr/bin/python import subprocess import argparse import configparser import os import shlex HOME = os.path.expandvars('$HOME') cp = configparser.ConfigParser(interpolation=configparser.ExtendedInterpolation()) cp.read('{HOME}/.ssh/config/hostnames.ini'.format(HOME=HOME)) if __name__ == "__main__": parser = argparse.ArgumentParser() group = parser.add_mutually_exclusive_group(required=True) group.add_argument('-o','--wan',action = 'store_true') group.add_argument('-l','--lan',action = 'store_true') parser.add_argument('-p','--pre-script', help= 'script to run before connecting(script must be in config dir)') parser.add_argument('--ssh-opt',help='pass options to ssh command, use "+" instead of "-"') parser.add_argument('name',help='name of config file to use (sans .cfg)') parser.add_argument('arg',nargs = '*',help = 'command to be run') args = parser.parse_args() try: if args.pre_script: pre = '{HOME}/.ssh/config/{}'.format(args.pre_script,HOME=HOME) subprocess.check_call(pre) if args.wan: host = cp['wan'][args.name] elif args.lan: host = cp['lan'][args.name] cmd = ['ssh','-F','{HOME}/.ssh/config/{}.cfg'.format(args.name,HOME=HOME)] if args.ssh_opt: cmd += shlex.split(args.ssh_opt.replace('+','-')) cmd += [host] + args.arg subprocess.call(cmd) except KeyboardInterrupt: pass