SSD Nodes Learn
கல்வி வழிகாட்டிகள் Matt Connorஆல் Matt Connor · புதுப்பிக்கப்பட்டது 2026-07-25

VPS-ல் tmux உடன் Claude Code இயக்குவது எப்படி

SSH துண்டிக்கப்பட்டால் agent நின்றுபோகும். tmux உள்ளே Claude Code இயக்கி, அமர்வுகளைத் தக்கவைப்பது எப்படி என்பதன் முழு வழிமுறை இங்கே. நிறுவல், பாதுகாப்பு, தோல்வி நிலைகள் விளக்கம்.

பிரச்சினை மடிக்கணினியின் மூடி, CLI அல்ல

நீங்கள் மடிக்கணினியை மூடும் வரை Claude Code சரியாக இயங்கும்: SSH அமர்வு துண்டிக்கப்படுகிறது, shell ஒரு SIGHUP பெறுகிறது, மேலும் சோதனை ஓட்டத்தில் மூன்று நிமிடங்கள் சென்ற நிலையில் இருக்கும் agentம் அதனுடன் சேர்ந்து நின்றுபோகிறது. ஒருபோதும் உறக்கநிலைக்குச் செல்லாத கணினியில், உங்கள் SSH அமர்வின் சேய் செயல்முறைகள் அல்லாத ஒரு terminal multiplexerக்குள் CLIஐ இயக்குங்கள். இதுதான் முழு உத்தியும் — மேலும் நிறுவல் அல்ல, tmuxதான் பளு தாங்கும் பகுதி.

இந்தப் பக்கம் நீங்கள் agentகளை இயக்கிவிட்டு விட்டுச் செல்லும் கணினி ஒன்றை இயக்குவதைப் பற்றியது. நீங்கள் இயக்கியபடி விட்டுச் செல்லக்கூடிய ஒரு Linux சேவைக்கணினி இல்லையென்றால், இதில் எதுவும் பொருந்தாது. இதுதான் ஒரே உண்மையான முன்நிபந்தனை.

tmux உண்மையில் என்ன செய்கிறது

நீங்கள் SSH வழியாக உள்நுழையும்போது, sshd ஒரு shell-ஐ fork செய்து அதற்கு ஒரு pseudo-terminal-ஐ வழங்குகிறது. அந்த shell-லிருந்து நீங்கள் தொடங்கும் அனைத்தும் அதன் child process-களாக இருக்கும். இணைப்பைத் துண்டித்தால் kernel அந்த pty-ஐ அழிக்கிறது. shell-க்கு SIGHUP கிடைக்கிறது. அது தன் child process-களையும் தொடர்ந்து நிறுத்துகிறது. நீண்ட நேரம் இயங்கும் foreground process-கள் முடிந்துபோகின்றன.

tmux இந்த உரிமையைத் தலைகீழாக மாற்றுகிறது. நீங்கள் தட்டச்சு செய்யும் tmux கட்டளை ஒரு thin client ஆகும். இது உங்கள் terminal-லிருந்து பிரிந்து இயங்கும் ஒரு tmux server-உடன் unix socket வழியாக உரையாடுகிறது. ஒரு session-ல் உள்ள shell-கள் அந்த server-ன் child process-கள். அவை sshd-ன் child process-கள் அல்ல. SSH இணைப்பைத் துண்டித்தால் client மறைந்துவிடும். ஆனால் server, session மற்றும் பணியின் நடுவே இருக்கும் agent தொடர்ந்து இயங்கும். மீண்டும் இணைந்து, tmux attach செய்தால் நீங்கள் அதே shell-ல் அதே scrollback-உடன் திரும்புவீர்கள். nohup-ம் hangup-ஐ தாங்குகிறது. ஆனால் உள்ளே மீண்டும் நுழைய வழி தராது — background-ல் இயங்கும் ஒரு TUI-க்கு நீங்கள் re-attach செய்ய முடியாது. 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 பயனர்

