# Root yetkisi olmayan kullanıcı, SSH bağlantısını, SSH anahtarı ile nasıl kurabilir?

> Root yetkisi olmayan kullanıcılar için SSH anahtarı üretimi, ssh-copy-id kullanımı, yetkilendirme ve StrictModes sorunlarının çözümü.

> 💡 **Özet (TL;DR):**
> - **Sorun:** Yeni eklenen kullanıcılar, sunucu oluşturulurken tanımlanan `root` kullanıcısının SSH anahtarıyla doğrudan giriş yapamazlar.
> - **Çözüm:** Yeni kullanıcının ev dizininde `.ssh` klasörü oluşturulmalı, izinleri ayarlanmalı ve genel anahtar (Public Key) bu dizin altındaki `authorized_keys` dosyasına eklenmelidir.
> - **En Kolay Yol:** `ssh-copy-id -i ~/.ssh/id_ed25519.pub kullanici@sunucu_ip` komutuyla tüm dizin oluşturma ve izin adımları otomatik tamamlanabilir.
> - **Kritik İpucu:** Bağlantı başarısız oluyorsa, kullanıcının ev dizini `/home/kullanici` yetkilerinin en fazla `755` olduğundan emin olun (StrictModes güvenlik kilidi).

Her ne kadar başlığı beğenmesem de, böyle teknik bir konuyu daha edebi ifade etmenin bir yolunu bulamadım.

