Inoor

Adaptar les MVs perquè puguin ser compatibles amb vagrant

Adaptar les MVs perquè puguin ser compatibles amb Vagrant

Guió VagrantMVs

GUIÓ DE LES MVs · INSTITUT CASTELL DE BISBAL

Nom de la tasca

Adaptar les MVs perquè puguin ser compatibles amb Vagrant

Com preparar cinc màquines virtuals perquè Vagrant les pugui gestionar, amb les proves i els problemes trobats.

Equip 8

Justificació

Vagrant no instal·la sistemes operatius: crea i controla màquines virtuals que ja existeixen. Per fer-ho sense intervenció manual necessita entrar a la MV, executar ordres i apagar-la. Per això cada MV s’ha de preparar abans, i cada configuració té una raó concreta.

ConfiguracióPer què la necessita Vagrant
Servidor SSH (ssh / sshd)És el canal que Vagrant fa servir per connectar-se a la MV, executar ordres i llançar el provisionament. Sense SSH, Vagrant es queda esperant que la MV arrenqui i acaba donant error de temps d’espera.
Servei SSH actiu i automàticLa MV s’inicia i s’apaga moltes vegades. Si el servei no arrenca sol, Vagrant no podrà entrar després de cada reinici.
Usuari vagrantÉs l’usuari que Vagrant espera trobar per defecte. Així el mateix Vagrantfile funciona igual a Windows, Debian, Ubuntu o Rocky Linux.
Clau pública de Vagrant a authorized_keysPermet iniciar sessió sense contrasenya, de manera automàtica. Vagrant la fa servir en el primer arrencament.
Permisos 700 a .ssh i 600 a authorized_keys (Linux)SSH rebutja la clau si els permisos són massa oberts. Sense aquests permisos la connexió falla encara que la clau sigui correcta.
sudo sense contrasenya (Linux)El provisionament executa ordres amb privilegis elevats. Si sudo demana contrasenya, el procés es bloqueja perquè no hi ha ningú per escriure-la.
Crear C:\Users\vagrant\.ssh abans de descarregar la clau (Windows)Si la ruta no existeix, la descàrrega falla o es crea una carpeta mal formada, i Vagrant no troba la clau.
Desactivar WSUS (Windows)La política WSUS impedia instal·lar OpenSSH. Sense OpenSSH no hi ha SSH, i sense SSH Vagrant no pot gestionar la MV.
Apagar la MV al finalLa MV queda en un estat net i tancat, a punt per ser utilitzada per Vagrant.

Implementació

Les configuracions s’han aplicat a les cinc MVs. A cada secció (MV 1 a MV 5) hi ha el codi exacte que s’ha executat i les captures com a evidència.

ConfiguracióMV 1
Win 10
MV 2
Win Server
MV 3
Debian
MV 4
Ubuntu
MV 5
Rocky
Servidor SSH instal·lat✔✔✔✔✔
Servei SSH actiu i automàtic✔✔✔✔✔
Usuari vagrant✔✔✔✔✔
Clau pública de Vagrant✔✔✔✔✔
Permisos correctes a .ssh––✔✔✔
sudo sense contrasenya––✔✔✔
Correcció WSUS✔✔–––
MV apagada al final✔✔✔✔✔

El guió “–” vol dir que aquella configuració no s’aplica a aquest sistema operatiu.

Resum de les 5 MVs

Totes les MVs es configuren amb l’usuari vagrant i un servei SSH actiu. Vagrant necessita aquests elements per poder gestionar-les.

MVSistema operatiuUsuari de configuracióServei SSH
MV 1Windows 10vagrantsshd
MV 2Windows Server 2019vagrantsshd
MV 3Debianvagrantssh
MV 4Ubuntuvagrantssh
MV 5Rocky Linuxvagrantssh / sshd
1

MV 1: Windows 10

S’executa: PowerShell com a Administrador dins de Windows 10.

Aquesta MV necessita el servidor OpenSSH, el servei sshd en marxa i la clau pública de Vagrant a la carpeta de l’usuari vagrant. Això permet que Vagrant entri sense contrasenya.

