SSH 연결 시 인증된 SSH 사용자를 이미 실행 중인 Docker 컨테이너로 프록시하는 방법이 있습니까?

SSH 연결 시 인증된 SSH 사용자를 이미 실행 중인 Docker 컨테이너로 프록시하는 방법이 있습니까?

저는 Dockerized Jupyter Notebook을 항상 Linux 호스트(Ssh 액세스 권한이 있는 호스트)에서 실행하고 있습니다.

docker run -d \
    --hostname="$(logname)-sandbox" \
    -e NB_UID="$(id -u $(logname))" \
    -e NB_GID="$(id -g $(logname))" \
    -e GRANT_SUDO=1 \
    -e NB_USER="$(id -un $(logname))" \
    -e NB_GROUP="$(id -gn $(logname))" \
    --user=root \
    --restart=always \
    --name="$(logname)-sandbox" \
    -v "${HOME}":"/home/$(logname)" \
    -p 8010:8888 \
    jupyter/base-notebook:latest \
    start-notebook.sh --notebook-dir="/home/$(logname)"

현재는 먼저 호스트에 SSH로 접속해야 하며, 그런 다음 docker exec -it <container-name> bashDocker 컨테이너 내에서 bash 셸을 시작하는 것과 같은 작업을 수행해야 합니다.

ProxyCommand가 두 번째 호스트에 간접적으로 연결하는 것과 거의 같은 방식으로 초기 ssh 명령을 컨테이너에 프록시하는 방법이 있는지 궁금합니다.

답변1

내 요구에 맞는 솔루션을 찾았습니다.

~/.bashrc 상단에 이것을 추가하세요.

# Enter Container if SANDBOX=1, else continue as normal
if [[ "${SANDBOX}" -eq "1" ]]; then
    # Only allocate tty if one is detected, see: https://stackoverflow.com/questions/911168
    if [[ -t 0 ]]; then DOCKER_RUN_OPTIONS+=(-i); fi
    if [[ -t 1 ]]; then DOCKER_RUN_OPTIONS+=(-t); fi
    exec docker exec "${DOCKER_RUN_OPTIONS[@]}" "$(logname)-sandbox" bash "$@"
fi

이제 다음과 같이 클라이언트에서 SSH 구성을 설정하십시오.

Host vm1
    User my_user
    HostName my_host
Host vm1-sandbox
    User my_user
    HostName my_host
    RemoteCommand export SANDBOX=1; bash
    RequestTTY force

또한 JumpHost와 함께 사용하면 예상대로 작동하는지 테스트했습니다.

Host vm2_jump
    User jump_user
    HostName jump_host
Host vm2
    User my_user
    HostName my_host
    ProxyJump vm2_jump
Host vm2-sandbox
    User my_user
    HostName my_host
    ProxyJump vm2_jump
    RemoteCommand export SANDBOX=1; bash
    RequestTTY force

관련 정보