# SSH sıkılaştırma: Ubuntu ve Debian'da OpenSSH'yi kilitleyin

> OpenSSH'yi temellerin ötesinde sıkılaştırın: ek yapılandırma, izinli kullanıcılar, giriş sınırları, boşta zaman aşımı, güvenli port değişikliği ve 2FA.

Zorluk: Orta\
Denendiği sistemler: Ubuntu 24.04 LTS, Ubuntu 26.04 LTS, Debian 12, Debian 13

[Yeni bir sunucuyu güvenli hale getirmek](/guides/secure-a-new-linux-server) root ve şifre girişlerini zaten kapatır. Bu rehber daha ileri gider: kimlerin giriş yapabileceğini, kaç deneme hakkı olduğunu, boştaki oturumların ne kadar yaşayacağını sınırlar, SSH'yi güvenle başka bir porta taşır ve isteğe bağlı iki aşamalı doğrulama ekler. Komutlar Ubuntu 24.04/26.04 ve Debian 12/13 içindir.

## Başlamadan önce

- sudo kullanıcınız için anahtarla giriş çalışıyor ([SSH anahtarları](/guides/ssh-keys)).
- Hizmet sayfanızda görünüyorsa web konsolu gibi ikinci bir giriş yolunuz var.
- Boyunca **bir SSH oturumunu açık tutun** ve her değişikliği ikinci bir terminalde test edin.

## 1. adım: Bir ek yapılandırma dosyası yazın

OpenSSH her seçenek için okuduğu ilk değeri kullanır ve Ubuntu ile Debian, `/etc/ssh/sshd_config.d/*.conf` dosyalarını ana dosyanın geri kalanından önce okur. Tüm ayarlarınızı alfabede önce gelen tek bir dosyaya koyun:

```bash
sudo nano /etc/ssh/sshd_config.d/00-hardening.conf
```

```text
# Kimler, nasıl giriş yapabilir
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
AllowUsers alex

# Daha az deneme, daha kısa bekleme
MaxAuthTries 3
LoginGraceTime 30

# Boştaki veya kopmuş oturumları kapat
ClientAliveInterval 300
ClientAliveCountMax 2

# Çoğu sunucunun ihtiyaç duymadığı özellikler
X11Forwarding no
AllowAgentForwarding no
```

> **Not**
>
> **Coolify için istisna:** Coolify ile yönetilen sunucularda `no` yerine `PermitRootLogin prohibit-password` gerekir; çünkü Coolify root olarak kendi SSH anahtarıyla bağlanır. `PasswordAuthentication no` ayarını koruyun; böylece root şifreyle asla, yalnızca anahtarla giriş yapabilir. `AllowUsers` kullanıyorsanız listeye `root` ekleyin. Bkz. [Coolify kurulumu](/guides/install-coolify).

`AllowUsers`, giriş yapabilecek hesapları listeler; birden fazlasını boşlukla ayırın ya da `sshusers` gibi bir grupla `AllowGroups` kullanın. Agent yönlendirmeyi bilerek kullanıyorsanız `AllowAgentForwarding no` satırını eklemeyin.

## 2. adım: Kontrol edin ve uygulayın

```bash
sudo sshd -t
sudo sshd -T | grep -E 'permitrootlogin|passwordauthentication|allowusers|maxauthtries'
sudo systemctl restart ssh
```

`sshd -t` hiçbir şey yazdırmamalıdır. `sshd -T` geçerli değerleri gösterir; biri yazdığınız gibi değilse başka bir dosya onu önce ayarlıyordur.

**Doğrulama:** `alex` olarak yeni bir giriş çalışır; başka herhangi bir kullanıcıyla giriş `Permission denied` ile reddedilir.

## 3. adım: Portu güvenle değiştirin (isteğe bağlı)

Farklı bir port yalnızca kayıt gürültüsünü azaltır; yine de istiyorsanız bu sırayla yapın. SSH taşınmadan **önce** yeni porta güvenlik duvarında izin verin:

```bash
sudo ufw allow 2222/tcp
```

Portu ek dosyanıza ekleyin:

```text
Port 2222
```

Uygulayın:

**Ubuntu**

Ubuntu'da SSH soket üzerinden etkinleştirilir: bir oluşturucu (generator) `Port` değerini yapılandırmadan okur ve `ssh.socket`'i ayarlar. Yeniden yükleyin ve soketi yeniden başlatın:

```bash
sudo sshd -t
sudo systemctl daemon-reload
sudo systemctl restart ssh.socket
```
**Debian**

```bash
sudo sshd -t
sudo systemctl restart ssh
```

**Doğrulama:** `sudo ss -tlnp | grep 2222` dinleyiciyi gösterir ve yeni bir terminalden `ssh -p 2222 alex@203.0.113.10` çalışır. Ancak bundan sonra eski kuralı kaldırın: `sudo ufw delete allow OpenSSH`.

## 4. adım: Donanım destekli bir anahtar kullanın (isteğe bağlı)

Bir FIDO2 güvenlik anahtarıyla, cihazı ve dokunmayı, `verify-required` ile de PIN'ini gerektiren bir anahtar oluşturun:

```bash
ssh-keygen -t ed25519-sk -O verify-required
```