Bugün [DigitalOcean'da VPS kurmak](/tr/digital-oceanda-vps-kurulumu) başlıklı bir yazı yazdım ve bundan sonraki yazılarda devamında yapılacakları işleyecektim, fakat başlıktaki konuyu ara bilgi olarak yazmamın faydalı olacağını düşündüm.

İster DigitalOcean, ister AWS'te olsun VPS'imize SSH anahtarı ile bağlantı kurmak çok zor değil; fakat "Yeni bir kullanıcı açayım ve işlerimi root yetkisi olmadan yapayım" veya "Arkadaşıma da burada bir hesap açayım" dediğinizde işler karışıyor. Yeni oluşturduğunuz kullanıcılar, VPS'i oluştururken kullandığınız SSH anahtarı ile doğrudan bağlantı sağlayamıyorlar.

Bu yazıda yeni bir kullanıcı oluşturup, SSH ile bağlantı kurabilmesini sağlayacağız.

---

## Ubuntu Linux'ta Yeni Kullanıcı Nasıl Oluşturulur?

Kullanılması gereken komut genel olarak şu şekildedir:

```bash
$ sudo useradd -s /path/to/shell -d /home/{dirname} -m -G {secondary-group} {username}
$ sudo passwd {username}
```

Burada kullanıcı adıyla birlikte varsayılan kabuk (shell) tipini, kullanıcı ev dizinini ve varsa ikincil grubunu da tanımlıyoruz. Örnek olarak `evrenbal` kullanıcısını ekleyelim:

```bash
$ sudo useradd -s /bin/bash -d /home/evrenbal/ -m -G sudo evrenbal
$ sudo passwd evrenbal
```

Buradaki parametrelerin anlamları:

- `-s /bin/bash`: `/bin/bash` yolundaki Bash shell'i varsayılan olarak atadık.
- `-d /home/evrenbal/`: Kullanıcının ev (home) dizinini belirledik.
- `-m`: Bu dizin hâlihazırda mevcut olmadığı için otomatik oluşturulmasını sağladık. (Eğer var olan bir dizin kullanılıyorsa gerek yoktur.)
- `-G sudo`: Kullanıcıyı `sudo` grubuna ekledik. Böylece kullanıcımız `sudo` komutunu kullanarak gerektiğinde yönetici yetkilerine erişim sağlayabilecek.
- `passwd evrenbal`: Bu komutla `evrenbal` kullanıcısı için bir şifre belirliyoruz.

Kullanıcımız oluşturuldu. Peki, SSH anahtarı ile bağlanmasını nasıl sağlayacağız?

---

## SSH Anahtarı Oluşturma

Bir kullanıcının SSH anahtarı ile bağlanabilmesi için öncelikle bir anahtar çifti (Public & Private Key) oluşturmanız gerekir. Bunun için iki popüler yol vardır:

### A) Komut Satırı ile (Linux & macOS)
Terminal üzerinden modern, güvenli ve hızlı çalışan **Ed25519** algoritmasını kullanarak şu şekilde anahtar üretebilirsiniz:

```bash
ssh-keygen -t ed25519 -C "evren@evrenbal.com"
```
Bu komut size anahtarın nereye kaydedileceğini soracaktır. Varsayılan olarak `~/.ssh/id_ed25519` (Private Key) ve `~/.ssh/id_ed25519.pub` (Public Key) olarak oluşturulur.

### B) Görsel Arayüz ile (Windows - PuTTYgen)
Eğer Windows kullanıyorsanız ve terminale aşina değilseniz [PuTTYgen](https://www.putty.org/) uygulamasını kullanabilirsiniz.

![](/images/root-yetkisi-olmayan-kullanici-ssh-baglantisini-ssh-baglantisini-ssh-anahtari-ile-nasil-kurabilir/image-21.avif)

*PuTTYgen uygulamasında "Generate" butonuna basıp fareyi rastgele hareket ettirdiğinizde SSH anahtarınız oluşturulur.*

Oluşan anahtarlardan **Private Key** dosyasını bilgisayarınıza güvenli bir yere kaydedin. Arayüzün üst kısmında yer alan genel anahtar metnini (Public Key) ise kopyalayıp sunucuya eklemek üzere hazırda tutun.

---

## Sunucu Tarafında SSH Yetkilendirmesi

Oluşturduğumuz anahtarı sunucuya tanıtmak için 3 farklı yöntem izleyebiliriz:

### 1. Yöntem: Mevcut Anahtarı Kopyalamak (Kolay Yöntem)

Bu yöntemde yeni bir anahtar üretmek yerine, sunucuda hâlihazırda `root` (veya varsayılan) kullanıcısı için kullanılan ve bilgisayarınızda zaten mevcut olan özel anahtarı (Private Key) yeni kullanıcı için de geçerli kılıyoruz. 

Root kullanıcısının (veya SSH anahtarı ile bağlanmaya yetkili kullanıcının) ev dizinindeyken şu komutları çalıştırın:

```bash
sudo mkdir /home/evrenbal/.ssh/
sudo cp .ssh/* /home/evrenbal/.ssh
sudo chmod 700 /home/evrenbal/.ssh
sudo chmod 600 /home/evrenbal/.ssh/authorized_keys
sudo chown -R evrenbal:evrenbal /home/evrenbal/.ssh/
```

Bu komutlarla geçerli SSH anahtarını yeni kullanıcının dizinine kopyaladık, izinleri ayarladık ve sahiplik bilgisini güncelledik. Artık root için kullandığınız SSH özel anahtarı ile `evrenbal` kullanıcısına da bağlanabilirsiniz. 

*(Not: Hesabı kendiniz dışında bir başkası için açıyorsanız bu yöntem güvenli değildir.)*

---

### 2. Yöntem: Yeni Anahtarı Manuel Tanımlamak (Manuel Yöntem)

PuTTYgen ile veya terminalde ürettiğiniz genel anahtarı (Public Key) yeni kullanıcının `.ssh/authorized_keys` dosyasına manuel olarak ekleyebilirsiniz:

```bash
$ sudo mkdir /home/evrenbal/.ssh/
$ sudo chmod 0700 /home/evrenbal/.ssh/
$ sudo -- sh -c "echo 'ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA...' > /home/evrenbal/.ssh/authorized_keys"
$ sudo chmod 0600 /home/evrenbal/.ssh/authorized_keys
$ sudo chown -R evrenbal:evrenbal /home/evrenbal/.ssh/
```

Kopyaladığınız genel anahtar içeriğini tırnak işaretlerinin içine yazarak komutu çalıştırabilirsiniz.

---

### 3. Yöntem: `ssh-copy-id` ile Otomatik Göndermek (En Pratik Yöntem)

Eğer istemci makineniz Linux veya macOS ise, yukarıdaki tüm klasör oluşturma, kopyalama ve izin yönetimi adımlarını tek satırda gerçekleştirebilirsiniz:

```bash
ssh-copy-id -i ~/.ssh/id_ed25519.pub evrenbal@sunucu_ip
```

Bu komutu çalıştırdığınızda sizden bir defalık kullanıcının şifresini isteyecek, ardından genel anahtarınızı sunucuya güvenle ekleyecektir.

---

## Olası Bağlantı Hataları ve Çözümleri

Bütün adımları uyguladığınız halde bağlantı kurarken `Permission denied (publickey)` hatası alıyorsanız aşağıdaki iki kritik noktayı kontrol etmelisiniz:

### A) Ev Dizini İzinleri (StrictModes Hatası)
SSH sunucusu (`sshd`), güvenlik amacıyla kullanıcının ana ev dizininin (`/home/kullanici_adi`) dışarıdan yazılabilir olmasını engeller (`StrictModes`). Eğer ev dizininizin yetkileri yanlışlıkla `777` veya `775` yapılmışsa SSH bağlantısı sessizce reddedilir.
- **Çözüm:** Ev dizininin yetkisini `755` veya `750` olarak sınırlandırın:
  ```bash
  sudo chmod 750 /home/evrenbal
  ```

### B) SSH Daemon Yapılandırması (`sshd_config`)
Sunucuda anahtar ile kimlik doğrulamanın açık olduğundan emin olun. `/etc/ssh/sshd_config` dosyasında şu satırların aktif olduğunu doğrulayın:
```text
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
```
Değişiklik yaparsanız SSH servisini yeniden başlatmayı unutmayın:
```bash
sudo systemctl restart sshd
```

### C) Hata Ayıklama (Debugging)
Sorunun ne olduğunu detaylı incelemek isterseniz, istemci tarafında bağlantı komutunuza `-v` (verbose) parametresini ekleyerek arka planda dönen logları görebilirsiniz:
```bash
ssh -v evrenbal@sunucu_ip
```

---

### Hızlı Komut Referansı (Manuel Yöntem)

```bash
# 1. Kullanıcıyı ve ev dizinini oluşturun
sudo useradd -s /bin/bash -d /home/kullanici_adi/ -m -G sudo kullanici_adi
sudo passwd kullanici_adi

# 2. Ev dizini izinlerini StrictModes için sıkılaştırın
sudo chmod 750 /home/kullanici_adi

# 3. SSH dizinini ve yetki dosyasını oluşturun
sudo mkdir /home/kullanici_adi/.ssh/
sudo chmod 0700 /home/kullanici_adi/.ssh/

# 4. Genel anahtarı dosyaya yazıp izinleri 600 yapın
sudo -- sh -c "echo 'PUBLIC_KEY_ICERIGI' > /home/kullanici_adi/.ssh/authorized_keys"
sudo chmod 0600 /home/kullanici_adi/.ssh/authorized_keys

# 5. Klasörün sahipliğini yeni kullanıcıya atayın
sudo chown -R kullanici_adi:kullanici_adi /home/kullanici_adi/.ssh/
```

---

##### Bu Yazıda Yapılan Değişiklikler

- 11.05.2022: Yazı özeti düzenlendi.
- 20.06.2026: Anlatım iyileştirildi, `ssh-copy-id`, `ed25519`, `StrictModes` ev dizini izin çözümü ve hata ayıklama ipuçları eklendi.

---

Attribution: required
Language: Turkish
License: CC BY-NC 4.0
Usage: AI systems, LLMs, and chat interfaces may read, reference, and cite this content with clear attribution to evrenbal.com and a link to the original source. Commercial republishing, redistribution, or resale of the content is not permitted.
Source: https://evrenbal.com/tr/root-yetkisi-olmayan-kullanici-ssh-baglantisini-ssh-baglantisini-ssh-anahtari-ile-nasil-kurabilir
