Files
ForbiddenStarsApp/deploy/tunnel/tunnel.sh
T

35 lines
1.6 KiB
Bash

#!/bin/sh
# SSH reverse-туннель из контейнера на VPS:
# VPS:127.0.0.1:$VPS_TUNNEL_PORT -> $UPSTREAM (сервис app по сети compose)
# Ключ монтируется снаружи в /key/id_tunnel (см. docker-compose*.yml).
set -eu
: "${VPS_TUNNEL_HOST:?VPS_TUNNEL_HOST is required}"
VPS_TUNNEL_USER="${VPS_TUNNEL_USER:-tunnel}"
: "${VPS_TUNNEL_PORT:?VPS_TUNNEL_PORT is required}"
UPSTREAM="${UPSTREAM:-app:8000}"
# Ключ должен быть смонтирован файлом. Если тут пусто/папка — Docker создал каталог,
# потому что файла deploy/tunnel/id_tunnel на хосте нет.
if [ ! -f /key/id_tunnel ]; then
echo "[tunnel] ERROR: /key/id_tunnel is not a regular file."
echo "[tunnel] Put your private key at deploy/tunnel/id_tunnel on the host (its pubkey must be in authorized_keys of tunnel@VPS)."
exit 1
fi
# Копируем ключ и выставляем строгие права (с хоста права могут не годиться, особенно с Windows).
mkdir -p /root/.ssh
cp /key/id_tunnel /root/.ssh/id_tunnel
chmod 600 /root/.ssh/id_tunnel
echo "[tunnel] -R ${VPS_TUNNEL_PORT}:${UPSTREAM} -> ${VPS_TUNNEL_USER}@${VPS_TUNNEL_HOST}"
exec ssh -N \
-o BatchMode=yes \
-o ServerAliveInterval=30 -o ServerAliveCountMax=3 \
-o ExitOnForwardFailure=yes \
-o StrictHostKeyChecking=accept-new \
-o UserKnownHostsFile=/root/.ssh/known_hosts \
-i /root/.ssh/id_tunnel \
-R "${VPS_TUNNEL_PORT}:${UPSTREAM}" \
"${VPS_TUNNEL_USER}@${VPS_TUNNEL_HOST}"