FAQ:Tunneling ssh
Explications
Lors du paramétrage d'une nouvelle instance, il faut un accès ssh et/ou SQL.
Parfois l'accès direct n'est pas possible et il nous faudra passer par un serveur de "rebond".
On passera donc par du tunneling ssh ...
Nous allons voir plusieurs cas possibles :
- Accès ssh depuis un premier serveur vers un troisième, en passant par un second de manière transparente
- Accès SQL "distant" à une instance MySQL qui n'écoute que sur localhost de sa machine
- Accès SQL "distant" à une instance MsSql en passant par une machine de rebond
Tests cases
Rebond ssh srvdbsqware04 => srvdbsqware07 => srvdbsqware08
## Ouverture du tunnel -L pour le port local, -N pour ne pas executer de commande (pas de shell), -f pour l'envoyer en tache de fond
## Ouverture du tunnel port 22008 sur srvdbsqware04 vers srvdbsqware07 qui forward vers srvdbsqware08 port 22
# dbsqware@srvdbsqware04
ssh -f -N -L 22008:srvdbsqware08:22 dbsqware@srvdbsqware07
Test "Local" en forçant le port 22008 pour voir si on arrive bien sur le 08
## dbsqware@srvdbsqware04
ssh -p 22008 mysql@localhost <<EOFSSH
id
uname -a
EOFSSH
uid=1004(mysql) gid=985(mysql) groups=985(mysql),1000(dba) Linux srvdbsqware08 5.14.0-427.20.1.el9_4.x86_64 #1 SMP PREEMPT_DYNAMIC Fri Jun 7 14:51:39 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
Vous remarquerez que l'on arrive bien sur le serveur avec le user mysql alors que l'on passe par le serveur srvdbsqware0è avec le user dbsqware.
On va déclarer un alias qui pointe sur localhost de manière transparente :
# sudo vi /etc/hosts
127.0.0.1 localhost rb_07_08
Test de connexion en passant par l'alias "rb_07_08" :
## dbsqware@srvdbsqware04
ssh -p 22008 mysql@rb_07_08 <<EOFSSH
id
uname -a
EOFSSH
uid=1004(mysql) gid=985(mysql) groups=985(mysql),1000(dba) Linux srvdbsqware08 5.14.0-427.20.1.el9_4.x86_64 #1 SMP PREEMPT_DYNAMIC Fri Jun 7 14:51:39 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
Enfin, on va paramétrer la config ssh pour passer par le port 22008 quand on veut attaquer rb_07_08 :
vi ~/.ssh/config
# Rebond ssh 07 => 08 Host rb_07_08 port 22008
Test de connexion en passant par l'alias "rb_07_08" sans forcer le port :
## dbsqware@srvdbsqware04
ssh mysql@rb_07_08 <<EOFSSH
id
uname -a
EOFSSH
uid=1004(mysql) gid=985(mysql) groups=985(mysql),1000(dba) Linux srvdbsqware08 5.14.0-427.20.1.el9_4.x86_64 #1 SMP PREEMPT_DYNAMIC Fri Jun 7 14:51:39 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
A partir de là, toutes les connexions ssh/rsync de srvdbsqware04 vers rb_07_08 iront toucher srvdbsqware08 en passant par srvdbsqware07. Attention, le tunnel doit rester ouvert pour cela, pensez à les recréer quand vous redémarrez une ou l'autre des 3 machines !