#!/usr/bin/env python3 import argparse import os import sys def main(): args = handle_args() cmd = build_cmd(args) # Run the command print(f"Running command: {cmd}") result = os.system(cmd) if result != 0: print("") print("Removing problematic SSH key and trying again..") remove_ssh_key_cmd = ( 'ssh-keygen -f "${HOME}/.ssh/known_hosts" -R "[localhost]:1535"' ) os.system(remove_ssh_key_cmd) print(f'Running command "{cmd}"') result = os.system(cmd) def handle_args(): help_string = ( "This script copies files to the Q7S as long as port forwarding is active.\n" ) help_string += ( "You can set up port forwarding with " '"ssh -L 1535:192.168.133.10:22 " -t /bin/bash' ) parser = argparse.ArgumentParser(description=help_string) # Optional arguments parser.add_argument( "-r", "--recursive", dest="recursive", default=False, action="store_true" ) parser.add_argument( "-t", "--target", help="Target destination. If files are copied to Q7S, will be /tmp by default. " "If files are copied back to host, will be current directory by default", default="", ) parser.add_argument("-P", "--port", help="Target port", default=1535) parser.add_argument( "-i", "--invert", default=False, action="store_true", help="Copy from Q7S to host instead. Always copies to current directory.", ) parser.add_argument( "-f", "--flatsat", default=False, action="store_true", help="Copy to flatsat instead" ) # Positional argument(s) parser.add_argument( "source", help="Source files to copy or target files to copy back to host" ) return parser.parse_args() def build_cmd(args): # Build run command cmd = "scp " if args.recursive: cmd += "-r " address = "" port_args = "" target = args.target if args.flatsat: address = "eive@flatsat.eive.absatvirt.lw" else: address = "root@localhost" port_args=f"-P {args.port}" if args.invert: if target == "": target = "." else: target = args.target else: if target == "": target = f"/tmp" else: target = args.target if args.invert: cmd += f"{port_args} {address}:{args.source} {target}" else: cmd += f"{port_args} {args.source} {address}:{target}" return cmd if __name__ == "__main__": main()