Table of Contents

SSH: Homelab Server

Connection

ssh user@server

Non-interactive Commands (Scripting)

Use -T and -o BatchMode=yes to prevent hanging:

ssh -T -o BatchMode=yes user@server "command"

File Transfer

# Upload single file
scp localfile.txt user@server:~/cafe/
 
# Upload multiple config files
scp cafe/docker-compose.yml cafe/caddy/Caddyfile user@server:~/cafe/
scp cafe/caddy/Caddyfile user@server:~/cafe/caddy/Caddyfile
 
# Sync directory with rsync
rsync -avz --exclude '.git' ./cafe/ user@server:~/cafe/

Never Run Interactive Editors Over SSH

This will hang indefinitely:

ssh user@server "nano /etc/file"  # ❌ hangs

Instead: edit locally, upload with scp. See deployment workflow.

Common One-Liners

# Check running containers
ssh user@server "docker ps"
 
# Check what's on port 80
ssh user@server "ss -tlnp | grep :80"
 
# Tail logs
ssh user@server "docker logs cafe-caddy-1 --tail 20"
 
# Reload Caddy
ssh user@server "docker exec cafe-caddy-1 caddy reload --config /etc/caddy/Caddyfile"
 
# System resources
ssh user@server "free -h && df -h"

Security Reminders

See Also