Teknik Detaylar

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

← Teknik Detaylar
2021-02-20 ~ 2022-05-11 · 5 dk okuma
Root yetkisi olmayan kullanıcı, SSH bağlantısını, SSH anahtarı ile nasıl kurabilir?
Bu yazıyı yapay zekâ ile tartış
Sayfayı kopyala

💡 Ö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 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:

$ 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:

$ 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:

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 uygulamasını kullanabilirsiniz.

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:

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:

$ 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:

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:
    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:

PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

Değişiklik yaparsanız SSH servisini yeniden başlatmayı unutmayın:

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:

ssh -v evrenbal@sunucu_ip

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

# 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.