Açık anahtarı her zamanki gibi `authorized_keys` dosyasına ekleyin. Cihaz kaybolursa diye ikinci bir anahtar veya bir konsol bulundurun.

## 5. adım: Tek kullanımlık kod ekleyin (isteğe bağlı)

Zamana dayalı kodlar anahtarın üzerine ikinci bir faktör ekler. PAM modülünü kurun ve **kendi kullanıcınızla** (root değil) ayarlayın:

```bash
sudo apt install libpam-google-authenticator
google-authenticator
```

Soruları yanıtlayın, QR kodu doğrulama uygulamanızla okutun ve acil durum kodlarını güvenle saklayın. Ardından `/etc/pam.d/sshd` dosyasına şu satırı ekleyin:

```text
auth required pam_google_authenticator.so
```

Ek dosyanızda `KbdInteractiveAuthentication no` değerini `yes` yapın ve iki faktörü birden zorunlu kılın:

```text
KbdInteractiveAuthentication yes
AuthenticationMethods publickey,keyboard-interactive
```

SSH'nin hesap şifresini değil yalnızca kodu sormasını istiyorsanız `/etc/pam.d/sshd` içindeki `@include common-auth` satırını yorum satırı yapın. `sudo sshd -t` ile kontrol edin ve SSH'yi yeniden başlatın.

**Doğrulama:** yeni bir giriş önce anahtar parolasını, ardından bir `Verification code` sorar. Diğer oturumunuzu kapatmadan önce test edin.

## 6. adım: Kayıtları izleyin

```bash
sudo journalctl -u ssh --since today | grep -E 'Accepted|Failed|Invalid'
```

`Accepted publickey for alex` satırları sizin girişlerinizdir; her kaynak adresi tanıdığınızı kontrol edin. Rastgele adreslerden gelen çok sayıda `Invalid user` satırı olağan arka plan taramasıdır ve bu ayarlarla zararsızdır. Tekrarlayan denemeleri otomatik engellemek için [Fail2ban ve CrowdSec](/guides/fail2ban-crowdsec) rehberine bakın.

## Sorun giderme

**2. adımdan sonra kendi kullanıcınıza `Permission denied`.** `AllowUsers` içindeki ad eşleşmiyor ya da kullanıcı farklı bir adla giriş yapıyor. Dosyayı açık oturumunuzdan düzeltin.

**Yeni port Ubuntu'da yanıt vermiyor.** Oluşturucuyu ve soketi yeniden yüklemek yerine `ssh`'yi yeniden başlattınız. `sudo systemctl daemon-reload` ve `sudo systemctl restart ssh.socket` çalıştırın.

**İki aşamalı doğrulama istemi hiç görünmüyor.** `KbdInteractiveAuthentication` önceki bir dosyada hâlâ `no` ya da `UsePAM` kapalı. `sudo sshd -T | grep -E 'kbdinteractive|usepam|authenticationmethods'` ile kontrol edin.

**Erişiminiz kesildi.** Konsolu kullanın ve [güvenlik duvarı değişikliğinden sonra erişimi kaybetmek](/guides/locked-out-after-firewall-change) rehberini izleyin.

## Sonraki adımlar

- Tekrarlanan denemeleri engelleyin: [Fail2ban ve CrowdSec](/guides/fail2ban-crowdsec).
- Bağlantı hatalarını çözün: [SSH bağlantı sorunları](/guides/ssh-connection-problems).

## Sık sorulan sorular

### SSH portunu değiştirmeye değer mi?

Otomatik taramaların kayıtlarınızdaki gürültüsünü azaltır, ama tek başına koruma değildir. Daha sessiz kayıtlar istiyorsanız yeni porta güvenlik duvarında izin verdikten sonra yapın ve asıl savunma olarak yalnızca anahtarla girişi koruyun.

### Ayarları neden sshd\_config yerine sshd\_config.d içine koymalıyım?

Paket güncellemeleri ana dosyayı değiştirebilir veya değişiklikleri birleştirmenizi isteyebilir. Ek dosya güncellemelerden etkilenmez ve OpenSSH okuduğu ilk değeri kullandığı için 00 ile başlayan bir dosya sonraki varsayılanların önüne geçer.

### SSH için iki aşamalı doğrulama anahtarların yerini alır mı?

Hayır, onlara eklenir. AuthenticationMethods publickey,keyboard-interactive ile bir giriş hem anahtarı hem de bir kodu gerektirir. Açmadan önce web konsolu gibi test edilmiş bir yedek giriş yolu bulundurun.

### Gerçekten geçerli olan ayarları nasıl görürüm?

sudo sshd -T çalıştırın. Tüm dosyalar okunduktan sonra her seçeneğin son değerini yazdırır; böylece önceki bir dosyanın sizinkinin önüne geçip geçmediğini görürsünüz.

### Donanım destekli SSH anahtarı nedir?

ed25519-sk türündeki bir anahtar bir FIDO2 güvenlik anahtarında durur ve yalnızca cihaz takılıyken ve dokunulduğunda çalışır. Bilgisayarınız ele geçirilse bile anahtar kopyalanamaz.

---

Kaynak: <https://hyperdc.com/tr/guides/security/ssh-hardening>\
Son güncelleme: 2026-10-09
