SSD Nodes Learn
మార్గదర్శకాలు Matt Connorద్వారా Matt Connor · అప్‌డేట్ చేయబడింది 2026-07-25

VPSలో tmux తో Claude Code ఎలా నడపాలి

SSH సెషన్ ఆగిపోయినా Claude Code ఏజెంట్ సెషన్ చచ్చిపోకుండా Linux VPSలో tmux లోపల నడపడం ఎలా? ఇన్‌స్టాల్, సెక్యూరిటీ, విఫలమయ్యే పరిస్థితులు వివరంగా ఇక్కడ.

సమస్య ల్యాప్‌టాప్ లిడ్, CLI కాదు

మీరు ల్యాప్‌టాప్ మూసే వరకు Claude Code మీ ల్యాప్‌టాప్‌లో సజావుగా నడుస్తుంది: SSH సెషన్ మరణిస్తుంది, షెల్‌కు SIGHUP వస్తుంది, పరీక్ష నడుస్తున్న మూడవ నిమిషంలో ఉన్న ఏజెంట్ కూడా దానితో పాటు మరణిస్తుంది. ఎప్పటికీ స్లీప్ అవ్వని మెషీన్‌లో CLI నడపండి, అది కూడా మీ SSH సెషన్ చిల్డ్రన్ కాని ప్రాసెస్‌లను కలిగి ఉన్న టెర్మినల్ మల్టీప్లెక్సర్ లోపల. ఇదే మొత్తం ఉపాయం — ఇన్‌స్టాల్ కాదు, tmux అనేది బరువు మోసే భాగం.

మీరు ఏజెంట్లను నడుపుతూ వదిలేసే బాక్స్‌ను ఆపరేట్ చేయడం గురించి ఇది ఒక పేజీ. మీరు ఆన్‌లో వదిలిపెట్టగలిగే Linux సర్వర్ లేకపోతే, దీనిలో ఏదీ వర్తించదు. ఇదే ఒక్కటే నిజాయితీ పూర్వక ముందస్తు అవసరం.

tmux వాస్తవంగా ఏమి చేస్తుంది

మీరు SSH ద్వారా లాగిన్ అయినప్పుడు, sshd ఒక షెల్‌ను ఫోర్క్ చేస్తుంది. ఆ షెల్‌కు ఒక సూడో-టెర్మినల్‌ను అప్పగిస్తుంది. ఆ షెల్ నుండి మీరు ప్రారంభించే ప్రతిదీ దాని చైల్డ్ ప్రాసెస్‌గా ఉంటుంది. కనెక్షన్‌ను తుంచివేసినప్పుడు కెర్నల్ ఆ pty ను తొలగిస్తుంది. షెల్‌కు SIGHUP సిగ్నల్ వస్తుంది. అది మళ్లీ తన చైల్డ్ ప్రాసెస్‌లను ఆపేస్తుంది. ఎక్కువ సేపు నడిచే ఫోర్‌గ్రౌండ్ ప్రాసెస్‌లు మరణిస్తాయి.

tmux యాజమాన్యాన్ని వ్యతిరేకిస్తుంది. మీరు టైప్ చేసే tmux కమాండ్ ఒక థిన్ క్లయింట్. అది యూనిక్స్ సాకెట్ ద్వారా tmux సర్వర్తో మాట్లాడుతుంది. ఆ సర్వర్ మీ టెర్మినల్ నుండి వేరుగా నడుస్తుంది. సెషన్ లోపల ఉన్న షెల్‌లు ఆ సర్వర్‌కు చైల్డ్ ప్రాసెస్‌లు. అవి sshd కు చైల్డ్ ప్రాసెస్‌లు కావు. SSH కనెక్షన్‌ను తుంచివేసినప్పుడు క్లయింట్ పోతుంది. కానీ సర్వర్, సెషన్, మధ్యలో ఉన్న ఏజెంట్ నడుస్తూనే ఉంటాయి. మళ్లీ కనెక్ట్ అవ్వండి, tmux attach, మీరు అదే షెల్‌లోకి, అదే స్క్రాల్‌బ్యాక్‌తో తిరిగి వస్తారు. nohup కూడా హాంగప్‌ను తట్టుకుంటుంది. కానీ అది మళ్లీ లోపలకు వెళ్లే మార్గాన్ని ఇవ్వదు — బ్యాక్‌గ్రౌండ్‌లో ఉన్న TUI ను మీరు మళ్లీ అటాచ్ చేయలేరు. Claude Code ఇంటరాక్టివ్‌గా ఉంటుంది. tmux (లేదా screen) సరైన పరికరం.

