LinuxPedia

Wiki libre et indépendant dédié à GNU-Linux et BSD.

Outils pour utilisateurs

Outils du site


serveurs:ssh-callback

Contrôle à distance avec ssh-callback, ou comment jouer les passe-murailles

Présentation

Kevin veut pouvoir aider sa mère qui habite à l'autre bout de la France.
Le but de ce tutoriel est de présenter une technique de prise de contrôle à distance sécurisée (tunnel ssh), ayant l'avantage de ne pas avoir à ouvrir ni à faire de redirection de ports chez “maman”. Une fois le laptop de maman configuré, peu importe si elle se trouve derrière telle borne wifi ou tel routeur, pour se faire dépanner elle devra simplement cliquer sur une icône de son bureau.

Ce document est inspiré en grande partie de la conférence d'Olivier Allard-Jacquin organisée au sein de la Guilde, dont vous pouvez trouver les transparents ici.

Paquets à installer

Maman installe x11vnc (ou pas, sur debian il ya déjà vino, le server vnc de Gnome)
Kevin installe openssh-server et xtightvncviewer

Mode d'emploi

  • Si besoin Kevin configure son routeur (redirection du port 22 vers sa machine).
  • Kevin crée un compte utilisateur “maman” sur sa machine (avec éventuellement un pseudo shell, voir plus bas)
  • Maman démarre son server vnc.
  • Maman crée le tunnel ssh que Kevin pourra ensuite “remonter”
~$ ssh -R 5901:localhost:5900 -R 10022:localhost:22  maman@adresse_ip_de_kevin

Ici l'option -R (Remote) implique une redirection à distance : ssh écoute le port 5901 (resp 10022) de Kevin, et dès qu'une connection est établie sur ce port, la redirige à travers le cannal sécurisé, et se connecte à maman (localhost) sur le port 5900 (resp 22).
Si l'on avait souhaité une redirection locale (dans l'autre sens), on aurait utilisé l'option -L.

.

  • Kevin prend le contrôle du bureau de maman
~$ xtightvncviewer -encodings tight localhost:1

Pourquoi 1? Parce que la relation entre le numéro du port TCP du serveur VNC et le “numéro d'écran” VNC se calcul comme suit: Numéro_écran_VNC = Port_TCP_serveur_VNC - 5900.
.

  • Kevin peut aussi se connecter en mode console
~$ ssh -p 10022 login_de_maman@localhost

Kevin n'a pas tellement confiance en maman

Maman a quand même ouvert une connexion ssh sur l'ordi de Kevin, et ce dernier est paranoïaque. Il crée donc un pseudo shell pour le compte utilisateur maman, dont voici le code, plutôt simple :-)

#include <stdio.h>
#include <unistd.h>
int main (int argc, char* argv[]) {
  printf("Le tunnel SSH callback est actif\n\
L'utilisateur à distance peut maintenant se connecter\n\
Vous pouvez arrêter cette connexion en tapant plusieurs fois Ctrl+C\n");
  sleep(-1);
  return 0;
}
~# gcc ssh-cb.c -o /usr/local/sbin/ssh-cb 

Bien entendu il faut installer les paquets nécéssaires pour la compilation (build-essential pour Debian/Ubuntu). Il faut aussi rajouter la ligne /usr/local/sbin/ssh-cb au fichier /etc/shells, afin de pouvoir attribuer ce pseudo shell à l'utilisteur maman.

Script "un clic" pour maman

#!/bin/bash -norc
SERVER_NAME=adresse_ip_de_Kevin
SERVER_PORT=22
ACCOUNT_NAME=maman
REMOTE_SSH_PORT=10022
REMOTE_VNC_PORT=5901
echo + Starting x11vnc server...
x11vnc -ncache 10 -display :0 -loop -allow localhost & sleep 5s
 
# Le  -ncache 10  est une option que x11vnc nous enjoint de mettre si l'on oublie. Cela permet de sauvegarder des pixels en cache et donc une meilleure fluidité.
# Le  -loop  permet de redémarrer automatiquement le serveur X11vnc lorsque la connexion avec le client VNC s'interrompt.
 
# Le  -allow localhost  n'autorise les connexions au serveur VNC que sur l'interface loopback. 
# Une personne située à distance ne pourra pas donc contacter directement le serveur VNC, seule une connexion à travers un tunnel SSH fonctionnera.
 
echo
echo + Calling remote callback host...
ssh -C -p $SERVER_PORT $ACCOUNT_NAME@$SERVER_NAME \
       -R $REMOTE_SSH_PORT:localhost:22 \
       -R $REMOTE_VNC_PORT:localhost:5900
echo + Kill x11vnc server...
killall x11vnc || (sleep 2s ; killall -9 x11vnc)
serveurs/ssh-callback.txt · Dernière modification : 2018/11/17 12:54 de 127.0.0.1