Ssh tunnel ne fonctionne pas en service systemd

Tags: #<Tag:0x00007f63f0d2b710> #<Tag:0x00007f63f0d2b648>

Bonjour à tous,

Sous Debian 11, je souhaite, pour la première fois, établir une connexion postgresql permanente entre 2 serveur via un tunnel ssh.

Ma commande ponctuelle fonctionne.

Mon service fonctionne sans erreur apparente (voir Edit à la fin) et pourtant je n’arrive pas à me connecter, le port local n’est pas ouvert!

Merci d’avance pour toute aide.

Pour information mon service : /etc/systemd/system/ssh-tunnel3.service

[Unit]
Description=ssh tunnel
Wants=network.target
After=network.target
StartLimitIntervalSec=5
StartLimitBurst=1

[Service]
# https://stackoverflow.com/questions/62604573/systemd-ssh-tunnel-service-failing-while-command-works-in-command-line
StandardInput=tty-force           # 255 error si pas cette ligne - pas compris pourquoi !

Type=simple
ExecStart=/usr/bin/ssh admin@xxxxx.yy -4 -N -L 35432:localhost:5432
ExecStop=/usr/bin/ssh arh -O exit -R 35432:localhost:5432

TimeoutStartSec=10
TimeoutStopSec=10
Restart=always
RestartSec=10
 
User=admin

[Install]
WantedBy=multi-user.target

et
systemctl status ssh-tunnel3
● ssh-tunnel3.service - ssh tunnel
Loaded: loaded (/etc/systemd/system/ssh-tunnel3.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2024-04-08 08:14:53 CEST; 1min 59s ago
Main PID: 1991402 (ssh)
Tasks: 1 (limit: 9394)
Memory: 988.0K
CGroup: /system.slice/ssh-tunnel3.service
└─1991402 /usr/bin/ssh admin@xxxxx.yy -4 -N -L 35432:localhost:5432

Edit :

En ajoutant : StandardOutput=journal+console
J’ai un message dans ce journal :
The unit ssh-tunnel3.service has entered the ‹ failed › state with result ‹ exit-code ›

Reste à comprendre pourquoi?
Et pourquoi le status est Ok?
Et pourquoi ssh -v … , dans le service, n’envoie rien dans le journal ou à la console

tu utilise un compte (admin) pour la session ssh. Comment authentifies tu ce coimpte? via des clefs ou un mot der passe? Pour cette utilisation mieux vaut des clefs.

J’utilise bien un compte avec clé.

J’ai pensé faire un wrapper autour de ssh pour au moins récupérer les infos de l’option -v et poursuivre mon analyse …

Ceci dit entre temps, j’ai configuré un openvpn et cela fonctionne (j’avais choisi un tunnel car je fonctionnais déjà comme ça en ponctuel et sur le papier c’était plus simple et suffisant).

Je ne ferme pas le post car il n’est pas résilu, mais je ne travaille plus dessus (pour l’instant)

Il faut que l’utilisation des clefs soient dans le service, sinon ca ne marche pas.

1 J'aime

Merci pour ce conseil, j’ai déjà essayé sans plus de succès :

ssh -i /home/admin/.ssh/id_rsa …

Sachant qu’en direct je n’en ai pas besoin car la clé est dans l’agent du root.

Ma priorité, quand je me remettrai sur le sujet est de récupérer le retour d’erreur de la commande …

Effectivement, mais ça n’est pas possible avec un service systemd.
Avec clefs:

ssh -N -L SPORT:IPLOCAL:DPORT -i KEYFILE user@server

… et ne pas avoir sa clé protégée par une « passphrase » !

J’ai à une époque bcp utilisé et abusé des tunnels ssh.
Sur certains réseaux, la connexion ne tenait pas plus de quelques heures et était automatiquement coupée.
C’est pourquoi j’utilisais autossh qui est fait pour ça et réinitialise la connexion en cas de coupure.

2 J'aime

Hello,

Merci pour l’info, cela servira toujours à un futur lecteur, de mon côté je reste maintenant sous openvpn.

Bonne journée.

1 J'aime

L’utilisation de tunnel SSH est en réponse à des problématiques particulières qui n’ont rien à voir avec un VPN.
Par exemple, je l’utilise pour une usbip. Cette application partage un périphérique USB sur le réseau. Le problème c’est que ce n’est pas sécurisé. Donc je n’ouvre pas les flux et le tunnel relie en fait les deux interfaces lo du serveur et de l’ordinateur distant.
Coté serveur: 127.0.0.1:PORT1
Coté Client: 127.0.0.1:PORT2
PORT1 et PORT2 peuvent être identiques.