Exile on Keyboard St. - Blog sur Linux et Debian

Aller au contenu | Aller au menu | Aller à la recherche

jeudi 27 avril 2017

Machine Virtuelle, réseau NAT et redirection de ports

Quand on crée une machine virtuelle avec VirtualBox, le réseau créé par défaut est de type NAT.

Avec le réseau NAT, dans lequel aucune configuration n'est nécessaire, on peut naviguer sur Internet, lire les mails et de manière générale les applications de la machine virtuelle ont accès au réseau.

Dans ce mode réseau, le moteur réseau de VirtualBox agit comme un routeur qui dirige le traffic depuis et vers la machine virtuelle sans configuration de votre part. Chaque machine virtuelle a certes accès au réseau mais pas aux autres machines virtuelles ni à la machine hôte. La machine virtuelle en mode NAT est donc comme dans un réseau privé, connectée au réseau mais invisible de l'extérieur, y compris de sa machine hôte.

On peut s'en convaincre facilement avec la commande ping depuis la machine virtuelle vers la machine hôte et inversement: la VM voit la machine hôte mais l'inverse n'est pas vrai.

Mais alors, si la machine hôte ne voit pas la machine virtuelle, comment faire par exemple pour se connecter en ssh à la machine virtuelle depuis la machine hôte ? De la même façon qu'avec un routeur: en utilisant la redirection de ports.

On va donc configurer le moteur réseau de VirtualBox pour que les connexions sur le port 2222 de la machine hôte soient redirigées sur le port 22 de la machine virtuelle comme ceci:

Capture-Regles_de_redirection_de_ports-1.png

Il ne me reste plus qu'à me connecter à la machine virtuelle comme ceci:

ssh -p 2222 debian@192.168.0.1

Vous noterez que j'ai choisi un port d'écoute d'une valeur supérieure à 1024 (2222) puisque le moteur de VirtualBox se met à l'écoute sur la machine hôte sans avoir les droits administrateurs. Utiliser un port inférieur à 1024 aurait échoué.

Si maintenant je souhaite accéder à un serveur Web démarré sur la machine virtuelle, il faut effectuer une deuxième redirection de port, et ainsi de suite.

dimanche 19 mars 2017

Transmettre une variable d'environnement à une connexion ssh

J'ai besoin pour faire des tests de connaitre l'adresse IP de l'hôte qui héberge une machine virtuelle.

Comme je me connecte à cette machine virtuelle par ssh, je vais lui transmettre cette adresse IP via une variable d'environnement.

Pour cela, j'ai besoin de spécifier le nom de la variable d'environnement coté hôte. On l'appelera HOST_IP.

Cela peut se faire de deux façons:

Dans le fichier /etc/ssh/ssh_config via la directive:

SendEnv HOST_IP

En fait on changera la ligne existante:

SendEnv LANG LC_*

en

SendEnv LANG LC_* HOST_IP

On peut aussi spécifier le nom de la variable sur la ligne de commande ssh:

ssh -o SendEnv=HOST_IP user@machine...

Pour que cela fonctionne, il faut maintenant que la machine virtuelle accepte cette variable d'environnement.

Pour cela on changera dans le fichier /etc/ssh/sshd_config de la VM la ligne:

AcceptEnv LANG LC_*

en

AcceptEnv LANG LC_* HOST_IP

Et on redémarre le serveur ssh.

mardi 14 mars 2017

Création des utilisateurs en mode graphique avec Mate

Pour créer un nouvel utilisateur sous Linux, les habitués de Gnome savent qu'une interface graphique existe pour cela, elle est nommée "Utilisateurs et groupes" et figure dans la section "Système" des paramètres.

Avec Mate qui est pourtant un fork de Gnome 2, rien de cela par défaut ... En fait l'interface users-admin existe bel et bien aussi sur Mate mais elle n'est pas installée par défaut.

Pour créer des utilisateurs en mode graphique avec Mate, il faut donc installer le paquet mate-system-tools et le centre de contrôle aura alors l'aspect suivant:

Capture-Centre_de_controle-1.png

Le paquet mate-system-tools aura ajouté 3 programmes à notre système:

  • Date et heure
  • Services
  • Utilisateurs et groupes

C'est quand même un peu plus commode comme ça !

lundi 23 janvier 2017

Monter disques et clés usb sans être administrateur avec udisksctl

Sous Linux, les médias amovibles sont généralement montés par un clic depuis l'environnement graphique, celui-ci effectue alors le montage en tant qu'utilisateur avec toutes les options nécessaires après avoir créé un point de montage.

Cette façon de faire présente les avantages suivants:

  • Il n'est pas besoin d'être administrateur, i.e. root pour effectuer le montage
  • Le point de montage est créé pour nous
  • Les options de montage sont positionnées pour nous, en particulier celles qui font que le média est en lecture/écriture pour l'utilisateur et non uniquement pour root

L'autre façon de faire étant de passer une commande mount en root avec toutes les options utiles.

Pour monter un média amovible depuis un terminal à la façon de faire de l'environnement graphique, on peut utiliser la commande udisksctl.

Il suffit pour cela de connaître le device du média ou clé USB:

user@machine:~$ udisksctl mount -b /dev/sdc1
Mounted /dev/sdc1 at /media/user/my-data.

On peut aussi utiliser l'option longue:

user@machine:~$ udisksctl mount --block-device /dev/sdc1
Mounted /dev/sdc1 at /media/user/my-data.

Et vous aurez remarqué que je ne suis pas connecté en root.

Vérifions que les options de montage sont correctes:

user@machine:~$ mount | grep sdc
/dev/sdc1 on /media/user/my-data type vfat (rw,nosuid,nodev,relatime,uid=1000,gid=1000,fmask=0022,dmask=0077,codepage=437,iocharset=utf8,shortname=mixed,showexec,utf8,flush,errors=remount-ro,uhelper=udisks2)

Un montage depuis un clic avec Mate n'aurait pas fait mieux.

Et pour démonter ce volume:

user@machine:~$ udisksctl unmount -b /dev/sdc1
Unmounted /dev/sdc1.

Ces commandes sont évidemment utilisables dans un script même si la manpage d'udisksctl ne le recommande pas.

- page 2 de 12 -