Eseguire Claude Code su un VPS: installazione, sicurezza e sessioni persistenti

11 min di lettura·Matthieu|

Configura Claude Code su un server Linux remoto con autenticazione headless, persistenza delle sessioni tramite tmux e hardening della sicurezza. Ogni comando verificato.

Eseguire Claude Code su un VPS

Claude Code è un agente di codifica basato su terminale. Legge il tuo codice sorgente, modifica file, esegue comandi e costruisce funzionalità a partire da descrizioni in linguaggio naturale. Eseguirlo su un VPS ti offre un agente di codifica persistente attivo 24/7, accessibile da qualsiasi dispositivo tramite SSH.

Questa guida ti porta da un VPS Ubuntu nuovo a un'installazione funzionante di Claude Code con persistenza delle sessioni. Ogni passaggio include un comando di verifica per confermare il successo dell'operazione.

Di cosa ha bisogno Claude Code da un VPS?

Claude Code invia i tuoi prompt ai server di Anthropic per l'inferenza. Il tuo VPS conserva solo i file del progetto, gli strumenti di sviluppo e il processo Claude Code stesso. Non servono GPU o hardware di fascia alta.

Requisito Minimo Consigliato
OS Ubuntu 20.04 LTS Ubuntu 24.04 LTS
RAM 4 GB 8 GB
Disco 20 GB SSD 40 GB NVMe
CPU 2 vCPU 4 vCPU
Rete Internet stabile Connessione a bassa latenza
Dipendenze Nessuna (installer nativo) git, ripgrep (inclusi)

L'installer nativo include ripgrep e non richiede dipendenze runtime come Node.js. Un VPS da 4 GB gestisce Claude Code e un progetto di medie dimensioni. Se lavori con monorepo di grandi dimensioni o esegui servizi aggiuntivi, scegli 8 GB.

Requisito account: Claude Code richiede un account Claude Pro, Max, Teams, Enterprise o Console. Il piano gratuito Claude.ai non include l'accesso a Claude Code.

Come proteggere un VPS prima di installare Claude Code?

Blinda il tuo server prima di installare qualsiasi cosa. Un VPS viene colpito da attacchi brute-force automatizzati entro pochi minuti dalla messa online. Questi passaggi creano un utente non root, impongono l'autenticazione con chiave SSH, configurano un firewall e attivano gli aggiornamenti di sicurezza automatici.

Se hai già un server protetto, passa direttamente a Come installare Claude Code su un server Linux?. Per una guida più dettagliata su ogni passaggio di sicurezza, consulta .

Creare un utente non root

Collegati via SSH al server come root, poi crea un utente con privilegi sudo:

ssh root@YOUR_SERVER_IP
adduser claude
usermod -aG sudo claude

Copia la tua chiave SSH al nuovo utente per accedere senza password:

mkdir -p /home/claude/.ssh
cp /root/.ssh/authorized_keys /home/claude/.ssh/authorized_keys
chown -R claude:claude /home/claude/.ssh
chmod 700 /home/claude/.ssh
chmod 600 /home/claude/.ssh/authorized_keys

Verifica di poter accedere come nuovo utente da un secondo terminale prima di proseguire. Non chiudere la sessione root:

ssh claude@YOUR_SERVER_IP

Dovresti ottenere un prompt shell come claude@yourserver. Se funziona, prosegui.

Disattivare l'autenticazione con password

Modifica la configurazione SSH per bloccare gli accessi con password:

sudo sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
sudo sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config

Riavvia SSH e verifica che le impostazioni siano state applicate:

sudo systemctl restart ssh
sudo sshd -T | grep -E 'passwordauthentication|permitrootlogin'

