コード例 #1
0
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
コード例 #2
0
ファイル: macos.py プロジェクト: zanaca/docker-dns
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
コード例 #3
0
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