Pour une installation rapide, exécutez :
docker run -d -e SSH_HOST=votre-serveur -e SSH_USER=utilisateur \
-v ~/.ssh/id_rsa:/tmp/id_rsa:ro ripleybooya/ssh-tunnel
Ce conteneur a été créé pour exposer en toute sécurité des services distants via des tunnels SSH.
Au lieu d'exposer des bases de données ou d'autres services sur Internet, ce conteneur permet de créer des tunnels SSH sécurisés dans un réseau Docker.
docker run
docker run -d --name ssh-tunnel \
-e SSH_HOST="votre-serveur.com" \
-e SSH_USER="votre-utilisateur" \
-e REMOTE_PORTS="127.0.0.1:5432 127.0.0.1:443" \
-e LOCAL_PORTS="15432 8443" \
-v /chemin/vers/id_rsa:/tmp/id_rsa:ro \
--network=my_docker_network \
ripleybooya/ssh-tunnel
📌 Explication :
SSH_HOST
: Le serveur distant où les tunnels SSH seront établis.SSH_USER
: L'utilisateur SSH sur le serveur distant.REMOTE_PORTS
: Ports distants à tunneliser (format : 127.0.0.1:PORT
).LOCAL_PORTS
: Ports accessibles dans le réseau Docker (correspondants à REMOTE_PORTS
).LOGROTATE_FREQUENCY
: Fréquence de Logrotate (défaut à daily
).LOGROTATE_ROTATE
: Nombre de rotation Logrotate à conserver (défaut à 7
).LOGROTATE_COMPRESS
: Compression Logrotate (défaut à compress
).-v /chemin/vers/id_rsa:/tmp/id_rsa:ro
: Monte votre clé SSH en toute sécurité (utilisation de /tmp/id_rsa
pour de meilleures permissions).docker-compose.yml
Pour un déploiement simplifier, utiliser Docker Compose:
version: '3.8'
services:
ssh-tunnel:
image: ripleybooya/ssh-tunnel
container_name: ssh-tunnel
restart: always
networks:
- internal
environment:
SSH_HOST: "your-server.com"
SSH_USER: "your-username"
REMOTE_PORTS: "127.0.0.1:5432 127.0.0.1:443"
LOCAL_PORTS: "15432 8443"
volumes:
- /path/to/id_rsa:/tmp/id_rsa:ro
networks:
internal:
driver: bridge
S'il faut que les ports soient accessible en dehors de Docker, utiliser network_mode: host
:
version: '3.8'
services:
ssh-tunnel:
image: ripleybooya/ssh-tunnel
container_name: ssh-tunnel
restart: always
network_mode: host # Uses the host network instead of a Docker network
environment:
SSH_HOST: "your-server.com"
SSH_USER: "your-username"
REMOTE_PORTS: "127.0.0.1:5432 127.0.0.1:443"
LOCAL_PORTS: "15432 8443"
volumes:
- /path/to/id_rsa:/tmp/id_rsa:ro
📌 Quel mode choisir ?
Cette version intègre Tailscale VPN pour une connexion distante sécurisée & expose les ports à votre Tailnet.
Pour utiliser la version Tailscale il faut ajouter le tag tailscale
comme ceci : ripleybooya/ssh-tunnel:tailscale
docker run
docker run -d --name ssh-tunnel-tailscale \
-e SSH_HOST="your-server.com" \
-e SSH_USER="your-username" \
-e REMOTE_PORTS="127.0.0.1:5432 127.0.0.1:443" \
-e LOCAL_PORTS="15432 8443" \
-e TAILSCALE_AUTH_KEY="your-tailscale-auth-key" \
-v /chemin/vers/id_rsa:/tmp/id_rsa:ro \
-v /chemin/vers/donnees/persistantes/tailscale:/var/lib/tailscale # Persistent Tailscale state, needed after initial key expiration
-p 15432:15432 # (Optional) Also expose port on local network.
-p 8443:8443 # (Optional) Also expose port on local network.
--cap-add=NET_ADMIN \
--device /dev/net/tun:/dev/net/tun \
ripleybooya/ssh-tunnel:tailscale
📌 Explanation:
SSH_HOST
: Le serveur distant où les tunnels SSH seront établis.SSH_USER
: L'utilisateur SSH sur le serveur distant.REMOTE_PORTS
: Ports distants à tunneliser (format : 127.0.0.1:PORT
).LOCAL_PORTS
: Ports accessibles dans le réseau Docker (correspondants à REMOTE_PORTS
).LOGROTATE_FREQUENCY
: Fréquence de Logrotate (défaut à daily
).LOGROTATE_ROTATE
: Nombre de rotation Logrotate à conserver (défaut à 7
).LOGROTATE_COMPRESS
: Compression Logrotate (défaut à compress
).-v /chemin/vers/id_rsa:/tmp/id_rsa:ro
: Monte votre clé SSH en toute sécurité (utilisation de /tmp/id_rsa
pour de meilleures permissions).-v /chemin/vers/donnees/persistantes/tailscale:/var/lib/tailscale
: Requis pour conserver l'état Tailscale.
- Exposer les ports avec
-p PORT:PORT
n'est pas obligatoire pour accéder aux ports depuis un réseau Docker ou votre Tailnet.- N'est utile seulement si vous souhaitez que les ports soient exposés au réseau local.
Sans un stockage persistant pour
/var/lib/tailscale
après l'expiration de la clé initiale, le conteneur ne sera plus capable de se connecter à votre Tailnet.
docker-compose.yml
version: '3.8'
services:
ssh-tunnel-tailscale:
image: ripleybooya/ssh-tunnel:tailscale
container_name: ssh-tunnel-tailscale
restart: always
environment:
SSH_HOST: "your-server.com"
SSH_USER: "your-username"
REMOTE_PORTS: "127.0.0.1:5432 127.0.0.1:443"
LOCAL_PORTS: "15432 8443"
TAILSCALE_AUTH_KEY: "your-tailscale-auth-key"
volumes:
- /path/to/id_rsa:/tmp/id_rsa:ro
- ssh_tunnel_tailscale_data:/var/lib/tailscale # Persistent Tailscale state, needed after initial key expiration
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun:/dev/net/tun
ports:
- "15432:15432" # (Optional) Also expose port on local network
- "8443:8443" # (Optional) Also expose port on local network
volumes:
ssh_tunnel_tailscale_data: # Named volume for Tailscale state
📌 Explanation:
SSH_HOST
: Le serveur distant où les tunnels SSH seront établis.SSH_USER
: L'utilisateur SSH sur le serveur distant.REMOTE_PORTS
: Ports distants à tunneliser (format : 127.0.0.1:PORT
).LOCAL_PORTS
: Ports accessibles dans le réseau Docker (correspondants à REMOTE_PORTS
).TAILSCALE_AUTH_KEY
: Initial Tailscale Authentication Key (You can generate a key here: Tailscale Keys).LOGROTATE_FREQUENCY
: Fréquence de Logrotate (défaut à daily
).LOGROTATE_ROTATE
: Nombre de rotation Logrotate à conserver (défaut à 7
).LOGROTATE_COMPRESS
: Compression Logrotate (défaut à compress
)./path/to/id_rsa:/tmp/id_rsa:ro
: Mounts your SSH key securely (using /tmp/id_rsa
for better permissions).ssh_tunnel_tailscale_data:/var/lib/tailscale
: Required for Persistent Tailscale state.
- Exposer les ports avec "
ports:
" n'est pas obligatoire pour accéder aux ports depuis un réseau Docker ou votre Tailnet.- N'est utile seulement si vous souhaitez que les ports soient exposés au réseau local.
Sans un stockage persistant pour
/var/lib/tailscale
après l'expiration de la clé initiale, le conteneur ne sera plus capable de se connecter à votre Tailnet.
✅ Sécurisé : Plus besoin d'exposer des services publiquement.
✅ Simple : Configurez quelques variables d'environnement et lancez-le.
✅ Multi-architecture : Fonctionne sur x86_64 (Intel/AMD) et ARM64 (Oracle Cloud, Raspberry Pi, etc.).
✅ Léger : Basé sur Alpine Linux pour une faible consommation de ressources.
docker pull ripleybooya/ssh-tunnel
docker run --rm -it ripleybooya/ssh-tunnel sh -c "uname -m && echo 'Le conteneur fonctionne correctement'"
🚀 Vos services distants sont maintenant accessibles via des tunnels SSH sécurisés !
Cette image peut être utilisée pour :
Ce projet est basé sur :
Ce projet est sous licence MIT.
Vous êtes libre de l'utiliser, le modifier et le distribuer.
Lire la licence complète ici.
📌 Trouvez le code source et contribuez sur GitHub !
Si vous souhaitez construire cette image vous-même, suivez ces étapes :
git clone https://github.com/RipleyBooya/ssh-tunnel.git
cd ssh-tunnel
amd64
& arm64
)docker buildx build --platform linux/amd64,linux/arm64 \
-t dockerhub_account/ssh-tunnel:latest \
--push .
docker buildx imagetools inspect dockerhub_account/ssh-tunnel:latest
docker run --rm -it dockerhub_account/ssh-tunnel sh -c "uname -m && echo 'Le conteneur fonctionne correctement'"
Votre image est maintenant construite et prête à l'emploi ! 🚀
Ce projet est open-source et les contributions sont les bienvenues !
Si vous trouvez des problèmes ou avez des suggestions, ouvrez une issue sur GitHub ou contribuez ! 🚀