Lasciare che l'IA lo Faccia

Avevo bisogno di un server di sviluppo: VM con accesso SSH e strumenti di sviluppo installati. Ho descritto a Claude Code cosa volevo e l’ho lasciato gestire la configurazione.

Il Prompt

Ho chiesto una VM Vultr con 8 core e 32GB di RAM, accessibile solo tramite Tailscale, con sessioni persistenti che sopravvivono alle interruzioni di rete.

Cosa Ha Costruito Claude Code

1. Ha provisionato la VM tramite API Vultr

Ha creato un’istanza 8-core/32GB Ubuntu, ha atteso l’IP, poi si e connesso via SSH come root.

2. Ha rafforzato SSH

Port 49152                    # Porta alta casuale
PermitRootLogin no
PasswordAuthentication no
ListenAddress 100.x.x.x       # Solo interfaccia Tailscale

Solo autenticazione basata su chiavi, in ascolto solo sull’interfaccia Tailscale.

3. Ha configurato tre livelli di firewall

4. Ha installato Tailscale con SSH abilitato

curl -fsSL https://tailscale.com/install.sh | sh
tailscale up --ssh --authkey=$TAILSCALE_KEY

Questo crea un secondo percorso SSH tramite il server SSH integrato di Tailscale, indipendente da OpenSSH.

5. Ha installato lo stack di sviluppo

Node.js (tramite nvm), Python (tramite pyenv), Docker e strumenti comuni. Ha configurato Docker per funzionare senza sudo.

6. Ha configurato sessioni persistenti con tmux

Uno script di avvio che si riconnette automaticamente a una sessione esistente, cosi le interruzioni di rete non uccidono i processi in esecuzione.

7. Ha creato script di gestione locali

Script dev-start e dev-stop sul mio laptop che accendono e spengono la VM tramite API Vultr.

Il Blocco

Dopo aver finito, Claude Code ha verificato che il login root fosse disabilitato tentando di connettersi via SSH come root. Il login e fallito. fail2ban ha notato i tentativi falliti e ci ha bannati.

Claude Code aveva configurato SSH Tailscale come percorso secondario. Ha usato tailscale ssh per rientrare e ha eseguito:

fail2ban-client set sshd unbanip 100.x.x.x

Configurazione

Avrai bisogno di:

Memorizza le chiavi API come variabili d’ambiente e referenziale per nome (es., $VULTR_API_KEY) cosi i segreti non appaiono nella conversazione.

Esempio di prompt:

Crea una VM a 8 core su Vultr, bloccala cosi che sia accessibile solo tramite Tailscale, configura Node/Python/Docker, e dammi script per avviarla e fermarla.