
Ich habe ein Dockerized Jupyter Notebook, das immer auf einem Linux-Host läuft (auf dem ich SSH-Zugriff habe).
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)"
Derzeit muss ich mich zuerst per SSH beim Host anmelden und dann so etwas wie docker exec -it <container-name> bash
eine Bash-Shell innerhalb des Docker-Containers starten.
Ich habe mich gefragt, ob es eine Möglichkeit gibt, den anfänglichen SSH-Befehl per Proxy in den Container zu leiten, ähnlich wie ProxyCommand dies tut, um indirekt eine Verbindung zu einem zweiten Host herzustellen.
Antwort1
Ich habe eine Lösung gefunden, die meinen Anforderungen zu entsprechen scheint.
Fügen Sie dies oben in ~/.bashrc hinzu
# 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
Richten Sie nun auf dem Client eine SSH-Konfiguration wie folgt ein:
Host vm1
User my_user
HostName my_host
Host vm1-sandbox
User my_user
HostName my_host
RemoteCommand export SANDBOX=1; bash
RequestTTY force
Ich habe auch getestet, ob es in Kombination mit JumpHost wie erwartet funktioniert:
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