బాక్స్ పరిమాణం నిర్ధారణ

CLI అనేది ఒక Node ప్రాసెస్. ఇది మెషీన్‌ను నింపదు. మెషీన్‌ను నింపేది ఏజెంట్ మీ తరపున నడిపేదే: ఒక బిల్డ్, పూర్తి టెస్ట్ సూట్, tsc, ఒక లాంగ్వేజ్ సర్వర్, Docker లో ఒక డేటాబేస్. పరిమాణాన్ని CLI కోసం కాకుండా టూల్‌చెయిన్ కోసం నిర్ధారించండి. మీరు ఎప్పటికీ ఉపయోగించని ప్లాన్ చేసినా కూడా swap జోడించండి. అది ఒక కఠినమైన OOM kill ను ఒక నెమ్మదైన బిల్డ్‌గా మారుస్తుంది:

sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

డిస్క్‌ను కూడా గమనించండి: రెపోలు, node_modules మరియు Docker ఇమేజ్‌లు వేగంగా పేరుకుంటాయి. మరియు టూల్‌చెయిన్ కంటైనర్‌లను దాటి పూర్తి వర్చువల్ మెషీన్‌ల వరకు వెళ్తే — ఒక KVM గెస్ట్, ఒక లోకల్ Kubernetes నోడ్ — మీరు కమిట్ చేయడానికి ముందు ప్లాన్ CPU వర్చువలైజేషన్ ఎక్స్‌టెన్షన్‌లను బహిర్గతం చేస్తుందో లేదో తనిఖీ చేయండి, ఎందుకంటే VPS పై నెస్టెడ్ వర్చువలైజేషన్‌ను నడపడం అనేది ప్రొవైడర్ మీ కోసం ప్రారంభించేది, గెస్ట్ లోపల నుండి మీరు ఆన్ చేసేది కాదు.

ముందుగా ఒక non-root వినియోగదారు

దాని స్వంత హోమ్‌తో ఒక ప్రత్యేక వినియోగదారును సృష్టించండి, మరియు మీ పబ్లిక్ కీని స్థానంలో ఉంచండి:

sudo adduser --disabled-password --gecos "" agent
sudo install -d -m 700 -o agent -g agent /home/agent/.ssh
sudo cp ~/.ssh/authorized_keys /home/agent/.ssh/authorized_keys
sudo chown agent:agent /home/agent/.ssh/authorized_keys
sudo chmod 600 /home/agent/.ssh/authorized_keys

ఉద్దేశపూర్వకంగా, agent అనేది sudo సమూహంలో లేదు. ఒక సిస్టమ్ ప్యాకేజీ అవసరమైతే, మీరే దాన్ని ఇన్‌స్టాల్ చేస్తారు. ఆ ఒక్క నిర్ణయం ఒక తప్పుడు షెల్ కమాండ్ హోస్ట్‌ను నాశనం చేయగలిగే చాలా మార్గాలను తొలగిస్తుంది.

నిరంతరం ఆన్‌లో ఉంచే సర్వర్ కోసం SSH భద్రత