Codi utilitzat
# 1. Desactivar WSUS i instal·lar el servidor OpenSSH
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v UseWUServer /t REG_DWORD /d 0 /f
Get-Service wuauserv | Restart-Service
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

# 2. Activar i iniciar el servei SSH
Start-Service sshd
Set-Service -Name sshd -StartupType 'Automatic'

# 3. Crear directori de l'usuari vagrant i injectar la clau pública
New-Item -Path "C:\Users\vagrant" -ItemType Directory -Force
New-Item -Path "C:\Users\vagrant\.ssh" -ItemType Directory -Force
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/hashicorp/vagrant/master/keys/vagrant.pub" -OutFile "C:\Users\vagrant\.ssh\authorized_keys" -UseBasicParsing

# 4. Comprovar la clau i apagar
Get-Item C:\Users\vagrant\.ssh\authorized_keys
Stop-Computer
Windows 10: captura 1
Windows 10 – captura 1
Windows 10: captura 2
Windows 10 – captura 2
2

MV 2: Windows Server 2019

MV2k19. S’executa: PowerShell com a Administrador dins de Windows Server 2019.

Els passos són els mateixos que a Windows 10: OpenSSH, servei sshd i clau pública de Vagrant.

Codi utilitzat
# 1. Desactivar WSUS i instal·lar el servidor OpenSSH
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v UseWUServer /t REG_DWORD /d 0 /f
Get-Service wuauserv | Restart-Service
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

# 2. Activar i iniciar el servei SSH
Start-Service sshd
Set-Service -Name sshd -StartupType 'Automatic'

# 3. Crear directori de l'usuari vagrant i injectar la clau pública
New-Item -Path "C:\Users\vagrant" -ItemType Directory -Force
New-Item -Path "C:\Users\vagrant\.ssh" -ItemType Directory -Force
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/hashicorp/vagrant/master/keys/vagrant.pub" -OutFile "C:\Users\vagrant\.ssh\authorized_keys" -UseBasicParsing

# 4. Comprovar la clau i apagar
Get-Item C:\Users\vagrant\.ssh\authorized_keys
Stop-Computer
Captura 1 de Windows Server 2019
(pendent d’afegir)
Captura 2 de Windows Server 2019
(pendent d’afegir)
3

MV 3: Debian

S’executa: terminal com a root o sudo dins de la MV Debian.

Instal·lem el servidor SSH, creem l’usuari vagrant amb sudo sense contrasenya i hi afegim la clau pública amb els permisos correctes.

Codi utilitzat
# 1. Actualitzar repositoris e instal·lar OpenSSH Server
sudo apt update && sudo apt install -y openssh-server curl
sudo systemctl enable --now ssh

# 2. Crear l'usuari vagrant i donar permisos sudo sense contrasenya
sudo useradd -m -s /bin/bash vagrant
echo "vagrant:vagrant" | sudo chpasswd
echo "vagrant ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/vagrant

# 3. Injectar la clau pública de Vagrant amb permisos correctes
sudo mkdir -p /home/vagrant/.ssh
sudo chmod 700 /home/vagrant/.ssh
curl -sSL https://raw.githubusercontent.com/hashicorp/vagrant/master/keys/vagrant.pub | sudo tee /home/vagrant/.ssh/authorized_keys
sudo chmod 600 /home/vagrant/.ssh/authorized_keys
sudo chown -R vagrant:vagrant /home/vagrant/.ssh

# 4. Apagar la MV
sudo poweroff
Debian: captura 1
Debian – captura 1
Debian: captura 2
Debian – captura 2
Debian: captura 3
Debian – captura 3
Debian: captura 4
Debian – captura 4
4

MV 4: Ubuntu

S’executa: terminal com a root o sudo dins de la MV Ubuntu.

El procés és idèntic al de Debian, ja que tots dos fan servir apt i el servei ssh.

Codi utilitzat
# 1. Actualitzar repositoris e instal·lar OpenSSH Server
sudo apt update && sudo apt install -y openssh-server curl
sudo systemctl enable --now ssh

