Déployer en 1 commande une VM Ubuntu « poste de rebond » (Vagrant + VirtualBox + GNOME + SSH LAN)
Parfait — on va le faire “comme toi” : concret, utile, lisible, et pensé pour un ingé qui veut quelque chose qui marche tout de suite.
Pourquoi ce projet (et quand l’utiliser)
Besoin récurrent : avoir rapidement une VM Linux graphique et joignable depuis ton LAN pour tester des flux, faire des démos NAC/Firewall, du troubleshooting réseau/sécu, ou bosser proprement sans polluer la machine hôte.
Objectif : vagrant up → la VM se provisionne, redémarre, puis arrive directement en GNOME, avec SSH accessible depuis ton réseau local (mode bridge).
Ce que tu obtiens
- Ubuntu 22.04 LTS (jammy) en GNOME (desktop minimal), clavier FR, timezone Europe/Paris
- Accès SSH depuis le LAN (auth mot de passe activée pour la démo)
- Guest Additions VirtualBox (redimensionnement écran, presse-papiers, etc.)
- Routage propre (Xorg activé pour perf dans VB, services stables, reboot auto en fin d’install)
Usage typique : poste de rebond pour tests réseau/sécu, PoC outillé, environnement “jetable” et reproductible.
Schéma éclair (flow)
vagrant up
├─ Télécharge/initialise la box Ubuntu
├─ Attache la VM en BRIDGE sur ton interface LAN
├─ Exécute postinstall.sh (GNOME, SSH, Guest Additions, clavier FR, timezone…)
└─ Redémarre → GNOME direct + SSH dispo sur l’IP du LAN
Prérequis
- VirtualBox à jour
- Vagrant à jour
- Une interface réseau physique (“Ethernet”, Wi-Fi possible mais moins stable selon les drivers)
- Windows/macOS/Linux — peu importe, tant que VirtualBox + Vagrant tournent
Les fichiers (copier-coller)
Crée un dossier vide (ex. ubuntu-vagrant-gui/) et mets exactement ces deux fichiers dedans.
1) Vagrantfile
# Vagrant lit ce fichier et parle à VirtualBox pour créer/démarrer/configurer la VM.
Vagrant.configure("2") do |config|
# Box Ubuntu 22.04 LTS officielle
config.vm.box = "ubuntu/jammy64"
# Nom DNS interne Vagrant (facultatif)
config.vm.hostname = "ubuntu-vagrant-gui"
# Réseau : BRIDGED = IP du LAN => joignable depuis tout le réseau
# ⚠️ Adapte "Ethernet" au nom exact de ton interface (Windows: Get-NetAdapter)
config.vm.network "public_network", bridge: "Ethernet", use_dhcp_assigned_default_route: true
# (Optionnel) IP statique si tu veux la fixer :
# config.vm.network "public_network", bridge: "Ethernet", ip: "192.168.1.50"
# Dossier partagé par défaut désactivé pour éviter permissions/CRLF
config.vm.synced_folder ".", "/vagrant", disabled: true
# Provisioning : configure la VM (GNOME, SSH, clavier FR, etc.)
config.vm.provision "shell", path: "postinstall.sh"
# VirtualBox : GUI activée, ressources et contrôleur graphique adaptés
config.vm.provider "virtualbox" do |vb|
vb.gui = true
vb.memory = 4096 # 6–8 Go si possible, GNOME aime la RAM
vb.cpus = 4
vb.customize ["modifyvm", :id, "--graphicscontroller", "vmsvga"]
vb.customize ["modifyvm", :id, "--vram", "128"]
vb.customize ["modifyvm", :id, "--accelerate3d", "on"]
end
# Message d’après démarrage
config.vm.post_up_message = <<-MSG
VM prête ! GUI : identifiant 'vagrant' / mot de passe 'vagrant'
SSH depuis le LAN : ssh vagrant@<IP-de-la-VM> (mot de passe vagrant)
MSG
end
2) postinstall.sh
#!/usr/bin/env bash
set -euxo pipefail
export DEBIAN_FRONTEND=noninteractive
echo "[*] Anticipation services: empêcher le démarrage pendant apt (évite freeze gdm3)"
echo -e '#!/bin/sh\nexit 101' | sudo tee /usr/sbin/policy-rc.d >/dev/null
sudo chmod +x /usr/sbin/policy-rc.d
echo "[*] MAJ système"
sudo apt-get update -y
sudo apt-get upgrade -y
echo "[*] Préseed: forcer gdm3 comme display manager (pas de prompt)"
echo "gdm3 shared/default-x-display-manager select gdm3" | sudo debconf-set-selections
echo "[*] Installation Desktop minimal + utilitaires"
sudo apt-get install -y \
ubuntu-desktop-minimal gdm3 \
gnome-terminal gnome-control-center gnome-shell-extension-prefs \
xorg x11-xserver-utils \
build-essential dkms linux-headers-$(uname -r) \
virtualbox-guest-utils virtualbox-guest-x11 virtualbox-guest-dkms \
openssh-server curl wget vim htop net-tools
echo "[*] SSH: autoriser l'authentification par mot de passe (démo)"
sudo mkdir -p /etc/ssh/sshd_config.d
cat <<'EOF' | sudo tee /etc/ssh/sshd_config.d/99-password-auth.conf >/dev/null
PasswordAuthentication yes
KbdInteractiveAuthentication yes
ChallengeResponseAuthentication yes
EOF
sudo systemctl enable ssh --now
echo "[*] Compte vagrant: définir le mot de passe (vagrant/vagrant)"
echo "vagrant:vagrant" | sudo chpasswd
echo "[*] Localisation: FR et Europe/Paris"
sudo timedatectl set-timezone Europe/Paris
sudo localectl set-x11-keymap fr
sudo localectl set-keymap fr || true
echo "[*] Wayland -> Xorg pour de meilleures perfs dans VirtualBox"
sudo sed -i 's/^#\?WaylandEnable=.*/WaylandEnable=false/' /etc/gdm3/custom.conf || \
echo -e "[daemon]\nWaylandEnable=false" | sudo tee /etc/gdm3/custom.conf >/dev/null
echo "[*] Cible par défaut: graphique"
sudo systemctl set-default graphical.target
sudo systemctl enable gdm3
echo "[*] Nettoyage du blocage services"
sudo rm -f /usr/sbin/policy-rc.d || true
sudo systemctl daemon-reload
echo "[*] Redémarrage dans 2s pour lancer GNOME proprement"
nohup bash -c 'sleep 2; /sbin/reboot' >/dev/null 2>&1 &
echo "[*] Post-install terminé."
exit 0
Remarque : tu peux évidemment y ajouter tes outils “habituels” (Chrome, VS Code, Wireshark, etc.). L’idée ici est de rester sobre, reproductible et rapide.
Démarrage (ultra simple)
Dans le dossier contenant les deux fichiers :
vagrant up
- Premier run : il provisionne la VM (ça peut prendre quelques minutes), puis reboot.
- Au retour, tu seras sur GNOME (login
vagrant/vagrant). - Trouver l’IP LAN : Paramètres réseau GNOME ou
ip -4 a. - SSH depuis ton PC :
ssh vagrant@<IP>(mdpvagrant).
Commandes utiles :
vagrant ssh # console directe
vagrant halt # arrêt propre
vagrant destroy -f && vagrant up # reset from scratch
Explication “humaine” des choix (et ce que ça change pour toi)
Bridge (public_network)
But : que ta VM soit une vraie machine du LAN (MAC + IP du réseau), utile pour tests NAC, ACL Firewall, trafic Est/Ouest, etc.
Implication : elle est visible sur le LAN (bien pour les labos/démos, à cadrer en prod).
Astuce : si Vagrant te demande quel adaptateur bridger, choisis l’interface physique qui sort sur ton LAN. Tu peux aussi fixer le nom dans le Vagrantfile (bridge: "Intel(R) Ethernet...").
GNOME + Xorg
Pourquoi pas Wayland ? Dans VirtualBox, Xorg reste plus stable/fluid pour le resize, le clipboard et l’accélération 3D. D’où WaylandEnable=false.
Guest Additions via paquets
Pour éviter l’ISO manuelle : on installe virtualbox-guest-* depuis Ubuntu. Suffisant pour resize écran & co.
SSH mot de passe = volontaire (démo)
Rapide pour accéder depuis n’importe quel poste de ton LAN. En production, passe aux clés et désactive l’auth par mot de passe.
Synced folder désactivé
Au début, ça évite les soucis de droits/CRLF (classique sous Windows). Tu réactives plus tard si besoin (RSYNC/SMB).
Dépannage express (les 5 cas qu’on voit tout le temps)
- Pas de GUI après
vagrant up? → Attends ~1–2 min (reboot programmé). Si besoin :vagrant reload. - Vagrant me demande toujours de choisir l’interface bridge → Dans le Vagrantfile, remplace
bridge: "Ethernet"par le nom exact de ton interface. - Pas d’IP LAN → Vérifie que le réseau d’entreprise autorise le bridge (certains Wi-Fi/802.1X bloquent). Essaie sur l’interface filaire.
- Clavier encore en QWERTY à l’écran de login → Une fois logué,
sudo localectl set-x11-keymap frpuis reboot. - SSH refuse / PasswordAuthentication ignoré → Vérifie
sshd_config.d/99-password-auth.conf:sudo sshd -T | grep -E '(passwordauthentication|challenge)'doit renvoyeryes.
Sécurité (parce que tu penses déjà à ça)
- Bridge = exposé sur le LAN : c’est le but pour tester les flux, mais garde la tête froide (et un pare-feu si tu la laisses allumée).
- SSH : en démo c’est OK en mot de passe, mais en réel → clés, bannir
PasswordAuthentication, limiterMaxAuthTries, et fail2ban. - Tu peux figer une IP statique pour tracer les flux dans tes outils (FAZ, SIEM…).
Roadmap / variantes
- Multi-VM (Ubuntu + Kali) sur le même LAN pour CTF/lab.
- Provisioning Ansible (idempotent, rôles) quand tu veux industrialiser.
- Packer si tu veux une box custom “prête-à-servir” (plus rapide que d’installer GNOME à chaque fois).
TL;DR exécutable
# 1) Crée un dossier et copie Vagrantfile + postinstall.sh
# 2) Démarre
vagrant up
# 3) Connecte-toi
ssh vagrant@<IP-LAN> # mdp: vagrant
# 4) Stop / reset quand tu veux
vagrant halt
vagrant destroy -f && vagrant up