¿Hay alguna manera de enviar un usuario ssh autenticado a un contenedor acoplable que ya se está ejecutando tras una conexión ssh?

¿Hay alguna manera de enviar un usuario ssh autenticado a un contenedor acoplable que ya se está ejecutando tras una conexión ssh?

Tengo un Jupyter Notebook Dockerizado que siempre se ejecuta en un host Linux (donde tengo acceso 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)"

Actualmente, primero necesito ingresar mediante ssh al host y luego hago algo como docker exec -it <container-name> bashiniciar un shell bash dentro del contenedor Docker.

Me preguntaba si había alguna forma de enviar el comando ssh inicial al contenedor, de la misma manera que lo hace ProxyCommand para conectarse indirectamente a un segundo host.

Respuesta1

Encontré una solución que parece funcionar para mis necesidades.

Agregue esto al principio de ~/.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

Ahora configure una configuración ssh en el cliente como esta:

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

También probé que funciona como se esperaba en combinación con 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

información relacionada