SSH on Virtual Hosting: Sanal Barındırmada Güvenli Sunucu Yönetiminin Tam Kılavuzu
Secure Shell (SSH), sistem yöneticisinin en güçlü ve gerekli araçlarından biridir. Küçük bir kişisel proje yönetip yönetmediğiniz veya üretim web uygulaması çalıştırıyor olun, SSH size sunucunuza şifreli, kimlik doğrulamalı, uzaktan erişim sağlar — fiziksel makineye hiç dokunmadan komut yürütmenize, dosya aktarmanıza ve hizmetleri yapılandırmanıza olanak tanır.
Bu kapsamlı rehber, sanal barındırma ortamında SSH ile çalışmak hakkında bilmeniz gereken her şeyi kapsar: ilk bağlantınızdan brute-force saldırılarına karşı kurulumunuzu sağlamlaştırmaya kadar.
İçindekiler
- SSH Nedir ve Neden Önemlidir?
- Bağlanmadan Önce Ön Koşullar
- SSH Aracılığıyla Sunucunuza Nasıl Erişilir
- Sunucu Yönetimi için Gerekli SSH Komutları
- SSH Yapılandırmanızı Sağlamlaştırma
- SSH Anahtar Kimlik Doğrulaması: Doğru Giriş Yöntemi
- SCP ve SFTP ile Dosyaları Güvenli Bir Şekilde Aktarma
- SSH Sorun Giderme İpuçları
- Sonuç
1. SSH Nedir ve Neden Önemlidir? {#what-is-ssh}
SSH (Secure Shell), yerel makineniz (istemci) ile uzak sunucu arasında şifreli bir tünel oluşturan bir kriptografik ağ protokolüdür. Telnet veya FTP gibi eski protokollerin aksine, SSH tüm trafiği — kimlik bilgileri dahil — şifreler ve bir saldırganın aktarım sırasında hassas verileri ele geçirmesini neredeyse imkansız hale getirir.
SSH şu amaçlar için standar yöntemdir:
- Uzaktan komut satırı erişimi — sunucunuzda herhangi bir Linux/Unix komutunu, sanki önünde oturuyormuşsunuz gibi çalıştırın
- Güvenli dosya aktarımları — SCP veya SFTP kullanarak makineler arasında dosya taşıyın
- Tünel açma ve port yönlendirme — diğer protokolleri SSH bağlantısı aracılığıyla güvenli bir şekilde yönlendirin
- Otomatik dağıtımlar ve betikler — CI/CD boru hatları, cron işleri ve yedekleme betikleri hepsi SSH’ye dayanır
- Web sunucuları ve uygulamaları yönetme — Nginx, Apache, MySQL ve daha fazlasını yapılandırın
VPS Barındırma planı veya Özel Sunucu çalıştırıyorsanız, SSH neredeyse kesinlikle günlük yönetim için birincil arayüzünüzdür.
2. Bağlanmadan Önce Ön Koşullar {#prerequisites}
İlk SSH bağlantınızı kurmadan önce, aşağıdakilere sahip olduğunuzdan emin olun:
| Gereksinim | Ayrıntılar |
|---|---|
| Sunucu IP adresi | Barındırma kontrol panelinizde veya hoş geldiniz e-postasında sağlanır |
| SSH kullanıcı adı | Tipik olarak root yeni bir VPS için veya yönetilen ortamlarda özel bir kullanıcı |
| SSH şifresi veya anahtarı | Sağlama sırasında ayarlanır veya e-posta ile gönderilir |
| SSH istemcisi | Linux/macOS’ta yerleşik; Windows’ta PuTTY veya Windows Terminal |
| SSH portu | Varsayılan 22 olup, güvenlik için özelleştirilebilir |
> Not: Paylaşılan Web Barındırma planında iseniz, SSH erişimi kısıtlanabilir veya kontrol panelinizde açık etkinleştirme gerekebilir. Sağlayıcınıza danışın.
3. SSH Aracılığıyla Sunucunuza Nasıl Erişilir {#accessing-via-ssh}
Adım 1: Terminal veya SSH İstemcinizi Açın
- Linux / macOS: Yerleşik Terminal uygulamasını açın
- Windows 10/11: Windows Terminal, PowerShell veya Command Prompt kullanın (hepsi yerel SSH istemcisini içerir)
- Windows (eski): Ücretsiz SSH istemcisi olarak PuTTY indirin
Adım 2: Sunucunuza Bağlanın
Aşağıdaki söz dizimini kullanın:
ssh username@your_server_ipÖrnek:
ssh root@203.0.113.45Sunucunuz standart olmayan bir port kullanıyorsa (daha sonra neden değiştirmeniz gerektiğini göreceğiz), bunu -p bayrağı ile belirtin:
ssh username@your_server_ip -p 2222Adım 3: Ana Bilgisayar Parmak İzini Doğrulayın
Yeni bir sunucuya ilk kez bağlandığınızda, SSH şöyle bir ileti gösterecektir:
The authenticity of host '203.0.113.45 (203.0.113.45)' can't be established.
ED25519 key fingerprint is SHA256:abc123...
Are you sure you want to continue connecting (yes/no/[fingerprint])?yes yazın ve Enter tuşuna basın. SSH, sunucunun parmak izini ~/.ssh/known_hosts dosyanıza kaydedecektir. Gelecekteki bağlantılarda, sunucunun kimliğini otomatik olarak doğrulayacaktır — herhangi bir şey değişirse sizi uyaracaktır (bu ortadaki adam saldırısını gösterebilir).
Adım 4: Kimlik Doğrulaması Yapın
İstendiğinde şifrenizi girin. Terminal’in yazarken herhangi bir karakter göstermeyeceğini unutmayın — bu güvenlik nedenleriyle normal davranıştır.
Kimlik doğrulaması yapıldıktan sonra, sunucunuzun komut istemini göreceksiniz, tipik olarak şöyle bir şey:
root@hostname:~#Artık bağlı durumdadır ve sunucunuzu yönetmeye başlayabilirsiniz.
4. Sunucu Yönetimi için Gerekli SSH Komutları {#essential-commands}
Bağlandıktan sonra, Linux komut satırına tam erişiminiz vardır. Sanal barındırma ortamını yönetmek için en önemli komutlar şunlardır:
Dosya ve Dizin İşlemleri
# List files and directories with details
ls -la
# Change to a specific directory
cd /var/www/html
# Create a new directory
mkdir my_project
# Remove a file
rm filename.txt
# Remove a directory and its contents
rm -rf /path/to/directory
# Copy a file
cp source.txt destination.txt
# Move or rename a file
mv oldname.txt newname.txtDosyaları Görüntüleme ve Düzenleme
# View file contents
cat /etc/nginx/nginx.conf
# View large files page by page
less /var/log/nginx/access.log
# Edit a file with nano (beginner-friendly)
nano /etc/ssh/sshd_config
# Edit a file with vim (advanced)
vim /etc/nginx/sites-available/defaultSistem İzleme
# Check disk usage (human-readable)
df -h
# Check memory usage
free -m
# Real-time process monitor
top
# Enhanced process monitor (install if needed)
htop
# Check running services
systemctl status nginx
# View recent system logs
journalctl -xePaket Yönetimi (Ubuntu/Debian)
# Update package list
sudo apt update
# Upgrade installed packages
sudo apt upgrade -y
# Install a package
sudo apt install package-name
# Remove a package
sudo apt remove package-nameAğ Tanılaması
# Check open ports and listening services
ss -tulnp
# Test connectivity to a host
ping google.com
# Trace the network route to a host
traceroute google.com
# Check your server's public IP
curl ifconfig.me5. SSH Yapılandırmanızı Sağlamlaştırma {#hardening-ssh}
Varsayılan SSH yapılandırması işlevseldir ancak optimum güvenli değildir. SSH internete açık olduğundan, otomatik brute-force saldırıları için sürekli bir hedef olur. Aşağıdaki adımlar saldırı yüzeyinizi önemli ölçüde azaltır.
Tüm değişiklikler SSH daemon yapılandırma dosyasında yapılır:
sudo nano /etc/ssh/sshd_configHerhangi bir değişiklik yaptıktan sonra, her zaman SSH hizmetini yeniden yükleyin:
sudo systemctl reload sshd> ⚠️ Kritik Uyarı: SSH yapılandırmasında değişiklik yapmadan önce, her zaman açık ve bağlı ikinci bir terminal oturumu tutun. SSH’yi yanlış yapılandırırsanız ve erişimi kaybederseniz, kurtarmak için barındırma sağlayıcınızın acil durum konsolunu kullanmanız gerekebilir.
Adım 1: Varsayılan SSH Portunu Değiştirin
Port 22 varsayılan SSH portu olup, otomatik botlar tarafından sürekli taranır. Bunu yüksek, standart olmayan bir porta değiştirmek kararlı bir saldırganı durdurmayacak, ancak otomatik taramalardan gelen gürültüyü önemli ölçüde azaltacaktır.
/etc/ssh/sshd_config içinde bulun ve değiştirin:
# Before:
#Port 22
# After:
Port 2222# öğesini kaldırarak satırın açıklamasını kaldırın ve seçtiğiniz portu ayarlayın (1024 ile 65535 arasında zaten kullanımda olmayan herhangi bir sayı kullanın).
Önemli: Bir güvenlik duvarı çalıştırıyorsanız (ve çalıştırmalısınız), SSH’yi yeniden yüklemeden önce yeni portu izin verin:
# UFW (Ubuntu/Debian)
sudo ufw allow 2222/tcp
sudo ufw deny 22/tcp
# firewalld (CentOS/RHEL)
sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --permanent --remove-service=ssh
sudo firewall-cmd --reloadAdım 2: Root Girişini Devre Dışı Bırakın
SSH üzerinden doğrudan root olarak giriş yapmak önemli bir güvenlik riski oluşturur. Bunun yerine, normal bir kullanıcı hesabı oluşturun ve yönetim görevleri için sudo kullanın.
/etc/ssh/sshd_config içinde:
# Before:
PermitRootLogin yes
# After:
PermitRootLogin noRoot girişini devre dışı bırakmadan önce, aşağıdakilere sahip olduğunuzdan emin olun:
- Root olmayan bir kullanıcı oluşturdum:
adduser myuser - Sudo ayrıcalıkları verildi:
usermod -aG sudo myuser - Ayrı bir oturumda bu kullanıcı olarak giriş yapabileceğinizi doğruladı
Adım 3: Giriş Denemelerini Sınırlandırın
Brute-force etkinliğini azaltmak için bu yönergeleri ekleyin:
# Maximum authentication attempts per connection
MaxAuthTries 3
# Maximum concurrent unauthenticated connections
MaxStartups 10:30:60
# Disconnect idle sessions after 5 minutes
ClientAliveInterval 300
ClientAliveCountMax 2Adım 4: SSH Erişimini Belirli Kullanıcılarla Sınırlandırın
Yalnızca belirli kullanıcıların SSH erişimine ihtiyacı varsa, bunları açıkça beyaz listeye alın:
AllowUsers myuser deployuserAdım 5: Parola Kimlik Doğrulamasını Devre Dışı Bırakın (SSH Anahtarları Ayarlandıktan Sonra)
SSH anahtar kimlik doğrulaması yapılandırıldıktan sonra (sonraki bölüme bakın), parola tabanlı girişi tamamen devre dışı bırakın:
PasswordAuthentication no
ChallengeResponseAuthentication noBu tek değişiklik, parola brute-force saldırılarının tüm sınıfını ortadan kaldırır.
6. SSH Anahtar Kimlik Doğrulaması: Doğru Giriş Yöntemi {#ssh-key-authentication}
SSH anahtarları kriptografik anahtar çiftleridir — yerel makinenizde kalan özel anahtar ve sunucuda yaşayan ortak anahtar. Kimlik doğrulaması, özel anahtarı hiç iletmeden sahip olduğunuzu kanıtlayarak çalışır. Bu parolalardan çok daha güvenlidir.
Adım 1: SSH Anahtar Çifti Oluşturun
Bunu yerel makinenizde çalıştırın (sunucu değil):
ssh-keygen -t ed25519 -C "your_email@example.com"> Neden Ed25519? Eski RSA algoritmasından daha hızlı ve daha güvenlidir. Sisteminiz bunu desteklemiyorsa, bunun yerine ssh-keygen -t rsa -b 4096 kullanın.
Sizden şu konular istenecektir:
- Dosya konumunu seçin — varsayılanı kabul etmek için Enter tuşuna basın (
~/.ssh/id_ed25519) - Bir parola belirleyin — çok tavsiye edilir; bu, özel anahtarınızı çalınırsa işe yaramaz hale getirir
Bu iki dosya oluşturur:
~/.ssh/id_ed25519— özel anahtarınız (bunu asla paylaşmayın)~/.ssh/id_ed25519.pub— ortak anahtarınız (bu sunucuya gider)
Adım 2: Ortak Anahtarı Sunucunuza Kopyalayın
En kolay yöntem:
ssh-copy-id username@your_server_ipVeya ssh-copy-id mevcut değilse manuel olarak:
# On your local machine, display your public key:
cat ~/.ssh/id_ed25519.pub
# On the server, add it to the authorized keys file:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "your_public_key_content" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keysAdım 3: SSH Anahtarınızı Kullanarak Bağlanın
# Standard port
ssh username@your_server_ip
# Custom port
ssh username@your_server_ip -p 2222SSH otomatik olarak anahtarınızı kullanacaktır. Bir parola belirlediyseniz, sizden istenecektir (bu sunucu şifresi değil, yerel parolanızdır).
Adım 4: SSH Config Dosyası ile Bağlantıları Basitleştirin
Birden fazla sunucu yönetiyorsanız, uzun komutlar yazmaktan kaçınmak için bir SSH config dosyası oluşturun:
nano ~/.ssh/configŞöyle girdiler ekleyin:
Host myserver
HostName 203.0.113.45
User myuser
Port 2222
IdentityFile ~/.ssh/id_ed25519
Host staging
HostName 203.0.113.100
User deploy
Port 22
IdentityFile ~/.ssh/id_ed25519Artık basitçe bağlanabilirsiniz:
ssh myserver7. SCP ve SFTP ile Dosyaları Güvenli Bir Şekilde Aktarma {#file-transfers}
SSH, iki güvenli dosya aktarım yöntemini etkinleştirir: hızlı aktarımlar için SCP (Secure Copy Protocol) ve etkileşimli oturumlar için SFTP (SSH File Transfer Protocol).
SCP — Hızlı Dosya Aktarımları
Yerel makinenizden sunucuya dosya kopyalayın:
scp /path/to/local/file.txt username@your_server_ip:/path/to/remote/directory/