{"id":31939511,"url":"https://github.com/s-damian/ssh-over-ssl","last_synced_at":"2026-04-15T21:31:12.352Z","repository":{"id":318709560,"uuid":"1073427866","full_name":"s-damian/ssh-over-ssl","owner":"s-damian","description":"Encapsuler SSH dans SSL/TLS avec stunnel sur Linux","archived":false,"fork":false,"pushed_at":"2025-10-10T06:26:47.000Z","size":3,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-10T08:03:51.587Z","etag":null,"topics":["debian","linux","ssh","ssh-tunnel","ssh-tunneling","ssl","stunnel","tls","ubuntu"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/s-damian.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-10T05:21:36.000Z","updated_at":"2025-10-10T06:26:51.000Z","dependencies_parsed_at":"2025-10-10T08:03:55.248Z","dependency_job_id":"5251d6dc-bdc0-4012-9299-36b9602b882c","html_url":"https://github.com/s-damian/ssh-over-ssl","commit_stats":null,"previous_names":["s-damian/ssh-over-ssl"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/s-damian/ssh-over-ssl","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/s-damian%2Fssh-over-ssl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/s-damian%2Fssh-over-ssl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/s-damian%2Fssh-over-ssl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/s-damian%2Fssh-over-ssl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/s-damian","download_url":"https://codeload.github.com/s-damian/ssh-over-ssl/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/s-damian%2Fssh-over-ssl/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279018311,"owners_count":26086342,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-14T02:00:06.444Z","response_time":60,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["debian","linux","ssh","ssh-tunnel","ssh-tunneling","ssl","stunnel","tls","ubuntu"],"created_at":"2025-10-14T08:29:20.386Z","updated_at":"2026-04-15T21:31:11.952Z","avatar_url":"https://github.com/s-damian.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Encapsuler SSH dans SSL/TLS avec stunnel sur Debian / Ubuntu\n\n\u003e Connexions SSH via le port 443 (SSL) à l'aide de Stunnel\n\n- [Introduction](#introduction)\n- [Configuration côté serveur](#configuration-côté-serveur-vps-distant)\n- [Configuration côté client](#configuration-côté-client-machine-locale)\n- [Proxy SOCKS](#proxy-socks-tunnel-ssh-dynamique)\n- [Article in English 🇬🇧](#article-in-english-)\n\n## Introduction\n\nCertains réseaux (pays, entreprises, universités, Wi-Fi publics) bloquent les connexions SSH sortantes sur le port 22, tout en autorisant le trafic HTTPS sur le port 443.\n\n**stunnel** permet d’encapsuler une connexion SSH dans une couche SSL/TLS, la rendant indiscernable du trafic HTTPS classique.\n\n### Cas d'usage typiques\n- Accéder à vos serveurs depuis un réseau restrictif.\n- Maintenir l'accès SSH depuis un Wi-Fi public filtré.\n- Contourner les limitations de certains FAI.\n- Sécuriser davantage vos connexions SSH avec une couche SSL supplémentaire.\n\n### Avantages\n- Permet de contourner les firewalls qui bloquent le port SSH (22).\n- Utilise le port 443 (HTTPS) généralement autorisé.\n- Double chiffrement : SSL + SSH, pour une sécurité renforcée.\n- Simple et rapide à mettre en place (sans changer votre configuration SSH existante).\n\n\n### 🔄 Schéma du flux\n\n```\n┌─────────────────┐          ┌─────────────────┐\n│  Client         │          │  Serveur        │\n│  (localhost)    │          │  (VPS)          │\n└────────┬────────┘          └────────┬────────┘\n         │                            │\n         │  1. SSH → localhost:2200   │\n         │     ↓                      │\n         │  stunnel client            │\n         │     ↓                      │\n         │  2. SSL/TLS → VPS:443 ────→│\n         │                            │\n         │                     stunnel serveur\n         │                            ↓\n         │                     3. SSH → localhost:22\n         │                            │\n         │  ←──────────────────────────\n         │     Connexion établie\n```\n\n\n\n# Tunnel SSH via SSL avec stunnel - Tutoriel pour Linux\n\nCe tutoriel couvre l'installation et la configuration complète de stunnel4, côté serveur et côté client, sur des systèmes **Linux** **Debian** / **Ubuntu**.\n\nNotes :\n- Le serveur distant sera aussi surnommé `VPS`.\n- Dans ce tutoriel, nous utiliserons l'utilisateur `root` pour le serveur distant (VPS).\n\n## Configuration côté serveur (VPS distant)\n\n### 1. Installer stunnel\n\n```bash\nsudo apt install stunnel4\n```\n\n\n### 2. Créer un certificat SSL\n\n```bash\n# Créer un certificat avec une clé RSA de 2048 bits et remplir les champs demandés.\ncd ~\nopenssl genrsa -out stunnel.key 2048\nopenssl req -new -x509 -key stunnel.key -out stunnel.crt -days 3650\n\n# Réponses suggérées :\n# Country Name: FR\n# Common Name: l'IP publique ou le nom de domaine de votre serveur (facultatif)\n\n# Fusionner la clé et le certificat :\ncat stunnel.crt stunnel.key \u003e stunnel.pem\nsudo mv stunnel.pem /etc/stunnel/stunnel.pem\n\n# Sécuriser les permissions :\nsudo chmod 600 /etc/stunnel/stunnel.pem\nsudo chown root:root /etc/stunnel/stunnel.pem\n```\n\nVous disposez maintenant du fichier : `/etc/stunnel/stunnel.pem`\n\n\n### 3. Configurer stunnel pour tunneliser le port 443 (HTTPS) vers le port SSH (22)\n\nCréer le fichier de configuration :\n\n```bash\nsudo nano /etc/stunnel/stunnel.conf\n```\n\nY insérer ce contenu :\n\n```bash\npid = /var/run/stunnel.pid\ncert = /etc/stunnel/stunnel.pem\n\n[ssh]\naccept = 443\nconnect = 127.0.0.1:22\n```\n\nExplication :\n- `accept = 443` : stunnel écoute sur le port 443 (HTTPS).\n- `connect = 127.0.0.1:22` : dès qu'une connexion SSL est reçue, elle est redirigée vers le port SSH local (22).\n\n\n### 4. Activer stunnel\n\nModifier le fichier :\n\n```bash\nsudo nano /etc/default/stunnel4\n```\n\nAjouter/Modifier `ENABLED` à :\n\n```bash\nENABLED=1\n```\n\n### 5. Démarrer le service stunnel\n\n```bash\n# Démarrer le service :\nsudo systemctl start stunnel4.service\n\n# L'activer au démarrage du serveur :\nsudo systemctl enable stunnel4\n\n# Vérifier son statut :\nsudo systemctl status stunnel4.service\n```\n\n\n### 6.Vérifier que stunnel écoute bien sur le port 443\n\nUtilisez la commande suivante :\n\n```bash\nsudo lsof -i :443\n```\n\nElle doit retourner quelque chose comme :\n\n```bash\nCOMMAND  PID USER FD   TYPE DEVICE SIZE/OFF NODE NAME\nstunnel4 771 root 9u  IPv4   5542      0t0  TCP *:https (LISTEN)\n```\n\n\n\n## Configuration côté client (machine locale)\n\n### 1. Installer stunnel\n\n```bash\nsudo apt install stunnel4\n```\n\n\n### 2. Créer la configuration client\n\n```bash\n# Si dossier `~/.config/stunnel` n'existe pas encore, faire :\nmkdir ~/.config/stunnel\n\n# Créer le fichier :\nnano ~/.config/stunnel/ssh-client.conf\n```\n\nY insérer ce contenu :\n\n```bash\nclient = yes\nforeground = yes\n\n[ssh]\naccept = 127.0.0.1:2200\nconnect = IP_PUBLIQUE_DU_SERVEUR:443\n```\n\nImportant :\nRemplacez `IP_PUBLIQUE_DU_SERVEUR` par l'adresse IP public de votre serveur.\n\n\n### 3. Activer stunnel\n\nModifier le fichier :\n\n```bash\nsudo nano /etc/default/stunnel4\n```\n\nAjouter/Modifier `ENABLED` à :\n\n```bash\nENABLED=1\n```\n\n\n### 4. Lancer le tunnelSSL\n\nDans un terminal :\n\n```bash\nsudo stunnel ~/.config/stunnel/ssh-client.conf\n```\n\n\n### 5. Se connecter via SSH à travers le tunnel\n\nEt dans un autre terminal :\n\n```bash\nssh -p 2200 root@localhost\n```\n\nPS : Si sur votre serveur, l'authentification par mot de passe est désactivée, utilisez votre clé privée SSH (avec l'option `-i`) :\n\n```bash\nssh -p 2200 -i /YOUR_PATH/.ssh/id_rsa_YOUR_FILE root@localhost\n```\n\n\n\n## Proxy SOCKS (tunnel SSH dynamique)\n\nCette partie est réservée pour les utilisateurs qui souhaitent utiliser Proxy SOCKS.\n\n\u003e Utiliser SSH pour créer un proxy SOCKS5 via le tunnel SSL\n\nUne fois le tunnel SSL/TLS établi, vous pouvez créer un **proxy SOCKS5** pour router l'ensemble de votre trafic Internet (navigation web, applications) à travers votre serveur distant (VPS).\n\n- Étape 1 : Lancer stunnel dans un terminal (si pas déjà fait).\n\n- Étape 2 : Créer le tunnel SSH avec proxy SOCKS :\n\nDans un second terminal :\n\n```bash\nssh -D 1040 -C -q -p 2200 -i /YOUR_PATH/.ssh/id_rsa_YOUR_FILE root@localhost\n```\n\nExplication des options :\n- `-D 1040` : Crée un proxy SOCKS5 local sur le port 1040.\n- `-C` : Active la compression des données SSH (pour économiser de la bande passante).\n- `-q` : Mode silencieux (supprime les messages locaux).\n- `-p 2200` : Se connecte au tunnel stunnel local.\n- `-i ...` : Spécifie la clé privée SSH à utiliser.\n- `root@localhost` : Utilisateur et hôte (le tunnel écoute sur localhost).\n\nImportant : Ces deux terminals doivent rester ouvert tant que vous utilisez le proxy.\n\n- Étape 3 : Configurer votre navigateur (Firefox par exemple).\n\n\n\n## Article in English 🇬🇧\n\n\u003e 📝 You can read the English version of the article on my blog:\n\n[Tunnel SSH Connections Over SSL Using Stunnel](https://www.damian-freelance.com/blog/ssh-over-ssl-with-stunnel-on-debian)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fs-damian%2Fssh-over-ssl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fs-damian%2Fssh-over-ssl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fs-damian%2Fssh-over-ssl/lists"}