Output previsto (l'ordine può variare):

permitrootlogin no
passwordauthentication no

Configurare il firewall

UFW (Uncomplicated Firewall) blocca tutto il traffico in entrata tranne quello autorizzato. Su alcune immagini VPS minimali, potrebbe essere necessario installarlo prima con sudo apt install -y ufw.

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw enable

Verifica le regole:

sudo ufw status

Output previsto:

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

Installare fail2ban

fail2ban blocca gli indirizzi IP dopo ripetuti tentativi di accesso SSH falliti:

sudo apt update && sudo apt install -y fail2ban

Crea una configurazione locale per preservare le impostazioni dopo gli aggiornamenti del pacchetto:

sudo tee /etc/fail2ban/jail.local > /dev/null << 'EOF'
[sshd]
enabled = true
port = ssh
filter = sshd
maxretry = 5
bantime = 3600
findtime = 600
EOF

Attiva e verifica:

sudo systemctl enable --now fail2ban
sudo systemctl status fail2ban

Occhio all'output: deve mostrare active (running). Il flag enable --now avvia fail2ban subito e lo fa sopravvivere ai riavvii.

sudo fail2ban-client status sshd

Questo mostra che la jail è attiva con 0 IP attualmente bloccati (previsto su un'installazione nuova).

Attivare gli aggiornamenti di sicurezza automatici

Unattended-upgrades corregge le vulnerabilità di sicurezza senza intervento manuale:

sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades

Seleziona "Yes" quando richiesto. Verifica che sia attivo:

sudo systemctl status unattended-upgrades

L'output deve mostrare active (running).

Come installare Claude Code su un server Linux?

L'installer nativo è il metodo consigliato. Non richiede dipendenze, si aggiorna automaticamente in background e funziona su qualsiasi distribuzione Linux supportata. Il metodo di installazione tramite npm è deprecato.

Esegui l'installer come utente non root (non root):

curl -fsSL https://claude.ai/install.sh | bash

Questo è l'installer ufficiale di Anthropic. Se preferisci verificare prima dell'esecuzione, consulta la documentazione di installazione per i checksum SHA256 e i dettagli sulla firma del codice.

L'installer posiziona il binario in ~/.local/bin/claude e lo aggiunge al PATH. Apri una nuova shell o ricarica il profilo:

source ~/.bashrc

Verifica l'installazione:

claude --version

Dovresti vedere un numero di versione come 2.x.x. Esegui la diagnostica integrata per verificare la configurazione:

claude doctor

Questo controlla la configurazione di sistema, la connettività di rete e lo stato dell'autenticazione. A questo punto, l'autenticazione risulterà incompleta. È normale.

Come autenticare Claude Code su un VPS headless?

Claude Code normalmente apre una finestra del browser per il login OAuth. Su un server headless senza interfaccia grafica, serve un approccio diverso. Hai due opzioni in base al tipo di account.

Opzione A: chiave API da Claude Console

Se hai un account Claude Console (fatturazione basata su API), imposta la variabile d'ambiente ANTHROPIC_API_KEY. È il metodo più semplice per server headless.

Genera una chiave API su console.anthropic.com. Poi conservala in modo sicuro sul VPS:

sudo mkdir -p /etc/claude-code
sudo tee /etc/claude-code/env > /dev/null << 'EOF'
ANTHROPIC_API_KEY=sk-ant-api03-your-key-here
EOF
sudo chmod 600 /etc/claude-code/env
sudo chown claude:claude /etc/claude-code/env

Cosa fa: crea un file dedicato con permessi ristretti (solo il tuo utente può leggerlo) invece di inserire segreti nel .bashrc dove compaiono nella cronologia della shell e sono leggibili da altri processi.

Caricalo nel profilo shell. Aggiungi questa riga a ~/.bashrc:

echo 'set -a; source /etc/claude-code/env; set +a' >> ~/.bashrc
source ~/.bashrc

Verifica che la chiave sia caricata:

echo $ANTHROPIC_API_KEY | head -c 15

Dovresti vedere sk-ant-api03-xx (i primi 15 caratteri della chiave).

Opzione B: token OAuth da un abbonamento Claude

Se usi un abbonamento Claude Pro o Max (non Console), genera un token OAuth su una macchina con browser, poi trasferiscilo sul VPS.

Sulla tua macchina locale (quella con il browser):

claude setup-token

Si apre un browser per l'autenticazione OAuth e viene generato un token a lunga durata che inizia con sk-ant-oat01-. Il token è valido per un anno.

Copia il token. Poi sul tuo VPS, conservalo allo stesso modo:

sudo tee /etc/claude-code/env > /dev/null << 'EOF'
CLAUDE_CODE_OAUTH_TOKEN=sk-ant-oat01-your-token-here
EOF
sudo chmod 600 /etc/claude-code/env
sudo chown claude:claude /etc/claude-code/env

Devi anche creare ~/.claude.json per saltare la procedura guidata:

cat > ~/.claude.json << 'EOF'
{
  "hasCompletedOnboarding": true
}
EOF
chmod 600 ~/.claude.json

Caricalo nel profilo shell:

echo 'set -a; source /etc/claude-code/env; set +a' >> ~/.bashrc
source ~/.bashrc

Verificare l'autenticazione

Testa che Claude Code possa raggiungere i server di Anthropic:

claude -p "Say hello in exactly 5 words"

Il flag -p esegue un singolo prompt senza entrare in modalità interattiva. Se vedi un saluto di cinque parole, l'autenticazione funziona. Se ricevi un errore di autenticazione, verifica che la variabile d'ambiente sia impostata correttamente con env | grep -E 'ANTHROPIC_API_KEY|CLAUDE_CODE_OAUTH_TOKEN'.

Come mantenere Claude Code attivo dopo la disconnessione SSH?

Usa tmux. Crea sessioni terminale che persistono sul server indipendentemente dalla connessione SSH. Chiudi il laptop, prendi un aereo per un altro paese, riconnettiti via SSH dal telefono. La sessione è ancora lì, esattamente dove l'hai lasciata.

Installare tmux

sudo apt install -y tmux

Verifica:

tmux -V

Configurare tmux per Claude Code

Crea un .tmux.conf con impostazioni ottimizzate per sessioni di codifica prolungate:

cat > ~/.tmux.conf << 'EOF'
# Increase scrollback buffer (default is 2000 lines)
set -g history-limit 50000

# Enable mouse support for scrolling and pane selection
set -g mouse on

# Start window numbering at 1
set -g base-index 1

# Reduce escape time for faster key response
set -sg escape-time 10

# Status bar with session name and time
set -g status-right '%H:%M %d-%b'

# Keep sessions alive if the shell exits unexpectedly
set -g remain-on-exit on
EOF

Avviare una sessione Claude Code

Crea una sessione tmux con nome e avvia Claude Code al suo interno:

tmux new -s claude

Ora sei dentro una sessione tmux chiamata "claude". Avvia Claude Code:

cd ~/your-project
claude

Claude Code è in esecuzione. Per staccarti dalla sessione (lasciarla in esecuzione in background), premi:

Ctrl+B, poi D

Sei tornato al prompt SSH normale. Claude Code continua a girare dentro tmux.

Riferimento rapido tmux

Azione Comando
Creare sessione con nome tmux new -s claude
Staccarsi dalla sessione Ctrl+B, poi D
Elencare le sessioni tmux ls
Ricollegarsi a una sessione tmux attach -t claude
Eliminare una sessione tmux kill-session -t claude
Scorrere verso l'alto Ctrl+B, poi [, poi frecce
Uscire dalla modalità scorrimento q

Come ricollegarsi a una sessione Claude Code da un altro dispositivo?

Collegati via SSH al VPS da qualsiasi dispositivo e ricollegati:

ssh claude@YOUR_SERVER_IP
tmux attach -t claude

La sessione Claude Code è esattamente dove l'hai lasciata. La cronologia della conversazione, il contesto dei file e le attività in corso sono preservati. Funziona da un laptop, telefono (con un'app SSH come Termius) o un altro server.

Se la sessione è andata in crash o è stata terminata, tmux attach fallirà. Avviane una nuova:

tmux ls

Se non ci sono sessioni elencate, creane una nuova con tmux new -s claude.

Come limitare cosa può fare Claude Code sul server?

Claude Code ha un sistema di permessi che controlla quali strumenti può utilizzare. Di default, chiede conferma prima di eseguire comandi bash o modificare file. Puoi pre-approvare comandi sicuri e bloccare quelli pericolosi tramite .claude/settings.json nella directory del progetto.

Non usare mai --dangerously-skip-permissions su un server reale. Bypassa tutte le protezioni e permette a Claude Code di eseguire qualsiasi comando senza chiedere.

Configurare una whitelist dei permessi

Crea un file di configurazione a livello di progetto:

cd ~/your-project
mkdir -p .claude
cat > .claude/settings.json << 'EOF'
{
  "permissions": {
    "allow": [
      "Bash(npm run *)",
      "Bash(npm test *)",
      "Bash(git status)",
      "Bash(git diff *)",
      "Bash(git log *)",
      "Bash(git add *)",
      "Bash(git commit *)",
      "Bash(ls *)",
      "Bash(cat *)",
      "Read",
      "Bash(grep *)"
    ],
    "deny": [
      "Bash(rm -rf *)",
      "Bash(git push --force *)",
      "Bash(chmod 777 *)",
      "Bash(curl * | bash)",
      "Read(./.env)",
      "Read(./.env.*)"
    ]
  }
}
EOF

Cosa fa: l'array allow permette a Claude Code di eseguire quei comandi senza chiedere ogni volta. L'array deny blocca completamente i comandi pericolosi. Le regole seguono una precedenza deny-first: se un comando corrisponde sia ad allow che a deny, il deny prevale.

Verifica che il file sia stato creato con i permessi corretti:

ls -la .claude/settings.json

Il file deve essere leggibile dal tuo utente. Dato che questo file viene committato in git, si applica a chiunque cloni il progetto. Per override personali, usa .claude/settings.local.json (automaticamente ignorato da git).

Come monitorare le risorse del VPS?

Claude Code su un VPS da 4 GB usa tra 200 e 400 MB di RAM durante il funzionamento normale. Progetti grandi o attività concorrenti multiple aumentano il consumo. Configurare lo spazio di swap previene i kill per esaurimento memoria.

Aggiungere spazio di swap

Verifica se lo swap esiste già:

sudo swapon --show

Se l'output è vuoto, crea un file swap da 2 GB:

sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

Rendilo persistente al riavvio aggiungendolo a /etc/fstab:

echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

Verifica:

free -h

Dovresti vedere lo spazio di swap elencato. Occhio: cerca la riga Swap: che mostra 2.0Gi totali.

Controllare l'utilizzo delle risorse

Monitora memoria e CPU mentre Claude Code è in esecuzione:

htop

Se htop non è installato: sudo apt install -y htop. Osserva la barra della memoria. Claude Code dovrebbe mantenersi intorno ai 200-400 MB. Se raggiunge costantemente l'80%+ della RAM totale, considera un upgrade del VPS o la chiusura di altri servizi.

Controlla l'utilizzo del disco:

df -h /

Claude Code di per sé usa poco disco. I file del progetto e la cronologia git sono i principali consumatori.

Quanto costa eseguire Claude Code su un VPS?

Claude Code funziona con il tuo abbonamento Claude esistente senza costi aggiuntivi. Il costo mensile totale è il VPS più il piano Claude.

Tier VPS Costo mensile Piano Claude Costo piano Totale
2 vCPU, 4 GB RAM ~$5-10 Pro $20/mese $25-30/mese
4 vCPU, 8 GB RAM ~$10-20 Max $100/mese $110-120/mese
4 vCPU, 8 GB RAM ~$10-20 Console (API) A consumo per token $10-20 + utilizzo

Il piano Pro include un uso limitato di Claude Code. Il piano Max ha limiti di frequenza più alti per un uso intensivo. La fatturazione Console (API) è per token e si adatta ai team che necessitano di un controllo granulare dei costi.

Per un agente di codifica persistente che gira 24 ore su 24, il VPS da 4 GB + piano Pro a circa $25/mese è il punto di partenza.

Qualcosa è andato storto?

Claude Code non si autentica

Verifica che la variabile d'ambiente sia impostata:

env | grep -E 'ANTHROPIC_API_KEY|CLAUDE_CODE_OAUTH_TOKEN'

Se è vuota, ricarica il profilo: source ~/.bashrc. Se la variabile è impostata ma l'autenticazione fallisce, verifica che la chiave sia valida. I token OAuth scadono dopo un anno. Le chiavi API possono essere revocate dalla Console.

La sessione tmux è scomparsa

Le sessioni tmux si perdono quando il server si riavvia. Dopo un riavvio, avvia una nuova sessione:

tmux new -s claude

Per verificare se il server si è riavviato di recente:

uptime

Claude Code è lento o non risponde

Controlla la memoria disponibile:

free -h

Se la RAM è quasi piena e lo swap è molto utilizzato, Claude Code rallenterà. Termina i processi non utilizzati o aggiorna il VPS. Controlla anche la latenza di rete verso i server Anthropic:

curl -o /dev/null -s -w '%{time_total}\n' https://api.anthropic.com

Valori sotto 1 secondo sono normali. Valori più alti indicano problemi di rete tra il tuo VPS e Anthropic.

Errori di permesso negato

Se Claude Code non riesce a leggere o scrivere file, controlla la proprietà:

ls -la ~/your-project

I file devono appartenere al tuo utente (claude:claude se hai seguito questa guida). Correggi la proprietà:

sudo chown -R claude:claude ~/your-project

Controlla i log per maggiori dettagli:

journalctl -u ssh -f

Questo mostra i log SSH in tempo reale. Utile per il debug dei problemi di connessione.

Copyright 2026 Virtua.Cloud. Tutti i diritti riservati. Questo contenuto è un'opera originale del team Virtua.Cloud. La riproduzione, ripubblicazione o redistribuzione senza autorizzazione scritta è vietata.

Pronto a provare?

Distribuisci il tuo server in pochi secondi. Linux, Windows o FreeBSD.

Vedi piani VPS