Accès à distance


session SSH à distance

Côté freebox :
Il faut d'abord activer les fonctionnalités routeur de la freebox dans l'interface de gestion. Le plus simple est d'assigner des baux DHCP permanents au serveur (et éventuellement aux autres ordinateurs). On a besoin pour cela de l'adresse MAC :

ifconfig

L'adresse MAC est l'adresse hexa-décimale associée à l'interface reliée à la freebox (ici eth2). Je l'associe à l'adresse 192.168.0.1 qui sera celle du serveur sur le réseau local. Il faut ensuite rediriger le port 22 (en TCP & UDP) de la freebox sur l'adresse choisie du serveur, port 22.

Côté serveur :
Il faut installer openssh-server :

sudo aptitude install openssh-server

Le serveur se lance automatiquement au démarrage. Si besoin, pour le démarrer :

sudo /etc/init.d/ssh start

Côté client :
2 cas de figure se présentent :

  1. Le nom d'utilisateur du client est le même que celui du serveur :
    ssh 123.45.67.89
    

    Il faut rajouter le paramètre -X pour pouvoir lancer des applications graphiques :

    ssh -X 123.45.67.89
    
  2. Les noms d'utilisateurs sont différents :
    ssh bob@123.45.67.89
    

    Pour pouvoir lancer des applications graphiques :

    ssh -X bob@123.45.67.89
    

Je vais enfin raffiner le bazar pour ne plus avoir à taper de mot de passe à partir du client. La connexion à partir de tout autre ordinateur est toujours possible, avec le mot de passe comme exposé ci-dessus. L'authentification se fait alors par un système de clé publique / clé privée (pour plus d'infos, voir le wiki d'Ubuntu-fr). Pour créer un couple de clés publique / privée, entrer la commande suivante :

ssh-keygen -t dsa

