
저는 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> bash
Docker 컨테이너 내에서 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