పబ్లిక్ ఇంటర్నెట్‌లో రోజుమంతా అనుసంధానంగా ఉండే, మీ ఏజెంట్ మరియు సోర్స్ కోడ్‌ను కలిగి ఉండే మెషీన్‌లో పాస్‌వర్డ్ ప్రామాణీకరణ తీసుకునే ప్రమాదం తగినది కాదు. దాన్ని ఆపేయండి. Ubuntu 24.04 మరియు Debian 13లో, /etc/ssh/sshd_config అనేది /etc/ssh/sshd_config.d/*.confను కలిగి ఉంటుంది. కాబట్టి ప్రధాన కాన్ఫిగరేషన్‌ను సవరించకుండా ఒక ఫైల్‌ను జతచేయండి:

# /etc/ssh/sshd_config.d/10-hardening.conf
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin no

ధ్రువీకరించండి మరియు రీలోడ్ చేయండి — రెండవ టెర్మినల్ నుండి కొత్త సెషన్‌ను పరీక్షించేటప్పుడు మీ ప్రస్తుత సెషన్‌ను తెరిచే ఉంచండి:

sudo sshd -t && sudo systemctl restart ssh

Ubuntu 24.04లో ఒక ముఖ్యమైన వివరం: sshd సాకెట్-యాక్టివేటెడ్‌గా ఉంటుంది. ప్రామాణీకరణ సెట్టింగ్‌లు systemctl restart sshపై వర్తిస్తాయి. కానీ లిజనింగ్ Portకు మార్పుకు systemctl daemon-reload మరియు ssh.socket యొక్క రీస్టార్ట్ కూడా అవసరం.

తర్వాత ఫైర్‌వాల్. దాన్ని ఎనేబుల్ చేయడానికి ముందు SSHని అనుమతించండి. లేదంటే మీరు బయటకు లాక్ అవుతారు:

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

fail2banను స్థాపించండి. అది మీకు ఏమిటి ఇస్తుందో స్పష్టంగా అర్థం చేసుకోండి: పాస్‌వర్డ్ ప్రామాణీకరణ ఆఫ్ అయిన తర్వాత, బ్రూట్ ఫోర్స్ విధానం విజయవంతం కాదు — ఇది విఫలమైన ప్రయత్నాలను మీ జర్నల్ నుండి బయటకు పంపుతుంది.

# /etc/fail2ban/jail.local
[sshd]
enabled = true
backend = systemd
maxretry = 5
bantime = 1h

చివరగా, sudo apt install unattended-upgrades మరియు sudo dpkg-reconfigure -plow unattended-upgradesతో స్వయంచాలకంగా ప్యాచ్‌లను వర్తింపజేయండి. tmuxతో దాని పరస్పర చర్యను గమనించండి: Unattended-Upgrade::Automatic-Rebootను ఆన్ చేస్తే కర్నల్ అప్‌డేట్ బాక్స్‌ను రీబూట్ చేస్తుంది, ప్రతి సెషన్‌ను ముగించివేస్తుంది. దాన్ని ఆఫ్‌లో ఉంచండి మరియు ఏదీ మధ్యలో నడుస్తూ లేనప్పుడు మీ స్వంత షెడ్యూల్ ప్రకారం రీబూట్ చేయండి.

Ubuntu పై Node.js మరియు Claude Code ను స్థాపించండి

Claude Code అనేది ఒక Node CLI, కాబట్టి మీకు ప్రస్తుత Node అవసరం. డిస్ట్రో ప్యాకేజీ తరచుగా వెనుకబడి ఉంటుంది; Ubuntu మరియు Debian పై NodeSource అనేది సాధారణ మార్గం, మరియు ఇది సంతకం చేయబడిన రెపోను అందిస్తుంది (apt-key లేదు — ఆ టూల్ పోయింది):

curl -fsSL https://deb.nodesource.com/setup_24.x | sudo -E bash -
sudo apt install -y nodejs
node --version

ఇప్పుడు ప్రజలు తప్పు చేసే భాగం: CLI ని మీ agent యూజర్ గా స్థాపించండి, sudo npm -g తో ఎప్పుడూ కాదు. రూట్ యాజమాన్యంలోని గ్లోబల్ ప్రిఫిక్స్ తరువాత అనుమతి లోపాలను కలిగిస్తుంది మరియు npm క్యాష్‌లో రూట్ యాజమాన్యంలోని ఫైళ్లను వదిలివేస్తుంది. ముందుగా npm యొక్క ప్రిఫిక్స్‌ను యూజర్ హోమ్ వైపు పాయింట్ చేయండి:

mkdir -p ~/.npm-global
npm config set prefix ~/.npm-global
echo 'export PATH="$HOME/.npm-global/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
npm install -g @anthropic-ai/claude-code
claude --version

ఎక్స్‌పోర్ట్ ~/.bashrc లో వెళ్తుంది, ~/.profile లో కాదు, మరియు ఇది ఫైల్ పైభాగంలో ఉన్న "ఇంటరాక్టివ్‌గా అమలవుతుంటే కాకపోతే, ఏమీ చేయవద్దు" అనే గార్డ్‌కు పైన ఉండాలి: tmux నాన్-లాగిన్ షెల్‌లను ప్రారంభించవచ్చు, అవి ~/.bashrc ను చదువుతాయి మరియు ~/.profile ను దాటవేస్తాయి — ~/.profile లాగిన్ షెల్‌ల కోసం మాత్రమే అమలవుతుంది. nvm వంటి వెర్షన్ మేనేజర్ ద్వారా పెర్-యూజర్ Node అదే పనిని సాధిస్తుంది; రెండు సందర్భాల్లో లక్ష్యం ఏమిటంటే npm install -g కి sudo అవసరం ఎప్పుడూ ఉండదు. npm ఇప్పటికీ బాగానే పనిచేస్తుంది, లేదా Anthropic యొక్క నేటివ్ ఇన్‌స్టాల్ స్క్రిప్ట్‌ను ఉపయోగించండి, ఇది ప్రస్తుతం డాక్యుమెంట్ చేయబడిన డిఫాల్ట్. మీరు పేస్ట్ చేయడానికి ముందు Anthropic యొక్క ఇన్‌స్టాల్ డాక్స్‌ను తనిఖీ చేయండి — ఇన్‌స్టాల్ పద్ధతులు మారుతూ ఉంటాయి.

దాన్ని ప్రారంభించడానికి ఒక రెపో లోపల claude ను అమలు చేయండి. మొదటి అమలు మిమ్మల్ని ప్రామాణీకరణ ద్వారా నడిపిస్తుంది; హెడ్‌లెస్ బాక్స్‌కు బ్రౌజర్ లేదు, కాబట్టి ఆ ఫ్లో మీ సొంత మెషీన్‌లో తెరవడానికి మీకు ఒక URL ను మరియు టెర్మినల్‌కు తిరిగి తీసుకురావడానికి ఒక కోడ్‌ను అందిస్తుంది. (ఎన్విరాన్‌మెంట్‌లో ఒక API కీ అనేది మరొక మార్గం.) ఏ మార్గం తీసుకున్నా, ఆ ఆధారం ఇప్పుడు సర్వర్‌లో ఉంటుంది — ఇది ప్రజలు దాటవేసే భాగానికి మనల్ని తీసుకువెళ్తుంది.

ప్రభావ పరిధి చర్చ

షెల్ యాక్సెస్ ఉన్న ఏజెంట్ అనేది ఒక షెల్. అది తను నడుస్తున్న యూజర్ చదవగలిగే ప్రతిదీ చదువుతుంది, ఆ యూజర్ పుష్ చేయగలిగే చోటల్లో ఎక్కడైనా పుష్ చేస్తుంది. అది ఆ టూల్‌ను విమర్శించడం కాదు, అది దాని నిర్వచన — మరియు అందుకే అది నడుస్తున్న అకౌంట్ ఏదైనా ఒక వ్యక్తిగత సెట్టింగ్‌కన్నా ఎక్కువ ముఖ్యం.

  • ప్రత్యేక, అనుమతులు లేని యూజర్. sudo గ్రూప్ లేదు, మీ అకౌంట్‌తో పంచుకున్న హోమ్ డైరెక్టరీ లేదు.
  • సర్వర్‌లో ప్రొడక్షన్ ఆధారాలు లేవు. ప్రొడక్షన్ కీలు ఉన్న ~/.aws/credentials లేదు, ప్రొడక్షన్ నుండి కాపీ చేసిన .env లేదు, ముఖ్యమైన వాటికి రైట్ యాక్సెస్ ఉన్న డేటాబేస్ పాస్‌వర్డ్ లేదు. ఏజెంట్‌కు స్టేజింగ్ లేదా రీడ్-ఓన్లీ ఆధారం ఇవ్వండి.
  • పరిమిత టోకెన్‌లు. ఒక రిపోజిటరీకి పరిమితమైన ఫైన్-గ్రెయిన్డ్ GitHub టోకెన్; రీడ్ యాక్సెస్ సరిపోయినప్పుడు డిప్లాయ్ కీ.

Claude Code దాని అనుమతి ప్రాంప్ట్‌లను పూర్తిగా దాటవేసే ఒక ఫ్లాగ్‌ను అందిస్తుంది. ల్యాప్‌టాప్‌లో, విస్మరించదగిన ప్రాజెక్ట్‌లో, అది మీ నిర్ణయం. టోకెన్‌లు ఉన్న సర్వర్‌లో, అది తప్పుగా చదివిన ఇన్‌స్ట్రక్షన్‌కు, git push --force మధ్య ఉన్న చివరి అడ్డంకిని తొలగిస్తుంది. ఆ ఫ్లాగ్ వాస్తవానికి ఏమి మారుస్తుంది, మరియు దానితో నడిచే ఏజెంట్‌ను ఎలా నియంత్రించాలి, అంతర్గత శాండ్‌బాక్స్ నుండి విస్మరించదగిన VPS వరకు, సర్వర్‌లో Claude Codeను సురక్షితంగా నడపడంలో వివరించబడింది.

డిప్లాయ్ కీ vs SSH ఏజెంట్ ఫార్వర్డింగ్

git మీ ల్యాప్‌టాప్‌లోని కీని ఉపయోగించుకోవడానికి ssh -A చేయడం ఆకర్షణీయంగా ఉంటుంది. అది ఏమి మంజూరు చేస్తుందో అర్థం చేసుకోండి: ఏజెంట్ ఫార్వర్డింగ్ మీ లోకల్ SSH ఏజెంట్ సాకెట్‌ను సర్వర్‌లో ఆ యూజర్‌గా నడుస్తున్న ప్రాసెస్‌లకు బహిర్గతం చేస్తుంది. agentగా నడుస్తున్న ఏదైనా — ఏజెంట్ సహా — మీరు కనెక్ట్‌గా ఉన్నంత కాలం, అది చేరుకోగలిగే ఏదైనా హోస్ట్ కోసం మీ కీని సంతకం చేయమని అడగవచ్చు. అది "git ఈ ఒక్క రిపోజిటరీని పుల్ చేయనివ్వడం" కన్నా చాలా ఎక్కువ.

సర్వర్‌లో కీని జనరేట్ చేయండి, దానిని ప్రతి-రిపోజిటరీ డిప్లాయ్ కీగా రిజిస్టర్ చేయండి (ఏజెంట్‌కు పుష్ చేయాలి అయితే మాత్రమే రైట్ యాక్సెస్), మరియు సర్వర్ నుండి వచ్చిన కమిట్‌లు గుర్తించగలిగేలా git ఐడెంటిటీని సెట్ చేయండి:

ssh-keygen -t ed25519 -C "agent deploy key" -f ~/.ssh/id_ed25519_repo
cat ~/.ssh/id_ed25519_repo.pub   # paste into the repo's Deploy Keys
git config --global user.name "Agent (build box)"
git config --global user.email "agent@example.com"

tmux వర్క్‌ఫ్లో

దాన్ని ఇన్‌స్టాల్ చేయండి (sudo apt install tmux), తర్వాత కనీస ~/.tmux.conf:

set -g mouse on
set -g history-limit 50000
set -g default-terminal "tmux-256color"

నాలుగు కమాండ్‌లు రోజువారీ వాడుకను కవర్ చేస్తాయి:

tmux new -A -s claude     # attach to session "claude", creating it if absent
# ...run `claude` inside it, work normally...
# Ctrl-b then d           -> detach; everything keeps running
tmux ls                   # list sessions
tmux attach -t claude     # reattach, from this machine or any other
tmux kill-session -t claude

tmux new -A -s claude గుర్తుపెట్టుకోవలసింది — సెషన్ ఉంటే అటాచ్ అవుతుంది, లేకపోతే సృష్టిస్తుంది, కాబట్టి ఒకే కమాండ్ రోజు మొదలుపెట్టడాన్ని మరియు డ్రాప్ తర్వాత రెస్యూమ్ చేయడాన్ని కవర్ చేస్తుంది. దానికి అలయాస్ ఇవ్వండి. సెషన్ లోపల, Ctrl-b c విండోను తెరుస్తుంది, Ctrl-b n మరియు Ctrl-b p వాటిని సైకిల్ చేస్తాయి, మరియు Ctrl-b [ కాపీ మోడ్‌లోకి ప్రవేశించి వెనక్కి స్క్రోల్ చేయడానికి ఉపయోగపడుతుంది (q నిష్క్రమిస్తుంది).

మీరు ఎప్పటికీ కిల్ చేయని సెషన్‌ల గురించి తెలుసుకోవలసిన ఒక విషయం: ఏజెంట్ ప్రతి టర్న్‌లో మొత్తం సంభాషణను మళ్లీ పంపుతుంది, కాబట్టి మీరు ఒక వారం పాటు నడుపుతూ వదిలేసే ముందు దీర్ఘకాలిక Claude Code సెషన్ తన టోకెన్‌లను దేనిపై ఖర్చు చేస్తుందో చదవండి.

వైఫల్య రకాలు

"నా సెషన్ పోయింది." tmux ls అనేది no server running on /tmp/tmux-1000/default అని ప్రింట్ చేస్తుంది. దీనర్థం దాదాపు ఎల్లప్పుడూ ప్రాసెస్ ఎప్పుడూ tmux లో లేదని — మీరు SSH ద్వారా లాగిన్ అయ్యారు, claude ను నేరుగా అమలు చేశారు, మరియు డిస్‌కనెక్ట్ దాన్ని ఆపివేసింది. రికవర్ చేయడానికి ఏమీ లేదు. దీన్ని నివారించే అలవాటు: ప్రతి లాగిన్ తర్వాత tmux new -A -s <project> అనేది మొదటి కమాండ్.

పేన్ ఒక చిన్న బాక్స్‌కు కుదించబడుతుంది. tmux ఒక సెషన్‌ను అతి చిన్న అటాచ్‌డ్ క్లయింట్‌కు సర్దుబాటు చేస్తుంది, కాబట్టి వేరే మెషీన్ నుండి అటాచ్ అయి ఉన్న పాత క్లయింట్ డిస్‌ప్లేను నొక్కిపెడుతుంది. మీరు అటాచ్ అయ్యేటప్పుడు ఇతరులను బలవంతంగా బయటకు పంపండి: tmux attach -d -t claude.

ఒక బిల్డ్ Killed ప్రింట్ చేస్తుంది. ఒకే పదం, స్టాక్ ట్రేస్ లేదు. sudo dmesg -T | grep -i -E 'out of memory|killed process' తో నిర్ధారించండి — కర్నల్ OOM కిల్లర్ అతిపెద్ద ప్రాసెస్‌ను ఎంచుకుంది. Node నుండి మీరు బదులుగా FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory చూడవచ్చు. పరిష్కారాలు, వరుసగా: స్వాప్ జోడించండి (పైన), టెస్ట్ మరియు కంపైలర్ పారలలిజం‌ను పరిమితం చేయండి, Node యొక్క హీప్‌ను NODE_OPTIONS=--max-old-space-size=... తో పెంచండి, లేదా VPS పరిమాణాన్ని పెంచండి. OOM కిల్లర్ బిల్డ్ కంటే tmux సర్వర్‌ను కూడా ఎంచుకోవచ్చు, దానితో పాటు మీ సెషన్‌ను తీసుకుపోతుంది; systemd-oomd అమలులో ఉంటే, అది ఒక మొత్తం యూజర్ స్లైస్‌ను అదే ప్రభావంతో ఆపివేసే అవకాశం ఉంది.

npm error code EACCES / permission denied, mkdir '/usr/lib/node_modules/...'. రూట్ యాజమాన్యంలోని ప్రిఫిక్స్‌లోకి గ్లోబల్ ఇన్‌స్టాల్. పైన ఉన్న ~/.npm-global ప్రిఫిక్స్‌ను ఉపయోగించండి. మీరు ఇప్పటికే ఏదో ఒక సమయంలో sudo npm అమలు చేసి ఉంటే మీరు Your cache folder contains root-owned files కూడా చూడవచ్చు — sudo chown -R $(id -u):$(id -g) ~/.npm తో సరిచేయండి.

claude: command not found — కానీ కొన్నిసార్లు మాత్రమే. మీ PATH ఎక్స్‌పోర్ట్ "ఇంటరాక్టివ్‌గా అమలవుతోంటే కాదాంటే ఏమీ చేయకు" గార్డ్ కింద ~/.bashrc లో ఉంది, కాబట్టి నాన్-ఇంటరాక్టివ్ షెల్‌లు దాన్ని దాటేస్తాయి. ఆ ఎక్స్‌పోర్ట్‌ను ఆ గార్డ్ పైకి తరలించండి మరియు దాన్ని ~/.bashrc లో ఉంచండి, ~/.profile లో కాదు: tmux నాన్-లాగిన్ షెల్‌లను ప్రారంభించవచ్చు, అవి ~/.bashrc ను చదువుతాయి మరియు ~/.profile ను ఎప్పుడూ తాకవు.

అటాచ్ అయ్యాక రంగులు గజిబిజిగా ఉన్నాయి. ఒక TERM అసమానత — పైన ఉన్న default-terminal లైన్ పరిష్కారం.

రీబూట్ తర్వాత సెషన్‌లు అదృశ్యమవుతాయి. ఇది బగ్ కాదు: tmux సర్వర్ ఒక ప్రాసెస్, మరియు రీబూట్ దాన్ని ముగించివేస్తుంది. uptime తనిఖీ చేయండి.

ఇది పెరిగేకొద్దీ ఏమి పాడవుతుంది

మరిన్ని ప్రాజెక్టులు. ప్రతి రెపోకు ఒక tmux సెషన్, దాని పేరు మీద పెట్టండి; అప్పుడు tmux ls మీ డాష్‌బోర్డ్. పేరు పెట్టే నియమాన్ని వదిలేస్తే మీకు 0, 1, 2 అనే సెషన్‌లు వస్తాయి. పోర్టులు కూడా అదే విధంగా చెదిరిపోతాయి — ఆరు రెపోలు అన్నీ :3000 ను కోరుకుంటే, అదే చేతులతో పోర్టులు కేటాయించడం ఆపి, Docker Compose కింద ట్రాఫిక్ రివర్స్ ప్రాక్సీ బహుళ యాప్‌లను హోస్ట్‌నేమ్ ద్వారా రూట్ చేయడం డిస్పాచింగ్ పని చేయనివ్వడానికి సరైన సమయం.

మరిన్ని మంది వ్యక్తులు. tmux సాకెట్‌లు యూజర్‌కి ప్రత్యేకం, కాబట్టి ఒకే బాక్స్‌లో ఇద్దరు డెవలపర్లు ఒక్కొక్కరు తమ స్వంత tmux సర్వర్‌ను పొందుతారు, వారు ఒరిగిన సెషన్‌లను చూడలేరు. ఒక షేర్డ్ సాకెట్ ద్వారా ఒకే సెషన్‌ను పంచుకోవడం అంటే, అందరూ ఒకే Unix యూజర్‌గా ఒకే షెల్‌లో టైప్ చేస్తారు, దాని వల్ల వచ్చే ఆడిట్ మరియు అనుమతి పరిణామాలు ఉంటాయి. వేర్వేరు యూజర్‌లు అనేది సాధారణమైన, సరైన సమాధానం.

పర్యవేక్షణ లేని పని. tmux అనేది మీరు అటాచ్ అయ్యే ఇంటరాక్టివ్ సెషన్‌ల కోసం. ఎవరూ చూడకుండా షెడ్యూల్ ప్రకారం నడిచే జాబ్‌లు systemd యూనిట్ మరియు టైమర్‌లో చేరాలి, అక్కడ అవి లాగింగ్, రీస్టార్ట్ పాలసీ మరియు బూట్ సర్వైవల్ ఉచితంగా పొందుతాయి. క్రాన్ ఆకారంలో ఉన్న జాబ్‌ను నడపడానికి tmux ను ఉపయోగించడం అనేది ఆ జాబ్ సర్వీస్ అవ్వాలనుకుంటున్నట్లు సూచన.

ఒక చివరి గమనిక: ఏజెంట్ ప్రారంభించే డెవ్ సర్వర్‌లను 0.0.0.0 కు కాకుండా 127.0.0.1 కు బైండ్ చేయండి, ufw లో పోర్టులను తెరవకుండా వాటిని SSH టనెల్ (ssh -L 3000:127.0.0.1:3000 agent@your-server) ద్వారా చేరుకోండి. మీరు అరడజను పోర్టులను ఫార్వర్డ్ చేసిన తర్వాత, లేదా ఫోన్ మరియు ల్యాప్‌టాప్ రెండూ ఒకే ప్రివ్యూను కోరుకున్నప్పుడు, వాటి ముందు VPS లో సెల్ఫ్-హోస్టెడ్ WireGuard VPN ను ఉంచండి: డెవ్ సర్వర్‌లు ప్రైవేట్ ఇంటర్‌ఫేస్‌కు బైండ్ అవుతాయి, మరియు ufw పబ్లిక్ ఇంటర్‌ఫేస్ నుండి వచ్చే ప్రతిదాన్ని తిరస్కరిస్తూనే ఉంటుంది. మీరు ఫైర్‌వాల్‌లో రంధ్రాలు పోడిచడం ఆపినప్పుడే అది పనిచేస్తుంది.

Claude Code మాత్రమే ఎంపిక కాదు: VPS లో కోడింగ్ AI ఏజెంట్‌ను నడపడం Aider మరియు Goose లను కూడా పరిశీలిస్తుంది.

FAQ

నా SSH కనెక్షన్ తుంగిన తర్వాత Claude Code నడుస్తూనే ఉంటుందా?

మీరు దాన్ని tmux లోపల ప్రారంభించినప్పుడు మాత్రమే. SSH షెల్ నుండి నేరుగా ప్రారంభించిన ప్రాసెస్ ఆ షెల్‌కు చైల్డ్‌గా ఉంటుంది. లింక్ తుంగినప్పుడు pty మరణించినప్పుడు అది కూడా మరణిస్తుంది. tmux లోపల షెల్ డిటాచ్ అయిన tmux సర్వర్‌కు చెందినది. కాబట్టి ఏజెంట్ టాస్క్ మధ్యలో పని చేస్తూనే ఉంటుంది. tmux attach మిమ్మల్ని అదే స్క్రోల్‌బ్యాక్‌లోకి తిరిగి తీసుకువస్తుంది. ప్రతి లాగిన్ తర్వాత tmux new -A -s <project> మొదటి కమాండ్‌గా చేయండి. ఆ సమస్య తీరిపోతుంది.

నేను CLI ని sudo npm install -g తో ఇన్‌స్టాల్ చేయాలా?

లేదు. root-యాజమాన్యంలోని గ్లోబల్ ప్రిఫిక్స్ తర్వాతి ఇన్‌స్టాల్‌లలో EACCES ఎర్రర్‌లను ఇస్తుంది. npm క్యాష్‌లో root-యాజమాన్యంలోని ఫైళ్లను సృష్టిస్తుంది. npm ప్రిఫిక్స్‌ను ~/.npm-global కు సెట్ చేయండి (లేదా nvm లాంటి వర్షన్ మేనేజర్ ఉపయోగించండి). అన్‌ప్రివిలేజ్డ్ agent యూజర్‌గా ఇన్‌స్టాల్ చేయండి. ~/.npm-global/bin ను PATH పై ~/.bashrc నుండి ఎక్స్‌పోర్ట్ చేయండి. ఇది ఇంటరాక్టివ్ గార్డ్‌కు పైన ఉండాలి. మీరు ఇప్పటికే sudo npm ఒకసారి రన్ చేసి ఉంటే, క్యాష్‌ను sudo chown -R $(id -u):$(id -g) ~/.npm తో రిపేర్ చేయండి.

ఏజెంట్ నడుస్తున్న బాక్స్‌లో ssh -A ఏజెంట్ ఫార్వర్డింగ్ సురక్షితమేనా?

అది ఆ పనికి అవసరం లేనంత ఎక్కువ యాక్సెస్‌ను ఇస్తుంది. ఫార్వర్డింగ్ మీ లోకల్ SSH ఏజెంట్ సాకెట్‌ను ఆ యూజర్‌గా నడుస్తున్న ప్రతి ప్రాసెస్‌కు బహిర్గతం చేస్తుంది. కాబట్టి ఆ బాక్స్‌లో ఉన్న ఏదైనా మీ కీని చేరుకోగల ప్రతి హోస్ట్ కోసం సంతకం చేయమని అడగవచ్చు. మీరు అటాచ్‌గా ఉన్నంత కాలం అది పనిచేస్తుంది. సర్వర్‌లో ed25519 కీని జనరేట్ చేయండి. దాన్ని పర్-రిపాజిటరీ డిప్లాయ్ కీగా రిజిస్టర్ చేయండి. ఏజెంట్ నిజంగా పుష్ చేయాల్సి వస్తే మాత్రమే రైట్ యాక్సెస్ ఇవ్వండి.

నా బిల్డ్ కేవలం Killed ప్రింట్ చేస్తుంది. ఎందుకు?

స్టాక్ ట్రేస్ లేని ఒకే పదం అంటే అది కర్నల్ OOM కిల్లర్. దాన్ని sudo dmesg -T | grep -i -E 'out of memory|killed process' తో నిర్ధారించుకోండి. Node నుండి మీరు JavaScript heap out of memory చూడవచ్చు. పరిష్కారాలను క్రమంలో పాటించండి: స్వాప్‌ఫైల్ జోడించండి, టెస్ట్ మరియు కంపైలర్ పారలలిజం క్యాప్ చేయండి, NODE_OPTIONS=--max-old-space-size=... పెంచండి, తర్వాత VPS సైజు పెంచండి. OOM కిల్లర్ బిల్డ్ కంటే tmux సర్వర్‌ను ఎంచుకోవచ్చు. అప్పుడు మీ మొత్తం సెషన్ కూడా పోతుంది. దీనికి జాగ్రత్త పడండి.

tmux వద్దా లేక systemd సర్వీస్ వద్దా?

tmux మీరు అటాచ్ అయ్యే, చూసే, టైప్ చేసే ఇంటరాక్టివ్ సెషన్‌లకు సరిపోతుంది. ఏజెంట్ సెషన్ కూడా అలాగే ఉంటుంది. ఎవరూ చూడకుండా షెడ్యూల్‌పై నడిచే పని systemd యూనిట్ మరియు టైమర్‌లో ఉండాలి. అక్కడ లాగింగ్, రీస్టార్ట్ పాలసీ, బూట్ సర్వైవల్ ఉచితంగా వస్తాయి. మీరు క్రాన్ ఆకారంలో ఉన్న జాబ్‌ను రన్ చేయడానికి tmux ను ఉపయోగిస్తుంటే, ఆ జాబ్ సర్వీస్‌గా మారాలనుకుంటుంది.