Il sera demandé un emplacement pour la clé (taper Entrée pour laisser par défaut) et une passphrase (phrase complète servant de mot de passe, plus elle est complexe, mieux c'est). Note pour la passphrase : si on tape Entrée, il n'y aura pas de passphrase et le système sera moins sécurisé ; toute personne entrant en possession de la clé privée aura accès directement à la connexion ssh. C'est ce que j'utilise personnellement, ce qui permet d'utiliser la connexion ssh dans des scripts sur le client (cf. synchronisation).

Je copie ensuite la clé privée sur le serveur avec la commande (il sera demandé le mot de passe de session) :

ssh-copy-id -i ~/.ssh/id_dsa.pub bob@123.45.67.89

On peut créer un lanceur spécifique pour initialiser la connexion SSH (sur le bureau, dans les barres d'outils ou bien dans le menu Ubuntu). Pour cela, créer un lanceur, lui donner un nom, mettre la commande complète dans la bonne ligne, lui associer l'icône voulu, et ne pas oublier de cocher la case : «Lancer dans un terminal».


transfert de fichiers sécurisé

Le transfert peut se faire en ligne de commande, avec la commande scp qui utilise un pont SSH. Le plus simple est toutefois de créer un raccourci réseau sur le bureau (Raccourcis > Se connecter à un serveur distant), avec les paramètres suivants :

  • Type de service : SSH
  • Serveur : l'adresse IP
  • Port : laisser vide (par défaut, il s'agit du port 22)
  • Dossier : si le champ est vide, il s'agit du répertoire racine (/). On peut mettre par exemple le répertoire personnel (/home/bob/)
  • Nom d'utilisateur : laisser vide si l'utilisateur est le même sur les 2 ordinateurs, mettre l'utilisateur du serveur sinon
  • Nom à utiliser pour la connexion : c'est le nom qui s'affichera sur le bureau

Le raccourci sur le bureau est permanent (et n'est pas éditable). Pour le supprimer, bouton droit > Démonter le volume.


synchronisation de répertoires

L'idée est la suivante : le même répertoire (appelons-le «toto») se trouve sur le serveur et sur le client. Je souhaite que toute modification dans ce répertoire sur le serveur ou le client se répercute sur l'autre ordinateur. Ainsi, les 2 ordinateurs utiliseront en permanence les versions les plus récentes de chaque fichier du répertoire. Le tout se passe par une connexion SSH.

Pour cela, j'utilise rsync, un utilitaire en ligne de commande inclu par défaut sous Ubuntu. Ses options sont multiples.

Côté freebox :
rsync utilise le port 873 par défaut. Il faut donc rediriger le port 873 de la freebox (TCP & UDP) sur le port 873 du serveur.

Côté serveur :
Il faut tout d'abord lancer de manière automatique le démon rsync. Pour cela, éditer le fichier /etc/default/rsync

sudo nano /etc/default/rsync

et changer la valeur de RSYNC_ENABLE en true :

RSYNC_ENABLE=true

La configuration du serveur peut se faire dans le fichier rsyncd.conf, par un système de modules, qui représentent chacun une instance de synchronisation (pour plus d'infos, voir le wiki d'Ubuntu-fr). N'ayant jamais pu faire fonctionner ce système, j'en resterai à la bonne vieille syntaxe rsync côté client.
Une fois le serveur configuré, il faut lancer le démon rsync (au prochain démarrage, le lancement sera automatique) :

sudo /etc/init.d/rsync start

Côté client :

La commande rsync est très complète (voir ici pour une traduction en français de la page de manuel) et finalement assez simple :

rsync -avz --progress ~/Source 123.45.67.89:/home/bob/Cible/

Cette commande va copier le répertoire Source dans le home de l'utilisateur (côté client) dans le répertoire Cible situé dans le home de l'utilisateur (côté serveur). rsync utilise les options suivantes :

  • -a : mode archive i.e. visite récursive des répertoires, copie les liens symboliques comme liens symboliques, préserve les permissions, le propriétaire (root uniquement), le groupe, les périphériques (root uniquement), les dates ;
  • -v : plus loquace ;
  • -z : transfert en compressant les données ;
  • --progress : montre l'avancement pendant le transfert ;

J'évite en général d'utiliser l'option --del qui efface les fichiers qui n'existent pas (ou plus) chez l'émetteur au cours du transfert. Ça permet d'éviter quelques erreurs de vidage de corbeille intempestif, au prix d'une duplication de quelques fichiers déplacés...

Il est également possible d'exclure du transfert des répertoires précis, avec la syntaxe --exclude='Rép_à_exclure', répétée au niveau des options de RSync autant de fois qu'il y a de répertoire à exclure. Attention, l'adresse du répertoire est relative au répertoire source !

Automatisation

L'automatisation se fait via un 'cron job'. Il faut d'abord créer un fichier texte dans un répertoire de son choix

sudo nano Cron_Backup

et y insérer la ligne suivante :

00 12 * * * rsync -avz --progress ~/Source 123.45.67.89:/home/bob/Cible/

Cette ligne indique que la sauvegarde est effectuée tous les jours à midi pile. La syntaxe est, dans l'ordre :

minute    0-59
heure    0-23
jour du mois    0-31
mois    0-12 (ou noms, voir plus bas)
jour de semaine    0-7 (0 et 7 sont Dimanche) ou les noms

Plus d'information ici.

La prise en compte du cron job se fait avec la commande suivante (si l'on est dans le répertoire de 'Cron_Backup') :

crontab Cron_Backup

Pour vérifier les cron job planifiés :

crontab -l

et pour les supprimer :

crontab -r

connexion à distance par VNC

Côté freebox :
Il faut cette fois rediriger le port 5900 (en TCP & UDP) de la freebox sur l'adresse choisie du serveur, port 5900.

Côté serveur :
Ubuntu contient déjà tout ce qu'il faut pour utiliser une connexion avec VNC, côté client et côté serveur. Il suffit donc de configurer le serveur. Cela peut se faire graphiquement via Système > Préférences > Bureau à distance (en console : vino-preferences) avec les paramètres de configuration suivants :
Préférences Bureau à distance

Il faut également activer la connexion automatique sur la session utilisateur du serveur, puisque VNC ne peut pas ouvrir lui-même de session. Pour cela, Système > Administration > Fenêtre de connexion, onglet Sécurité, cocher Activer les connexions automatiques et choisir l'utilisateur du serveur.

(Notons que cette limitation peut théoriquement être contournée. Voir par exemple ce tutoriel basé sur la Suse Linux v10.0)

Côté client :
Le choix d'une interface graphique est possible (Applications > Internet > Terminal Server Client). Il suffit ensuite de rentre l'adresse IP du serveur et de choisir VNC comme protocole. La ligne de commande est cependant beaucoup plus rapide :

vncviewer 123.45.67.89

Dans les 2 cas, le serveur demandera une authentification, il s'agit du code décidé un peu plus haut.

On peut enfin ouvrir une connexion VNC sécurisée via un pont SSH. Il faut d'abord ouvrir une session SSH (voir plus haut) puis sur la session distante entrer :

vncviewer localhost:5900

À partir de là, si tout va bien, on n'a plus besoin d'écran ni de souris sur le serveur (ni de clavier si le BIOS le permet). Celui-ci peut donc être débarassé de ces périphériques et rangé dans un placard !


Surveillance réseau

Il existe un outil très pratique pour surveiller le transit réseau sur le serveur : iftop

sudo aptitude install iftop

Pour le lancer, il faut les droits administrateurs :

sudo iftop -B -i eth2

(par exemple. Plus d'infos ici)