# 2. Crear l'usuari vagrant i donar permisos sudo sense contrasenya
sudo useradd -m -s /bin/bash vagrant
echo "vagrant:vagrant" | sudo chpasswd
echo "vagrant ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/vagrant

# 3. Injectar la clau pública de Vagrant amb permisos correctes
sudo mkdir -p /home/vagrant/.ssh
sudo chmod 700 /home/vagrant/.ssh
curl -sSL https://raw.githubusercontent.com/hashicorp/vagrant/master/keys/vagrant.pub | sudo tee /home/vagrant/.ssh/authorized_keys
sudo chmod 600 /home/vagrant/.ssh/authorized_keys
sudo chown -R vagrant:vagrant /home/vagrant/.ssh

# 4. Apagar la MV
sudo poweroff
Ubuntu: captura 1
Ubuntu – captura 1
Ubuntu: captura 2
Ubuntu – captura 2
5

MV 5: Rocky Linux

S’executa: terminal com a root o sudo dins de la MV Rocky Linux.

Rocky Linux fa servir dnf com a gestor de paquets i el servei s’anomena sshd. La resta del procés és igual que a Debian i Ubuntu.

Codi utilitzat
# 1. Actualitzar repositoris e instal·lar OpenSSH Server i Curl
sudo dnf check-update
sudo dnf install -y openssh-server curl
sudo systemctl enable --now sshd

# 2. Crear l'usuari vagrant i donar permisos sudo sense contrasenya
sudo useradd -m -s /bin/bash vagrant
echo "vagrant:vagrant" | sudo chpasswd
echo "vagrant ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/vagrant

# 3. Injectar la clau pública de Vagrant amb permisos correctes
sudo mkdir -p /home/vagrant/.ssh
sudo chmod 700 /home/vagrant/.ssh
curl -sSL https://raw.githubusercontent.com/hashicorp/vagrant/master/keys/vagrant.pub | sudo tee /home/vagrant/.ssh/authorized_keys
sudo chmod 600 /home/vagrant/.ssh/authorized_keys
sudo chown -R vagrant:vagrant /home/vagrant/.ssh

# 4. Apagar la màquina virtual
sudo poweroff
Rocky Linux: captura 1
Rocky Linux – captura 1
Rocky Linux: captura 2
Rocky Linux – captura 2
Rocky Linux: captura 3
Rocky Linux – captura 3

Problemes trobats i solucions

Durant el procés van aparèixer diversos errors. Aquí expliquem què va passar i com es van resoldre.

1. Bloqueig d’instal·lació d’OpenSSH per política WSUS

Windows 10 i Windows Server 2019

Problema: en instal·lar OpenSSH.Server amb Add-WindowsCapability, Windows buscava el paquet al servidor d’actualitzacions local (WSUS) i fallava amb un error de política de directiva de grup.

Solució (PowerShell Admin):

# 1. Desactivar temporalment l'ús del servidor WSUS al registre
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v UseWUServer /t REG_DWORD /d 0 /f

# 2. Reiniciar el servei de Windows Update per aplicar el canvi
Get-Service wuauserv | Restart-Service

# 3. Reintentar la instal·lació d'OpenSSH directament des dels servidors de Microsoft
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

2. Error en descarregar la clau SSH (DirectoryNotFoundException)

Windows 10 i Windows Server 2019

Problema: en executar Invoke-WebRequest per desar la clau pública a C:\Users\vagrant\.ssh\authorized_keys, PowerShell tornava l’error Could not find a part of the path o creava una carpeta mal formada anomenada vagrant.ssh a C:\Users, perquè el directori pare no existia.

Solució (PowerShell Admin):

# Crear l'estructura completa de directoris forçadament abans de descarregar
New-Item -Path "C:\Users\vagrant" -ItemType Directory -Force
New-Item -Path "C:\Users\vagrant\.ssh" -ItemType Directory -Force

