def __get_ssh_port(): port = False ports = docker.get_exposed_port(config.DOCKER_CONTAINER_NAME) if '22/tcp' in ports: port = int(ports['22/tcp'][0]['HostPort']) return port
def install(tld=config.TOP_LEVEL_DOMAIN): print('Generating known_hosts backup for user "root", if necessary') if not os.path.exists(f'{config.HOME_ROOT}/.ssh'): os.mkdir(f'{config.HOME_ROOT}/.ssh') os.chmod(f'{config.HOME_ROOT}/.ssh', 700) if os.path.exists(KNOWN_HOSTS_FILE): shutil.copy2(KNOWN_HOSTS_FILE, f'{config.HOME_ROOT}/.ssh/known_hosts_pre_docker-dns') time.sleep(3) port = False ports = docker.get_exposed_port(config.DOCKER_CONTAINER_NAME) if '22/tcp' in ports: port = int(ports['22/tcp'][0]['HostPort']) if not port: raise('Problem fetching ssh port') os.system( f'ssh-keyscan -H -t ecdsa-sha2-nistp256 -p {port} 127.0.0.1 2> /dev/null >> {KNOWN_HOSTS_FILE}') if not os.path.exists(APP_DESTINATION): uid = os.getuid() gid = os.getgid() if 'SUDO_UID' in os.environ: uid = int(os.environ.get('SUDO_UID')) gid = int(os.environ.get('SUDO_GID')) shutil.copytree('src/templates/dockerdns-tunnel_app', APP_DESTINATION) util.change_owner_recursive(APP_DESTINATION, uid, gid) workflow = open(f'{APP_DESTINATION}/Contents/document.wflow', 'r').read() workflow = workflow.replace( '[PATH]', config.BASE_PATH) open(f'{APP_DESTINATION}/Contents/document.wflow', 'w').write(workflow) return True
def connect(verbose=False): if not util.is_tunnel_needed(): print("You do not need to create a tunnel") return 0 if not util.is_super_user(): print("You need to have root privileges to run this script.\nPlease try again, this time using 'sudo'. Exiting.") return 1 docker_container_name = config.DOCKER_CONTAINER_NAME # alias network ip if util.on_macos: os.system( f'ifconfig {network.LOOPBACK_NETWORK_NAME} alias {docker.NETWORK_GATEWAY}') # prepare tunnel port = False while not port: ports = docker.get_exposed_port(docker_container_name) if '22/tcp' in ports: port = ports['22/tcp'][0]['HostPort'] sys.argv = [shutil.which('sshuttle')] if verbose: sys.argv.append('-vv') sys.argv += ['--pidfile=/tmp/sshuttle.pid', '-r', f'[email protected]:{port}', docker.NETWORK_SUBNET] sshuttle_fake_caller() return 0