தனிப்பட்ட home கொண்ட ஒரு பிரத்தியேக பயனரை உருவாக்குங்கள், மேலும் உங்கள் public key-ஐ இடத்தில் வையுங்கள்:

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 குழுவில் இல்லை. ஒரு system package தேவைப்பட்டால், நீங்களே அதை நிறுவுகிறீர்கள். அந்த ஒரு முடிவு, தவறுதலாக இயங்கும் ஒரு shell command ஹோஸ்ட்டை சேதப்படுத்தக்கூடிய பெரும்பாலான வழிகளை நீக்குகிறது.

தொடர்ந்து இயங்கும் ஒரு சேவையகத்திற்கான SSH பாதுகாப்பு நடவடிக்கைகள்

அனைத்து நேரங்களிலும் பொது இணையத்தில் இயங்கும், உங்கள் agent மற்றும் மூல நிரலைக் கொண்டிருக்கும் ஒரு கணினியில் கடவுச்சொல் அங்கீகாரம் என்பது ஏற்றுக்கொள்ளத்தக்க ஆபத்து அல்ல. அதை முடக்கவும். 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 ஆனது socket-activated ஆகும். அங்கீகார அமைப்புகள் 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 ஐ நிறுவ வேண்டும் என்பதில் தெளிவாக இருக்கவும்: கடவுச்சொல் அங்கீகாரம் முடக்கப்பட்டவுடன், brute force தாக்குதல் வெற்றிபெற முடியாது — இது உங்கள் journal இல் தோல்வியடைந்த முயற்சிகள் பதிவாவதைத் தடுக்கிறது.

# /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 ஐ இயக்கினால், kernel புதுப்பித்தல் கணினியை மறுதொடக்கம் செய்யும். அப்போது அனைத்து அமர்வுகளும் முடிவடையும். அதை முடக்கிவிட்டு, எதுவும் இயங்கிக்கொண்டிருக்காத போது, உங்கள் சொந்த நேரக்கட்டணையில் மறுதொடக்கம் செய்யவும்.

Ubuntu-ல் Node.js மற்றும் Claude Code-ஐ நிறுவுதல்