# Descarregar la clau pública sense utilitzar l'interfície d'Internet Explorer
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/hashicorp/vagrant/master/keys/vagrant.pub" -OutFile "C:\Users\vagrant\.ssh\authorized_keys" -UseBasicParsing

# Verificar que el fitxer existeix i té la mida correcta (~409 bytes)
Get-Item C:\Users\vagrant\.ssh\authorized_keys

3. Permisos incorrectes al directori .ssh i a authorized_keys

Debian, Ubuntu i Rocky Linux

Problema: si el directori .ssh o el fitxer authorized_keys tenen permisos massa oberts (com 777 o 755), el dimoni SSH rebutja la connexió per seguretat i no deixa entrar sense contrasenya.

Solució (terminal Linux dins de la MV):

# Directori .ssh amb permisos estrictes d'usuari (700)
sudo chmod 700 /home/vagrant/.ssh

# authorized_keys amb lectura/escriptura només per al propietari (600)
sudo chmod 600 /home/vagrant/.ssh/authorized_keys

# Garantir que l'usuari i grup vagrant en siguin els propietaris
sudo chown -R vagrant:vagrant /home/vagrant/.ssh

4. Demanda de contrasenya en executar ordres d’administració

Debian, Ubuntu i Rocky Linux

Problema: quan Vagrant es connecta per SSH a una MV Linux, necessita executar ordres amb privilegis elevats (sudo). Si el sistema demana contrasenya, la línia d’ordres es bloqueja o la connexió falla.

Solució (terminal Linux dins de la MV):

# Regla a sudoers perquè vagrant no hagi d'introduir contrasenya
echo "vagrant ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/vagrant

# Permisos del fitxer de sudoers per seguretat
sudo chmod 0440 /etc/sudoers.d/vagrant

5. El WiFi no funcionava

Totes les MVs

Problema: les MVs no tenien accés a Internet. Per això fallaven apt update, dnf install, Add-WindowsCapability i la descàrrega de la clau pública de Vagrant.

Causa: l’adaptador de xarxa de la MV a VirtualBox no estava ben configurat i la MV no sortia a Internet a través de la connexió WiFi de l’ordinador amfitrió.

Solució: amb la MV apagada, a VirtualBox vam anar a Configuració → Xarxa, vam activar l’adaptador i el vam posar en mode NAT (o Adaptador pont escollint la targeta WiFi de l’ordinador). Després vam reiniciar la MV i vam comprovar que hi havia connexió.

# Linux: comprovar que hi ha Internet
ping -c 4 8.8.8.8
ping -c 4 google.com

# Windows (PowerShell): comprovar que hi ha Internet
Test-Connection 8.8.8.8 -Count 4

6. La IP no estava ben configurada

Totes les MVs

Problema: la MV no tenia una adreça IP vàlida (o en tenia una fora de la xarxa correcta), així que no hi havia connexió i no es podia entrar per SSH.

Causa: la interfície de xarxa no rebia adreça per DHCP, o tenia una IP estàtica incorrecta.

Solució: vam comprovar la IP amb les ordres següents i vam configurar la interfície perquè obtingués l’adreça automàticament per DHCP. Després de reiniciar la xarxa, la MV ja tenia una IP vàlida i es podia connectar per SSH.

# Linux: veure la IP i demanar-ne una per DHCP
ip a
sudo systemctl restart NetworkManager     # Rocky Linux
sudo systemctl restart networking         # Debian
sudo netplan apply                        # Ubuntu (si usa netplan)

# Windows (PowerShell): veure la IP i renovar-la
ipconfig
ipconfig /release
ipconfig /renew

Conclusió

Les cinc MVs queden preparades per a Vagrant: tenen un servei SSH actiu, l’usuari vagrant i la clau pública injectada. Les errades més comunes van ser de xarxa (WiFi i IP), de permisos a Linux i de rutes a Windows. Resoldre-les ens ha ajudat a entendre millor com treballa Vagrant amb SSH.

Guió de MVs per a Vagrant

Take the next step to success

Many Web3 platforms are complex and have a steep learning curve, discouraging new users from entering the space.