ssh user@server
Use -T and -o BatchMode=yes to prevent hanging:
ssh -T -o BatchMode=yes user@server "command"
-T: disable pseudo-terminal (prevents interactive prompts from hanging)-o BatchMode=yes: fail immediately instead of prompting for passwords# 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/
This will hang indefinitely:
ssh user@server "nano /etc/file" # ❌ hangs
Instead: edit locally, upload with scp. See deployment workflow.
# 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"