Accéder à distance à sa machine (VNC+ssh)
L'astuce suivante vous permettra d'accéder à distance à votre machine de manière graphique.
Nous allons utiliser le serveur VNC inclu dans Ubuntu (Vino) en le sécurisant par ssh.
Vous pourrez alors accéder à distance à votre PC avec ssh et vnc (Par exemple sous Windows en emportant putty et tvncviewer sur clé USB).
L'avantage d'utiliser VNC à travers ssh est que les communications sont chiffrées, et l'authentification est faite par ssh (et non par VNC).
(En effet, le protocole d'authentification de VNC est faible est il est possible de "sniffer" les informations de connexion. VNC ne devrait jamais être utilisé tel quel sur internet.)
Configuration sur le serveur (machine qui sera accédée à distance)
Installez le serveur ssh
sudo apt-get install openssh-server
Changez le port par défaut du serveur ssh
(Cela réduit les risques d'attaques)
Modifiez le fichier /etc/ssh/sshd_config
Changez: Port 22
par: Port 11122
Changez: PermitRootLogin yes
Par: PermitRootLogin no
(Vous pouvez bien entendu utiliser le port de votre choix.)
Redémarrez ensuite le serveur ssh:
sudo /etc/init.d/ssh restart
Configurez Vino
Lancez gconf-editor et modifiez les valeurs suivantes:
- authentication_methods: none
- enabled: cocher
- network_interfaces: lo (IMPORTANT!)
- prompt_enabled : décocher
Ainsi, on peut se connecter sur le serveur VNC directement sans mot de passe, mais uniquement localement (à partir de la machine elle-même).
(Avec network_interfaces=lo, il est impossible de se connecter à distance au serveur VNC.)
Configurez votre session
Note: le serveur Vino ne démarrera que pour votre utilisateur.
Il faut donc qu'une session soit préalablement ouverte pour pouvoir vous connecter à distance.
Vous pouvez activer le login automatique: Menu Système > Administration > Fenêtre de connexion
Cochez "Activer la connexion différée" et choisissez votre utilisateur.
Ainsi même si vous redémarrez à distance l'ordinateur, vous pourrez à nouveau vous connecter dessus.
Firewall
Si vous avez un firewall, pensez à ouvrir le port que vous avez choisi pour votre serveur ssh (11122 dans notre exemple).
Il est inutile (et déconseillé) d'ouvrir le port spécifique à VNC (5900).
Configuration sur le client
Essayons maintenant de nous connecter dessus. Nous allons prendre pour exemple un client sous Windows.
Il suffit de prendre Putty (comme client ssh) et tvncviewer (comme client VNC).
Ces deux logiciels ne nécessitent pas d'installation et peuvent être emportés sur clé USB.
Note: Nous utilisons le client TightVNC et non simplement VNC, car il supporte de meilleurs algorithmes de compression (JPEG, etc) supportés par le serveur Vino (comme la compression JPEG).
Configurer Putty
Configurez votre connexion Putty: Entrez l'adresse IP de votre machine, le port:
Ajoutez ensuite un tunnel: port local 5900 vers port 5900 de votre machine:
- Source port: 5900
- Destination: localhost:5900
- Cliquez sur le bouton "Add"
Et n'oubliez pas de sauvegardez ces paramètres (entrez un nom et cliquez sur "Save"):
Vous n'aurez plus à refaire cette manipulation.
Connexion à distance
Lancez Putty et double-cliquez sur votre session ("mon ordinateur" dans notre exemple):
Entrez login et mot de passe de votre utilisateur.
Vous pouvez maintenant lancer VNC et vous connecter sur localhost
Et voilà, vous avez accès à votre bureau.
VNC n'est pas très rapide, mais c'est bien pratique de pouvoir accéder à distance à sa machine.
Notes
Sécurité:Cette méthode introduit 3 risques potentiels:
- Serveur ssh ouvert: Il est impératif de choisir un mot de passe difficile à deviner (plus de 8 caractères (lettres, chiffres, symboles)).
- Serveur VNC ouvert en local: Toute personne qui a un accès local à la machine peut se connecter sur le serveur VNC (pas de mot de passe). (La connexion à distance sur le serveur VNC reste impossible).
- Le login automatique permet à une autre personne d'utiliser votre compte sans le mot de passe, du moment qu'elle a un accès physique à l'ordinateur.
En conséquence, cette méthode ne devrait être mise en oeuvre que si:
- Le PC n'est physiquement accessible que de vous-même.
- Si vous êtes l'unique utilisateur(trice) de l'ordinateur (ou si vous faites totalement confiance aux autres utilisateurs).
En outre, il est fortement recommandé d'installer un firewall. Sous Ubuntu 8.10 et suivants, vous pouvez installer gufw et autoriser uniquement en entrée le port de votre serveur ssh (11122 dans notre exemple).
Pour vous connecter sur votre PC, vous devez connaître son adresse IP.
Si elle change trop souvent, vous pouvez installer un client dyndns.
Astuces
Configurer Vino en ligne de commande
Pratique à travers une session ssh sans X11:
sudo su utilisateur gconftool-2 --type list --list-type string /desktop/gnome/remote_access/authentication_methods --set "[none]" gconftool-2 --type string /desktop/gnome/remote_access/network_interface --set "lo" gconftool-2 --type bool /desktop/gnome/remote_access/prompt_enabled --set false gconftool-2 --type bool /desktop/gnome/remote_access/enabled --set true
Notez que ces modifications ne seront prises en compte que lors du prochain login de l'utilisateur.
(Si l'utilisateur est déjà connecté, cela ne démarrera pas le serveur Vino).
Pour forcer l'utilisateur à se déconnecter (et donc forcer le démarrage de Vino), faites:
sudo /etc/init.d/gdm restart
Activer le login automatique
Modifiez le fichier /etc/gdm/gdm.conf
Repérez les lignes:
TimedLoginEnable=false TimedLogin= TimedLoginDelay=30
Remplacez par:
TimedLoginEnable=true TimedLogin=pierre TimedLoginDelay=30
puis forcez le redémarrage de session:
sudo /etc/init.d/gdm restart
(cela va déconnecter l'utilisateur s'il était connecté.)
Vous devriez maintenant voir le serveur Vino:
Vous pouvez remarquer que Vino n'est en écoute que sur les interfaces locales (127.0.0.1 (ipv4) et ::1 (ipv6)): Il n'est donc pas possible de se connecter sur votre Vino à distance, même si votre firewall est désactivé.
C'est une sécurité.