Tunneliser une connexion VNC via SSH

Le tutoriel ci-dessous va vous permettre de prendre le contrôle d'une machine distante via ssh. Nous créerons à cet effet un lanceur qui sera inclus dans le menu principal. L'intérêt de l'utilisation de xvnc4viewer en lieu et place de vinagre est l'option -via. Celle-ci permet à vncviewer de se connecter directement en SSH. Cette méthode permet de sécuriser l'accès VNC classique hautement intrusif de l'extérieur. Pour réaliser une telle connexion, il faudra :

Création d'une paire de clefs sur le poste client

On doit d'abord créer les clés sur le ou les postes clients avant de les exporter sur le ou les ordinateurs auxquels on veut accéder. Pour cela reportez-vous au paragraphe sur les clés de la page ssh.

Configuration du poste client

Installez les paquets xvnc4viewer et openssh-client (ce dernier est normalement installé par défaut sous ubuntu).

Editez le fichier de configuration SSH client /etc/ssh/ssh_config avec les droits d'administration et enlever le # présent devant PasswordAuthentication et passer la valeur à no (ceci exclut l'authentification par mot de passe). Faîtes de même avec Protocol pour qu'il ne reste que Protocol 2 (le protocole 1 des clés RSA ou DSA est à proscrire car moins sécurisé).

Relancez le client SSH afin de prendre en compte les modifications avec la commande:

sudo /etc/init.d/ssh restart

Sous Windows côté client avec PUTTY

Une solution simple et efficace existe sous Windows afin de prendre en main une machine Ubuntu, le tout via un tunnel SSH.

Les manipulations sont les mêmes pour la machine à contrôler, les changements interviennent seulement sur la machine qui contrôle (dans mon cas sous Windows XP).

  • Télécharger le logiciel PUTTY permettant l'accès à la console en SSH.
  • Démarrez Putty, entrez l'adresse sur laquelle vous voulez vous connecter (IP publique ou nom de domaine, pour en ouvrir un gratuit voyez la page sur les DNS dynamiques).
  • Choisissez SSH en 'Connexion Type'. Sur la gauche de l'écran rendez vous dans l'onglet 'SSH', puis 'Tunnel':
    • en 'source port', ajoutez 5900 5901
    • en 'destination', ajoutez 127.0.0.1:5900
  • Cochez éventuellement sous SSH « Enable Compression ».
  • Sauvegarder votre profil.

VNC ⇐ 5900 (local) ⇒ Putty ⇐ 22 (distant) ⇒ machine_a_controler

Diffusion de la clé publique sur le poste serveur

Enregistrez sur le ou les postes auxquels vous souhaitez accéder la clé publique copiée de votre fichier caché ~/.ssh/id_dsa.pub.
Vous devez l'enregistrer dans le fichier caché ~/.ssh/ du poste serveur.
Puis renommez sur le poste serveur ce fichier en authorized_keys2 (le 2 signifie qu'on souhaite bénéficier du protocole SSH2). Vous vous retrouvez alors avec le fichier caché ~/.ssh/authorized_keys2.

Le fichier authorized_keys2 doit comporter la clé publique SSH sur une seule ligne. Vérifiez que c'est bien le cas avec votre éditeur de texte favori. Veillez aussi à décocher la case "activer le retour à la ligne automatique" pour être sûr qu'il n'y a pas de retour à la ligne.

Vous pouvez diffuser cette clé par le moyen de votre choix (copie par clé usb, envoi email…)

Configuration du poste serveur et prise à distance via vnc

Installez les paquets x11vnc et openssh-server

Éditez le fichier de configuration SSH serveur /etc/ssh/sshd_config avec les droits d'administration et mettez PermitRootLogin no (à vous de voir mais le laisser sur yes peut permettre toutes les modifications possibles) et AuthorizedKeysFile /home/[nom_d'utilisateur]/.ssh/authorized_keys2

Ajouter tout ça FIXME aux applications au démarrage.

Sur le poste client il ne vous reste plus qu'à taper dans un terminal:

  • ssh -L 5901:localhost:5900 [adresse poste serveur]
  • dans un nouvel onglet
    xvnc4viewer 127.0.0.1:5901
Il est inutile de laisser le serveur vnc activé tout le temps, si le but est de ne l'utiliser que par ssh. Plutôt que d'ajouter une application au démarrage, utilisez la méthode suivante: connectez vous au serveur avec la ligne suivante:
 ssh -X -L 5901:localhost:5900 [adresse poste serveur]

depuis le serveur lancez x11vnc:

sudo x11vnc -display :0

et enfin dans un nouvel onglet (donc sur le client):

xvnc4viewer 127.0.0.1:5901

Un message doit vous demander sur le poste serveur si vous autorisez la prise de contrôle…

contributeurs: djoser,

  • ssh_vnc.txt
  • Dernière modification: Le 28/04/2018, 11:17
  • (modification externe)