De AI het Laten Doen
Ik had een dev server nodig: VM met SSH-toegang en dev tools geinstalleerd. Ik beschreef aan Claude Code wat ik wilde en liet het de setup regelen.
De Prompt
Ik vroeg om een Vultr VM met 8 cores en 32GB RAM, alleen toegankelijk via Tailscale, met persistente sessies die netwerkonderbrekingen overleven.
Wat Claude Code Bouwde
1. Provisioneerde de VM via Vultr API
Het creeerde een 8-core/32GB Ubuntu instantie, wachtte op de IP, en SSH’de vervolgens in als root.
2. Versterkte SSH
Port 49152 # Willekeurige hoge poort
PermitRootLogin no
PasswordAuthentication no
ListenAddress 100.x.x.x # Alleen Tailscale interface
Alleen key-gebaseerde auth, luisterend op alleen de Tailscale interface.
3. Zette drie lagen firewall op
- UFW: Weiger alle inkomend behalve Tailscale subnet
- fail2ban: Auto-ban IP’s na mislukte inlogpogingen
- Vultr firewall: Blokkeer alles op hypervisor-niveau
4. Installeerde Tailscale met SSH ingeschakeld
curl -fsSL https://tailscale.com/install.sh | sh
tailscale up --ssh --authkey=$TAILSCALE_KEY
Dit creert een tweede SSH-pad via Tailscale’s ingebouwde SSH-server, onafhankelijk van OpenSSH.
5. Installeerde de dev stack
Node.js (via nvm), Python (via pyenv), Docker, en gangbare tools. Configureerde Docker om zonder sudo te draaien.
6. Zette persistente sessies op met tmux
Een opstartscript dat automatisch opnieuw verbindt met een bestaande sessie, zodat netwerkonderbrekingen draaiende processen niet doden.
7. Creeerde lokale beheerscripts
dev-start en dev-stop scripts op mijn laptop die de VM op- en afdraaien via de Vultr API.
De Uitsluiting
Na afloop verifieerde Claude Code dat root login was uitgeschakeld door te proberen in te loggen als root. De login mislukte. fail2ban merkte de mislukte pogingen op en verbande ons.
Claude Code had Tailscale SSH opgezet als secundair pad. Het gebruikte tailscale ssh om weer binnen te komen en voerde uit:
fail2ban-client set sshd unbanip 100.x.x.x
Setup
Je hebt nodig:
- Claude Code (of vergelijkbare AI met tool use)
- Een cloud provider account (Vultr, DigitalOcean, AWS, etc.)
- Een Tailscale account
Bewaar API-sleutels als omgevingsvariabelen en refereer ze op naam (bijv., $VULTR_API_KEY) zodat secrets niet in het gesprek verschijnen.
Voorbeeld prompt:
Creeer een 8-core VM op Vultr, sluit het af zodat het alleen toegankelijk is via Tailscale, zet Node/Python/Docker op, en geef me scripts om het te starten en stoppen.