Créer un tunnel SSH au démarrage avec systemd sous Debian

Comment faire pour pouvoir se connecter en SSH sur un PC Linux distant, peu importe la manière dont il est connecté à Internet, et peu importe son adresse IP publique?

L’idée est de faire en sorte que le PC distant établisse automatiquement au démarrage une connexion SSH vers un « serveur » joignable en SSH sur l’internet.  Et dans cette connexion, on encapsulera (tunnel) une connexion SSH du serveur vers le PC distant. C’est cette connexion SSH qui permet l’accès à distance à la machine à contrôler.  De cette manière, le seul prérequis pour la machine à contrôler est d’être connectée à l’internet et de pouvoir ouvrir une connexion TCP sur le port 22 vers l’internet.

Le schéma ci-dessous illustre le principe.

Le but est donc d’avoir un tunnel inverse dans un tunnel classique, le tout pour un certain utilisateur (pas root pour des raisons de sécurité!).

Prérequis

Les prérequis sur la machine distante sont assez limités:

  • être connectée à internet et pouvoir se connecter sur le port 22 à un serveur sur Internet
  • Avoir le paquet autossh installé: sudo apt-get install autossh
  • Avoir SSH installé et autorisé les connexion en SSH.

La machine que l’on utilisera comme serveur doit accepter les connexions sur le port TCP 22 venant de l’internet.  Chez moi, il s’agit de ma machine Linux derrière mon modem câble sur lequel une règle de « port forwarding » est configurée.

Configuration

Clé SSH sans mot de passe

La machine distante se connectera sur le serveur avec une clé SSH sans mot de passe.  Il faut la générer sur la machine distante avec: ssh-keygen -t ed25519. (PS: l’algorithme ED25519 est celui recommandé actuellement en terme de sécurité).

On copie ensuite sur le serveur la clé publique générée et on l’intègre dans le fichier ~/.ssh/authorized_keys de l’utilisateur souhaité.

On peut tester que la connexion fonctionne en initiant manuellement une connexion SSH depuis la machine distante vers le serveur: ssh user@server-ip.

 Création du fichier de démarrage automatique pour systemd

Pour démarrer automatiquement la connexion SSH au démarrage, nous utiliserons systemd pour l’utilisateur courant. Le principe est de créer un fichier décrivant notre service, et de l’activer au démarrage du système.

Créer le fichier ~/.config/systemd/user/autossh.service avec le contenu suivant:

[Unit]
Description=AutoSSH service for port 22 with reverse tunnel
After=network.target

[Service]
Environment="AUTOSSH_GATETIME=0" "AUTOSSH_POLL=30"
ExecStart=/usr/bin/autossh -N -R 30001:localhost:22 -o TCPKeepAlive=yes remote-user@remote-ip

[Install]
WantedBy=default.target

Le numéro de port 30001 ci-dessus peut être changé, si jamais vous avez une contrainte particulière sur le serveur.

Il faut ensuite activer la persistance de systemd pour l’utilisateur courant: sudo loginctl enable-linger <user>.

Enfin, on active le service fraichement créé: systemctl --user enable autossh.service.

Il reste à activer manuellement le service (systemctl --user start autossh.service) ou à redémarrer la machine pour que le tunnel SSH soit créé.

Utilisation

Dès que la machine à contrôler est connectée à Internet, endéans les 30 secondes, elle établit une connexion SSH avec la machine remote-ip. De cette machine, pour accéder à la machine distante, il suffit de taper:

ssh -p 30001 distant-user@localhost

Et voilà 🙂

Ma bibliothèque d’ebook en ligne avec calibre et rsync

Au fil des années, j’ai constitué une petite bibliothèque virtuelle de livres numériques ebooks.  Jusqu’il y a peu, mes livres étaient répartis un peu partout sur mes disques durs, sans moyen simple de les consulter, ni de retrouver facilement les livres traitant d’un sujet en particulier.

Il y a quelques mois, j’ai pris le taureau par les cornes et j’ai enfin mis de l’ordre dans ma collection.  Depuis, elle est bien rangée et consultable facilement, sur mon poste de travail, ou depuis n’importe où via une simple interface web.

Lire la suite »

Surveiller sa consommation d’eau avec Domoticz et un ESP8266

Voici un montage électronique simple qui permet de surveiller sa consommation domestique d’eau facilement.  Il suffit de quelques composants, un module microcontrôleur basé sur la puce ESP8266 compatible Arduino, et une solution serveur afin de produire de beaux graphiques de consommation.

Lire la suite »

Configurer rapidement un firewall sous Debian avec ufw

Dans le cadre de l’auto‑hébergement, j’ai tout un tas de services qui tournent sur mon petit serveur à la maison. A priori, je n’ai pas besoin de firewall (pare‑feu) car ce serveur se trouve derrière mon modem-routeur internet qui fait office de pare‑feu.

