1- Home assistant installé et fonctionnel depuis votre réseau interne
2- Serveur distant avec docker , docker-compose et traefik
builder une image docker à partir de ce Dockerfile
from linuxserver/openssh-server:latest
expose 2222 8080
Builder l'image
docker build . -t hatunnel:latest
Ajouter dans votre docker-compose.yml
(adaptez le chemin /path/data/hatunnel
)
version: '3.7'
services:
# ..... Traefik et autres applications
hatunnel:
image: hatunnel:latest
container_name: hatunnel
networks:
- traefik
ports:
- 6222:2222
restart: always
volumes:
- "/path/data/hatunnel:/config"
environment:
- PUID=1000 # se référer à la doc de l'image de base
- PGID=1000 # se référer à la doc de l'image de base
- TZ=Europe/Paris # se référer à la doc de l'image de base
- USER_PASSWORD=achanger # se référer à la doc de l'image de base
- USER_NAME=myUser # se référer à la doc de l'image de base
- PASSWORD_ACCESS=true # se référer à la doc de l'image de base
labels:
- "traefik.http.routers.hatunnel.rule=Host(`home-assistant.domain.tld`)"
- "traefik.http.routers.hatunnel.tls=true"
- "traefik.http.routers.hatunnel.tls.certresolver=letsencrypt"
- "traefik.http.routers.hatunnel.entrypoints=websecure"
- "traefik.http.routers.hatunnel.middlewares=security@file" #, compression@file"
- "traefik.http.services.hatunnel.loadbalancer.server.port=8080"
- "traefik.http.routers.hatunnel.service=hatunnel"
- "traefik.docker.network=traefik"
- "traefik.http.routers.hatunnel-http.rule=Host(`home-assistant.domain.tld`)"
- "traefik.http.routers.hatunnel-http.middlewares=https-redirect@file"
sed -i 's/#AllowAgentForwarding yes/AllowAgentForwarding yes/g' /path/data/hatunnel/ssh_host_keys/sshd_config
sed -i 's/AllowTcpForwarding no/AllowTcpForwarding yes/g' /path/data/hatunnel/ssh_host_keys/sshd_config
sed -i 's/GatewayPorts no/GatewayPorts yes/g' /path/data/hatunnel/ssh_host_keys/sshd_config
sed -i 's/X11Forwarding no/X11Forwarding yes/g' /path/data/hatunnel/ssh_host_keys/sshd_config
relancer le service
docker restart hatunnel
se placer en root sur votre serveur interne, c'est le compte utilisé pour le service systemd
ssh-keygen -b 4096
tout valider par défaut (pas de passphrase)
Installer votre clé sur le serveur distant
ssh-copy-id -p 6222 [email protected]
Saisir le mot de passe injecté en variable d'environnement dans le docker-compose (ici achanger)
Test de la connexion
ssh -p 6222 [email protected]
La connexion doit se faire sans le mot de passe
ssh -N -T -R 8080:127.0.0.1:8123 -p 6222 [email protected]
puis tester la connexion http depuis votre serveur distant ici https://home-assistant.domain.tld
On peut ensuite créer un service
/etc/systemd/system/run-tunnel-ha.service
[Unit]
Description=Start HA tunnel
After=network.target
[Service]
ExecStart=/usr/bin/ssh -N -T -o ServerAliveInterval=60 -o ExitOnForwardFailure=yes -R 8080:127.0.0.1:8123 -p 6222 [email protected]
# Restart every >2 seconds to avoid StartLimitInterval failure
RestartSec=5
Restart=always
[Install]
WantedBy=multi-user.target
activer la prise en compte de ce nouveau service et le redémarrer
systemctl daemon-reload
systemctl enable run-tunnel-ha.service
Nota: Un redémarrage du service côté serveur interne me signale que le port 8080 est utilisé sur le serveur distant. J'ai du redémarrer le traefik....
Ajoutez dans configuration.yaml
http:
use_x_forwarded_for: true
trusted_proxies:
- 127.0.0.1