2026-03-14
SSH üzerinden sunucu yönetimi notları
Günlük işimin büyük kısmı SSH ile sunuculara bağlanıp container kaldırmak, log okumak, config düzenlemek. Zamanla bazı alışkanlıklar edindim.
Şifreleri düz metin tutma
Sunucu şifrelerini .txt dosyası, Notion, Slack mesajı gibi yerlerde tutuyorsan — er ya da geç başın ağrıyacak. Şifreleri veritabanında AES ile encrypt edip saklıyorum. API response'unda bile dönmüyorum, sadece SSH bağlantısı kurarken decrypt ediyorum.
Tehlikeli komutları engelle
Web arayüzünden komut çalıştırabiliyorsan, birinin rm -rf / yazma ihtimalini düşünmen lazım. Yanlışlıkla da olabilir.
Basit bir blocklist yetmez — rm -rf / (boşluklu), $(rm -rf /) (subshell) gibi varyasyonlar var. Regex pattern'leri daha güvenli.
docker ps formatı
Default çıktısı okunamaz. --format kullan:
docker ps -a --format '{{.Names}}\t{{.Image}}\t{{.Status}}\t{{.Ports}}'
Tab'la ayrılmış — hem gözle okunur hem script'te parse edilir.
docker stats --no-stream
Container CPU/RAM kullanımı için:
docker stats --no-stream --format '{{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}'
--no-stream olmadan canlı güncelleme yapar, script'te kullanılamaaz. Bu tek seferlik snapshot alıyor.
SSH bağlantı limiti
Aynı anda çok SSH bağlantısı açarsan MaxSessions limitine takılırsın. Paralel komut çalıştırmak yerine tek bağlantıda zincirleme:
# 2 ayrı bağlantı yerine
ssh server "docker ps && echo '---' && docker stats --no-stream"
Monitoring — fancy tool'a gerek yok
# RAM
free -b | awk 'NR==2{printf "%s %s %s", $2, $3, $7}'
# Disk
df -B1 / | awk 'NR==2{printf "%s %s %s", $2, $3, $4}'
# CPU load
cat /proc/loadavg | awk '{print $1, $2, $3}'
Bu üçünü bir dashboard'a basabilirsin. Grafana kurmana gerek yok.