Cependant, je me suis rendu compte qu’un firewall peut tout de même être utile pour les raisons suivantes: Lire la suite »

Découverte de l’IoT avec une carte SODAQ Mbili

On ne présente plus les cartes Arduino et tout l’écosystème associé qui permet au bidouilleur de réaliser assez simplement et rapidement des montages électroniques relativement sophistiqués: petit robot suiveur de ligne, pédale pour guitare électronique, capteur de température, thermostat…

© conifer – flickr

En 2014 sont apparus les modules ESP8266 qui sont compatibles avec l’IDE Arduino et comportent une puce Wifi intégrée.  Cela a permit de développer facilement toute une série de petits systèmes connectés, avec beaucoup d’exemples dans la domotique: capteur de température connecté, système d’éclairage, contrôle de porte de garage…  D’un coup, le Wifi libère nos montages et nous permet de les déporter partout dans la maison tout en les connectant au monde extérieur.

Le Wifi n’est pas encore suffisant pour d’autres types d’applications hors de la maison (ou en dehors d’une zone couverte par un Wifi).  Je pense par exemple à des systèmes connectés dans l’agriculture, des systèmes de géolocalisations, dans la voiture…  Dans ces cas, la connectivité doit être assurée par un réseau mobile.

En Belgique, Orange a lancé son réseau NB-IoT qui permet de réutiliser le réseau mobile existant pour offrir un service de connectivité dédié pour l’Internet des objets, avec notamment deux caractéristiques importantes: la très faible consommation énergétique nécessaire pour un client, et la très forte couverture réseau, y compris dans des endroits jusque-là inaccessibles pour le réseau mobiles (caves, zones reculées…).

J’ai eu la chance de pouvoir tester un kit de développement rapide NB-IoT, voici le résultat. Lire la suite »

Utiliser Git et bitbucket pour écrire un livre en LaTeX (partie 2)

Dans le premier article de cette série, nous avons découvert ce qu’était un système de gestion de versions et en quoi il peut être utile dans le cadre de la rédaction collaborative d’un document en LaTeX.  J’ai expliqué également comment utiliser Bitbucket, ainsi que les concepts de base de Git: projet Git, cloner un dépôt, créer un commit.  Jusqu’à présent, je n’ai pas encore réellement abordé ce qui fait la force de Git dans notre cas d’usage: c’est l’objet de ce deuxième article.

Cette deuxième partie couvrira donc les sujets suivants:

  • affichage de l’historique du projet, et comment revenir à des versions antérieures de certains fichiers.
  • comment identifier avec une étiquette précise certaines versions du projet (par exemple, la version envoyée pour relecture aux autres collègues, la version imprimée en début d’année…)
  • comment travailler sur plusieurs versions du document en même temps (par exemple pour préparer la deuxième édition du livre tout en corrigeant les éventuelles coquilles de la première édition)

Lire la suite »

Utiliser Git et bitbucket pour écrire un livre en LaTeX (partie 1)

Pour l’enseignant en mathématique, LaTeX. est une solution élégante pour produire des documents d’une qualité typographique irréprochable.

Latex est un logiciel de composition particulièrement adapté à la production de documents scientifiques et mathématiques de grande qualité typographique. Il permet également de produire toutes sortes d’autres documents, qu’il s’agisse de simples lettres, slides ou de livres entiers. Pour ceux qui ne connaissent pas Latex et qui souhaitent le découvrir, je vous conseille la lecture du premier chapitre d’une courte (?) introduction à LaTeX.

Des notes de cours, des tests, un syllabus ou un livre de référence, cela évolue en permanence. Il faut parfois revenir en arrière sur une modification, parfois modifier légèrement un exercice, parfois écrire des parties au « brouillon » que finalement on ne conservera pas etc. Quand en plus on modifie à plusieurs le même document, les risques sont grands de se perdre dans les différentes versions de texte, voire même de perdre certaines modifications écrasées involontairement.

Le besoin se fait rapidement sentir d’un outil permettant de structurer le travail de rédaction, notamment en conservant l’historique des modifications et permettant de travailler ensemble sur un même projet, sans risque.

Lire la suite »

Bienvenue!

$ python3 -c 'print("Hello world!")'
Hello world!

$ jesuis=$(grep ^$(whoami) /etc/passwd |awk -F: '{print $5}') 
$ echo ${jesuis::-3}
Xavier Lüthi 

$ gpg --fingerprint 6998E5C4
pub   4096R/6998E5C4 2014-02-03
      Empreinte de la clef = 6DF1 8403 037B 3036 A6F7  172C 3877 06A2 6998 E5C4
uid                  Xavier Lüthi <xavier@luthi.eu>
uid                  Xavier Lüthi <xluthi@debian.org>
sub   4096R/5EF52F75 2014-02-03

$ lsb_release -d
Description:	Linux Mint 20.1 Ulyssa
$ ssh bohr lsb_release -d
Description:	Debian GNU/Linux 10 (buster)

ma clé PGP