Claude Code என்பது ஒரு Node CLI. எனவே நடப்பு Node பதிப்பு தேவை. விநியோகப் பேக்கேஜ் பெரும்பாலும் பழையதாக இருக்கும். Ubuntu மற்றும் Debian-ல் NodeSource வழக்கமான வழியாகும். இது ஒரு கையொப்பமிடப்பட்ட repo-ஐ வழங்குகிறது (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 உடன் ஒருபோதும் நிறுவ வேண்டாம். root-க்குச் சொந்தமான global prefix பின்னர் அனுமதிப் பிழைகளை உருவாக்குகிறது. மேலும் npm cache-ல் root-க்குச் சொந்தமான கோப்புகளை விட்டுச் செல்கிறது. முதலில் npm-ன் prefix-ஐ பயனரின் home-ஐ நோக்கி அமைக்கவும்:

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

export கட்டளை ~/.bashrc-ல் செல்ல வேண்டும், ~/.profile-ல் அல்ல. இது கோப்பின் மேற்பகுதியில் உள்ள "If not running interactively, don't do anything" என்ற பாதுகாப்புக்கு மேலே இருக்க வேண்டும். tmux non-login shell-களைத் தொடங்கலாம். அவை ~/.bashrc-ஐப் படித்து ~/.profile-ஐத் தவறவிடும் — ஏனெனில் ~/.profile login shell-களுக்கு மட்டுமே இயங்கும். nvm போன்ற version manager மூலம் பயனருக்கான Node இதே பலனைத் தரும். இரண்டு வழிகளின் குறிக்கோளும் ஒன்றே: npm install -g-க்கு sudo ஒருபோதும் தேவையில்லை. npm சரியாகவே வேலை செய்யும். அல்லது Anthropic-ன் native install script-ஐப் பயன்படுத்தவும். அதுதான் தற்போது ஆவணப்படுத்தப்பட்ட இயல்புநிலை. நீங்கள் ஒட்டுவதற்கு முன் Anthropic-ன் நிறுவல் ஆவணங்களைச் சரிபார்க்கவும் — நிறுவல் முறைகள் மாறும்.

ஒரு repo-க்குள் claude-ஐ இயக்கி அதைத் தொடங்கவும். முதல் இயக்கம் அங்கீகாரத்திற்கு உங்களை வழிநடாத்தும். headless box-ல் browser இல்லை. எனவே இந்தச் செயல்முறை உங்கள் கணினியில் திறக்க ஒரு URL-ஐயும், terminal-க்கு மீண்டும் கொண்டுவர ஒரு குறியீட்டையும் தரும். (சூழலில் ஒரு API key இருப்பது மற்றொரு வழி.) இரண்டு வழிகளிலும், அந்தச் சான்றாணை இப்போது server-ல் இருக்கும் — இது மக்கள் தவறவிடும் பகுதிக்கு எங்களை அழைத்துச் செல்கிறது.

தாக்குதல் பரப்பு உரையாடல்

ஷெல் அணுகல் கொண்ட ஒரு முகவர் ஒரு ஷெல்லாகவே செயல்படுகிறது. அது இயங்கும் பயனர் படிக்கக்கூடிய அனைத்தையும் அது படிக்க முடியும். அந்தப் பயனர் தள்ளக்கூடிய எங்கும் அது தள்ள முடியும். இது கருவியை விமர்சிப்பது அல்ல. இது அதன் வரையறை. எனவேதான், அது இயங்கும் கணக்கு, எந்தத் தனிப்பட்ட அமைப்பை விடவும் முக்கியமானது.

  • நிலையான, சலுகை இல்லாத பயனர். sudo குழு இருக்கக் கூடாது. உங்கள் சொந்தக் கணக்குடன் பகிரப்பட்ட home directory இருக்கக் கூடாது.
  • சேவைப்பெட்டியில் உற்பத்தி சான்றாதாரங்கள் இருக்கக் கூடாது. உற்பத்தி விசைகளைக் கொண்ட ~/.aws/credentials இருக்கக் கூடாது. உற்பத்தியிலிருந்து நகலெடுக்கப்பட்ட .env இருக்கக் கூடாது. முக்கியமான எதையும் எழுத அனுமதி கொண்ட தரவுத்தள கடவுச்சொல் இருக்கக் கூடாது. முகவருக்கு ஒரு staging அல்லது படிக்க மட்டுமே அனுமதிக்கும் சான்றாதாரத்தைக் கொடுக்கவும்.
  • வரம்பிடப்பட்ட tokens. ஒரு களஞ்சியத்திற்கு மட்டும் வரம்பிடப்பட்ட நுணுக்கமான GitHub token. படிக்க மட்டும் போதுமானதாக இருந்தால் ஒரு deploy key.

Claude Code அதன் அனுமதி கேள்விகளை முற்றிலும் தவிர்க்கும் ஒரு flag வழங்குகிறது. மடிக்கணினியில், ஒரு தற்காலிக திட்டத்தில், அது உங்கள் முடிவு. tokens வைத்திருக்கும் சேவைப்பெட்டியில், அது தவறாகப் புரிந்துகொள்ளப்பட்ட ஒரு கட்டளைக்கும் ஒரு git push --force க்கும் இடையில் நிற்கும் கடைசி தடையை அது நீக்குகிறது. அந்த flag உண்மையில் என்ன மாற்றுகிறது, அது இயங்கும் முகவரை எப்படிக் கட்டுப்படுத்துவது, உள்ளமைந்த sandbox இலிருந்து ஒரு நீக்கக்கூடிய VPS வரை, ஆகியவை சேவைப்பெட்டியில் Claude Code ஐ பாதுகாப்பாக இயக்குதல் இல் விளக்கப்பட்டுள்ளன.

Deploy key vs SSH agent forwarding

git உங்கள் மடிக்கணினியில் உள்ள விசையைப் பயன்படுத்த அனுமதிக்க ssh -A செய்வது கவர்ச்சிகரமானது. இது என்ன அனுமதி வழங்குகிறது என்பதைப் புரிந்துகொள்ளுங்கள்: agent forwarding உங்கள் உள்ளூர் SSH agent இன் socket ஐ சேவைப்பெட்டியில் அந்தப் பயனராக இயங்கும் செயல்முறைகளுக்கு வெளிப்படுத்துகிறது. agent ஆக இயங்கும் எதுவும் — முகவர் உட்பட — நீங்கள் இணைக்கப்பட்டிருக்கும் வரை, அது அடையக்கூடிய எந்த host க்கும் உங்கள் விசையைக் கையொப்பமிடச் செய்யலாம். இது "git ஐ இந்த ஒரு களஞ்சியத்தை மட்டும் pull செய்ய அனுமதி" என்பதை விட மிக அதிகமானது.

அதற்குப் பதிலாக சேவைப்பெட்டியிலேயே ஒரு விசையை உருவாக்கவும். அதை ஒரு களஞ்சியத்திற்கான deploy key ஆகப் பதிவு செய்யவும் (முகவருக்கு push தேவைப்பட்டால் மட்டும் write access வழங்கவும்). சேவைப்பெட்டியிலிருந்து வரும் commits ஐ அடையாளம் காண ஒரு git identity ஐ அமைக்கவும்:

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 killer மிகப்பெரிய செயல்முறையைத் தேர்ந்தெடுத்தது. Nodeஇலிருந்து நீங்கள் பதிலாக FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory ஐக் காணலாம். தீர்வுகள், வரிசையாக: swap சேர்க்கவும் (மேலே), டெஸ்ட் மற்றும் கம்பைலர் இணைவேலைப்பாட்டைக் கட்டுப்படுத்தவும், Nodeஇன் heapஐ NODE_OPTIONS=--max-old-space-size=... கொண்டு உயர்த்தவும், அல்லது VPS அளவை பெரிதாக்கவும். OOM killer பில்டுக்குப் பதிலாக tmux சர்வரைத் தேர்ந்தெடுத்து உங்கள் செஷனையும் அழிக்கலாம்; systemd-oomd இயங்கிக்கொண்டிருந்தால், அது ஒரு முழு பயனர் ஸ்லைஸையும் கொன்று அதே விளைவை ஏற்படுத்தலாம்.

npm error code EACCES / permission denied, mkdir '/usr/lib/node_modules/...'. rootக்குச் சொந்தமான prefixக்குள் ஒரு குளோபல் நிறுவல். மேலே உள்ள ~/.npm-global prefixஐப் பயன்படுத்துங்கள். நீங்கள் ஏதோ ஒரு புள்ளியில் sudo npm ஐ இயக்கியிருந்தால் Your cache folder contains root-owned files ஐயும் காணலாம் — sudo chown -R $(id -u):$(id -g) ~/.npm கொண்டு பழுதுபார்க்கவும்.

claude: command not found — ஆனால் சில நேரங்களில் மட்டுமே. உங்கள் PATH export "இடைவினையாக இயங்கவில்லையென்றால், ஏதும் செய்யாதே" என்ற காவலுக்குக் கீழே ~/.bashrc இல் இருக்கிறது, எனவே இடைவினையற்ற ஷெல்கள் அதைத் தவறவிடுகின்றன. அந்தக் காவலுக்கு மேலே exportஐ நகர்த்தி, அதை ~/.bashrc இல் வைத்திருங்கள், ~/.profile இல் அல்ல: tmux நான்-லாகின் ஷெல்களைத் தொடங்கலாம், அவை ~/.bashrc ஐப் படித்து ~/.profile ஐத் தொடாது.

இணைத்த பிற் கலவையான வண்ணங்கள். ஒரு TERM பொருத்தமின்மை — மேலே உள்ள default-terminal வரி தான் தீர்வு.

மறுதொடக்கத்திற்குப் பிறகு செஷன்கள் மறைகின்றன. இது பிழை அல்ல: tmux சர்வர் ஒரு செயல்முறை, மேலும் மறுதொடக்கம் அதை முடிவுக்குக் கொண்டுவருகிறது. uptime ஐச் சரிபாருங்கள்.

இது விரிவடையும்போது எது பழுதடைகிறது

அதிக திட்டங்கள். ஒவ்வொரு repo-வுக்கும் ஒரு tmux session, அதற்கே பெயரிடவும்; அப்போது tmux ls உங்கள் dashboard ஆக இருக்கும். பெயரிடும் ஒழுங்கைக் கடைப்பிடிக்காவிட்டால், 0, 1, 2 போன்ற session-கள் கிடைக்கும். Port-களும் இதேபோல் சிதறும் — ஆறு repo-க்களும் :3000 வேண்டும் என்ற நிலை வரும்போது, கைமுறையாக ஒதுக்குவதை நிறுத்தி, Docker Compose கீழ் பல app-களை வழங்கும் Traefik reverse proxy hostname வழியாக வழிமாற்றம் செய்யடிக்க வேண்டும்.

அதிக நபர்கள். tmux socket-கள் ஒவ்வொரு பயனருக்கும் தனியானவை, எனவே ஒரே box-ல் இருக்கும் இரு டெவலப்பர்களும் தலா தங்களுக்கான tmux server-ஐப் பெறுவார்கள்; ஒருவருடைய session-ஐ மற்றவர் பார்க்க முடியாது. பகிரப்பட்ட socket வழியாக ஒரு session-ஐப் பகிர்ந்தால், அனைவரும் ஒரே Unix பயனராக ஒரே shell-ல் தட்டச்சு செய்வார்கள்; இதன் காரணமாக audit மற்றும் அனுமதி பிரச்சினைகள் ஏற்படும். தனித்தனி பயனர்கள் என்பதே சரியான, எளிமையான தீர்வு.

கண்காணாத வேலை. tmux என்பது நீங்கள் இணைந்து பயன்படுத்தும் interactive session-களுக்கானது. யாரும் கண்காணாமல் கால அட்டவணைப்படி இயங்கும் வேலைகள் systemd unit மற்றும் timer-ல் இருக்க வேண்டும்; அங்கே logging, restart policy மற்றும் boot survival இலவசமாகக் கிடைக்கும். cron போன்ற ஒரு வேலையை இயக்க tmux-ஐ நாடுவது, அந்த வேலை ஒரு service ஆக மாற வேண்டும் என்பதன் அறிகுறி.

இறுதி ஒரு குறிப்பு: agent தொடங்கும் dev server-களை 0.0.0.0-க்குப் பதிலாக 127.0.0.1-உடன் bind செய்யவும்; ufw-ல் port-களைத் திறப்பதற்குப் பதிலாக அவற்றை SSH tunnel (ssh -L 3000:127.0.0.1:3000 agent@your-server) வழியாக அணுகவும். அரைவாசி port-களை forward செய்யும்போது, அல்லது ஒரு செல்போனும் மடிக்கணினியும் ஒரே நேரத்தில் ஒரு preview-ஐ அணுக விரும்பும்போது, அவற்றுக்கு முன்னால் ஒரு VPS-ல் self-hosted WireGuard VPN-ஐப் பயன்படுத்தவும்: dev server-கள் ஒரு private interface-உடன் bind ஆகும்; ufw public interface-ல் இருந்து வரும் அனைத்தையும் தொடர்ந்து மறுக்கும். நீங்கள் firewall-ல் ஓட்டைகளைப் போடுவதை நிறுத்தினால் மட்டுமே அது உதவும்.

Claude Code மட்டுமே தேர்வு அல்ல: VPS-ல் ஒரு coding AI agent-ஐ இயக்குதல் Aider மற்றும் Goose-ஐயும் எடைபோடுகிறது.

FAQ

Claude Code என்ன SSH இணைப்பு துண்டிக்கப்பட்ட பிறகும் இயங்கிக்கொண்டிருக்குமா?

நீங்கள் அதை tmux க்குள் தொடங்கியிருந்தால் மட்டுமே. SSH shell இல் நேரடியாக தொடங்கப்பட்ட செயல்முறை அந்த shell இன் சேயாகும். இணைப்பு துண்டிக்கப்படும்போது pty விடம்பெற்று அதுவும் முடிந்துவிடும். tmux க்குள் இருக்கும் shell ஆனது பிரிக்கப்பட்ட tmux சேவையகத்தைச் சேர்ந்தது. எனவே முகவர் பணியின் நடுவே தொடர்ந்து செயல்படும். tmux attach உங்களை மீண்டும் அதே scrollback க்கு அழைத்துச் செல்லும். ஒவ்வொரு உள்நுழைவுக்கும் பிறகும் முதல் கட்டளையாக tmux new -A -s <project> ஐ இயக்கினால் இந்த பிரச்சினை நீங்கும்.

CLI ஐ sudo npm install -g உடன் நிறுவ வேண்டுமா?

இல்லை. root க்கு சொந்தமான பொது prefix ஆனது பிந்தைய நிறுவல்களில் EACCES பிழைகளையும் npm cache இல் root க்கு சொந்தமான கோப்புகளையும் தரும். npm இன் prefix ஐ ~/.npm-global க்கு அமைக்கவும் (அல்லது nvm போன்ற version manager ஐ பயன்படுத்தவும்). பிறகு சிறப்பு அனுமதி அற்ற agent பயனராக நிறுவவும். ~/.npm-global/binPATH இல் ஏற்றுமதி செய்யவும். இதை ~/.bashrc இல், interactive guard க்கு மேலே சேர்க்கவும். நீங்கள் ஏற்கனவே sudo npm ஐ ஒருமுறை இயக்கியிருந்தால், cache ஐ sudo chown -R $(id -u):$(id -g) ~/.npm உடன் பழுதுபார்க்கவும்.

முகவர் இயங்கும் சேவையகத்தில் ssh -A agent forwarding பாதுகாப்பானதா?

இது வேலைக்கு தேவையான அளவை விட மிக அதிக அனுமதி வழங்குகிறது. Forwarding உங்கள் உள்ளக SSH முகவரின் socket ஐ அந்த பயனராக இயங்கும் ஒவ்வொரு செயல்முறைக்கும் வெளிப்படுத்துகிறது. எனவே நீங்கள் இணைக்கப்பட்டிருக்கும் வரை, சேவையகத்தில் உள்ள எதுவும் அது அணுகக்கூடிய எந்த host க்கும் உங்கள் key கைப்பயன்படுத்தி கையொப்பம் பெற கேட்கலாம். சேவையகத்தில் ed25519 key ஐ உருவாக்கி, அதை ஒரு களஞ்சியத்திற்கான deploy key ஆக பதிவு செய்யவும். முகவர் உண்மையில் push செய்ய வேண்டும் என்றால் மட்டுமே write access வழங்கவும்.

என்னுடைய build வெறும் Killed ஐ மட்டும் ஏன் அச்சிடுகிறது?

stack trace இல்லாத ஒரு சொல் என்பது kernel OOM killer ஐ குறிக்கிறது. இதை sudo dmesg -T | grep -i -E 'out of memory|killed process' உடன் உறுதிப்படுத்தவும். Node இல் இருந்து நீங்கள் JavaScript heap out of memory ஐ பார்க்கலாம். தீர்வுகளை வரிசையாக செயல்படுத்தவும்: swapfile சேர்க்கவும், test மற்றும் compiler parallelism ஐ கட்டுப்படுத்தவும், NODE_OPTIONS=--max-old-space-size=... ஐ உயர்த்தவும், பிறகு VPS அளவை பெரிதாக்கவும். OOM killer ஆனது build க்கு பதிலாக tmux சேவையகத்தைத் தேர்ந்தெடுத்து உங்கள் முழு அமர்வையும் முடித்துவிடலாம் என்பதை கவனிக்கவும்.

tmux ஆலும் அல்லது systemd service ஆலுமா?

tmux ஆனது நீங்கள் இணைந்து பார்க்கவும் தட்டச்சு செய்யவும் கூடிய interactive அமர்வுகளுக்கு ஏற்றது. முகவர் அமர்வு என்பது அப்படிப்பட்டதே. யாரும் கவனிக்காமல் கால அட்டவணைப்படி இயங்கும் வேலை ஒரு systemd unit மற்றும் timer க்குள் சேர்ந்தது. அங்கு logging, restart policy மற்றும் boot survival ஆகியவை இலவசமாகக் கிடைக்கின்றன. ஒரு cron வடிவ வேலையை இயக்க tmux ஐ நீங்கள் நாடுகிறீர்கள் என்றால், அந்த வேலை ஒரு service ஆக மாற விரும்புகிறது.