← man/network
sshd — man sshd — 80×24
ugur@toprak:~/man/network$man sshd
Bölüm 8

sshd

OpenSSH daemon

Synopsis

     sshd [-46DdeGiqTtV] [-C connection_spec] [-c host_certificate_file] [-E log_file]
	  [-f config_file] [-g login_grace_time] [-h host_key_file] [-o option] [-p port] [-u len]

Description

sshd (OpenSSH Daemon), ssh(1) için arka plan programıdır (daemon). Güvenli olmayan bir ağ üzerinden güvenilmeyen iki ana bilgisayar arasında güvenli, şifreli iletişim sağlar.

sshd, istemcilerden gelen bağlantıları dinler. Normalde önyükleme (boot) sırasında /etc/rc dosyasından başlatılır. Gelen her bağlantı için yeni bir arka plan programı çatallar (fork). Çatallanan bu arka plan programları anahtar değişimi, şifreleme, kimlik doğrulama, komut çalıştırma ve veri alışverişi işlemlerini yürütür.

sshd, komut satırı seçenekleri veya bir yapılandırma dosyası (varsayılan olarak sshd_config(5)) kullanılarak yapılandırılabilir; komut satırı seçenekleri yapılandırma dosyasında belirtilen değerleri geçersiz kılar. sshd, bir kapatma sinyali (SIGHUP) aldığında yapılandırma dosyasını yeniden okumak için kendisini başlatıldığı ad ve seçeneklerle (örneğin /usr/sbin/sshd) tekrar çalıştırır.

Seçenekler aşağıdaki gibidir:

  • -4: sshd'yi yalnızca IPv4 adreslerini kullanmaya zorlar.

  • -6: sshd'yi yalnızca IPv6 adreslerini kullanmaya zorlar.

-C connection_spec Genişletilmiş test modu -T için kullanılacak bağlantı parametrelerini belirtir. Sağlanırsa, yapılandırma standart çıktıya yazılmadan önce yapılandırma dosyasındaki geçerli Match yönergeleri uygulanır. Bağlantı parametreleri anahtar=değer çiftleri olarak sağlanır ve herhangi bir sırada, birden fazla -C seçeneğiyle veya virgülle ayrılmış bir liste olarak sunulabilir. Anahtar kelimeler "addr", "user", "host", "laddr", "lport" ve "rdomain" olup sırasıyla kaynak adresi, kullanıcı, çözümlenmiş kaynak ana bilgisayar adı, yerel adres, yerel port numarası ve yönlendirme alanını (routing domain) temsil eder. Ek olarak, tanınmayan bir kullanıcı adından gelen bir bağlantıyı simüle etmek için "invalid-user" bayrağı (değer parametresi almaz) belirtilebilir.

-c host_certificate_file Anahtar değişimi sırasında sshd'yi tanımlamak için kullanılacak bir sertifika dosyasının yolunu belirtir. Sertifika dosyası, -h seçeneği veya HostKey yapılandırma yönergesi kullanılarak belirtilen bir ana bilgisayar anahtarı (host key) dosyasıyla eşleşmelidir.

  • -D: Bu seçenek belirtildiğinde, sshd arka plana geçmez ve bir daemon haline gelmez. Bu, sshd'nin kolayca izlenmesini sağlar.

  • -d: Hata ayıklama (debug) modu. Sunucu, standart hataya (standard error) ayrıntılı hata ayıklama çıktıları gönderir ve kendisini arka plana almaz. Sunucu ayrıca fork(2) yapmaz ve yalnızca tek bir bağlantıyı işler. Bu seçenek yalnızca sunucuda hata ayıklama yapılması amacıyla tasarlanmıştır. Birden fazla -d seçeneği hata ayıklama seviyesini artırır. Maksimum seviye 3'tür.

-E log_file Hata ayıklama günlüklerini (logs) sistem günlüğü yerine log_file dosyasına ekler.

  • -e: Hata ayıklama günlüklerini sistem günlüğü yerine standart hataya yazar.

-f config_file Yapılandırma dosyasının adını belirtir. Varsayılan dosya /etc/ssh/sshd_config adresindedir. sshd, bir yapılandırma dosyası bulunmadığında başlatılmayı reddeder.

  • -G: Yapılandırma dosyasını ayrıştırır ve yazdırır. Yapılandırma dosyasının geçerliliğini denetler, etkin yapılandırmayı stdout'a yazdırır ve ardından çıkış yapar. İsteğe bağlı olarak, bir veya daha fazla -C seçeneği ile bağlantı parametreleri belirtilerek Match kuralları uygulanabilir.

-g login_grace_time İstemcilerin kendilerini doğrulamaları için tanınan ek süreyi (varsayılan olarak 120 saniye) belirtir. İstemci bu saniye içinde kullanıcının kimliğini doğrulayamazsa, sunucu bağlantıyı keser ve çıkış yapar. Sıfır değeri herhangi bir sınır olmadığını gösterir.

-h host_key_file Bir ana bilgisayar anahtarının (host key) okunacağı dosyayı belirtir. sshd root olarak çalıştırılmıyorsa bu seçenek verilmelidir (çünkü normal ana bilgisayar anahtarı dosyaları normalde root dışındaki hiç kimse tarafından okunamaz). Varsayılanlar /etc/ssh/ssh_host_ecdsa_key, /etc/ssh/ssh_host_ed25519_key ve /etc/ssh/ssh_host_rsa_key'dir. Farklı ana bilgisayar anahtarı algoritmaları için birden fazla ana bilgisayar anahtarı dosyasına sahip olmak mümkündür.

  • -i: sshd'nin inetd(8) üzerinden çalıştırıldığını belirtir.

-o option Yapılandırma dosyasında kullanılan biçimde seçenekler sunmak için kullanılabilir. Bu, ayrı bir komut satırı bayrağı bulunmayan seçenekleri belirtmek için kullanışlıdır. Seçeneklerin ve değerlerinin tüm ayrıntıları için sshd_config(5) sayfasına bakın.

-p port Sunucunun bağlantıları dinleyeceği portu belirtir (varsayılan 22). Birden fazla port seçeneğine izin verilir. Komut satırında bir port belirtildiğinde, yapılandırma dosyasında Port seçeneği ile belirtilen portlar yoksayılır. ListenAddress seçeneği kullanılarak belirtilen portlar, komut satırı portlarını geçersiz kılar.

  • -q: Sessiz mod. Sistem günlüğüne hiçbir şey gönderilmez. Normalde her bağlantının başlangıcı, kimlik doğrulaması ve sonlandırılması günlüğe kaydedilir.

  • -T: Genişletilmiş test modu. Yapılandırma dosyasının geçerliliğini denetler, etkin yapılandırmayı stdout'a yazdırır ve ardından çıkış yapar. İsteğe bağlı olarak, bir veya daha fazla -C seçeneği ile bağlantı parametreleri belirtilerek Match kuralları uygulanabilir. Bu, -G bayrağına benzer ancak -t bayrağı tarafından gerçekleştirilen ek testleri de içerir.

  • -t: Test modu. Yalnızca yapılandırma dosyasının geçerliliğini ve anahtarların sağlamlığını denetler. Yapılandırma seçenekleri değişebileceğinden, sshd'yi güvenilir bir şekilde güncellemek için bu kullanışlıdır.

  • -u len: Bu seçenek, utmp yapısında uzak ana bilgisayar adını tutan alanın boyutunu belirtmek için kullanılır. Çözümlenen ana bilgisayar adı len değerinden uzunsa, bunun yerine noktalı ondalık değer kullanılacaktır. Bu, bu alanı taşıran çok uzun ana bilgisayar adlarına sahip ana bilgisayarların yine de benzersiz şekilde tanımlanabilmesini sağlar. -u0 belirtilmesi, utmp dosyasına yalnızca noktalı ondalık adreslerin yerleştirilmesi gerektiğini gösterir. -u0, kimlik doğrulama mekanizması veya yapılandırma gerektirmediği sürece sshd'nin DNS istekleri yapmasını önlemek için de kullanılabilir. DNS gerektirebilecek kimlik doğrulama mekanizmaları arasında HostbasedAuthentication ve bir anahtar dosyasında from="pattern-list" seçeneğinin kullanılması yer alır. DNS gerektiren yapılandırma seçenekleri arasında AllowUsers veya DenyUsers içinde bir USER@HOST modelinin kullanılması bulunur.

  • -V: Sürüm numarasını görüntüler ve çıkış yapar.

Authentication

OpenSSH SSH daemon yalnızca SSH protokol 2'yi destekler. Her ana bilgisayarın, ana bilgisayarı tanımlamak için kullanılan, ana bilgisayara özgü bir anahtarı vardır. Bir istemci bağlandığında, arka plan programı kendi genel ana bilgisayar anahtarı (public host key) ile yanıt verir. İstemci, ana bilgisayar anahtarının değişmediğini doğrulamak için bunu kendi veritabanıyla karşılaştırır. İleriye yönelik gizlilik (forward secrecy), bir Diffie-Hellman anahtar anlaşması yoluyla sağlanır. Bu anahtar anlaşması, paylaşılan bir oturum anahtarı ile sonuçlanır. Oturumun geri kalanı simetrik bir şifreleyici (symmetric cipher) kullanılarak şifrelenir. İstemci, sunucu tarafından sunulanlar arasından kullanılacak şifreleme algoritmasını seçer. Ek olarak, oturum bütünlüğü kriptografik bir mesaj doğrulama kodu (MAC) aracılığıyla sağlanır.

Son olarak, sunucu ve istemci bir kimlik doğrulama diyaloğuna girer. İstemci; ana bilgisayar tabanlı kimlik doğrulama (host-based authentication), genel anahtar kimlik doğrulaması (public key authentication), sınama-yanıt kimlik doğrulaması (challenge-response authentication) veya şifre kimlik doğrulaması (password authentication) kullanarak kendisini doğrulamaya çalışır.

Kimlik doğrulama türünden bağımsız olarak, hesabın erişilebilir olduğundan emin olmak için hesap kontrol edilir. Hesap kilitliyse, DenyUsers listesinde yer alıyorsa veya grubu DenyGroups listesinde yer alıyorsa hesaba erişilemez. Kilitli bir hesabın tanımı sisteme bağlıdır. Bazı platformların kendi hesap veritabanları vardır (örneğin AIX) ve bazıları passwd alanını değiştirir (Solaris ve UnixWare'de 'LK', HP-UX'te '*', Tru64'te 'Nologin' içeren, FreeBSD'de başında 'LOCKED' olan ve çoğu Linux'ta başında '!' olan). Genel anahtara (public-key) izin vermeye devam ederken hesap için şifre kimlik doğrulamasını devre dışı bırakma gereksinimi varsa, passwd alanı bu değerlerden farklı bir değere ayarlanmalıdır (örneğin 'NP' veya 'NP').

İstemci kendisini başarıyla doğrularsa, oturumun hazırlanması için bir diyaloğa girilir. Bu sırada istemci, güvenli kanal üzerinden bir yalancı tty (pseudo-tty) ayrılması, X11 bağlantılarının yönlendirilmesi, TCP bağlantılarının yönlendirilmesi veya kimlik doğrulama aracısı (authentication agent) bağlantısının yönlendirilmesi gibi taleplerde bulunabilir.

Bundan sonra, istemci etkileşimli bir kabuk veya sshd'nin kullanıcının kabuğu aracılığıyla -c seçeneğini kullanarak çalıştıracağı etkileşimli olmayan bir komutun yürütülmesini talep eder. Taraflar daha sonra oturum moduna girerler. Bu modda, her iki taraf da istedikleri zaman veri gönderebilir ve bu veriler sunucu tarafındaki kabuğa/komuta ve istemci tarafındaki kullanıcı terminaline/terminalinden yönlendirilir.

Kullanıcı programı sonlandığında ve yönlendirilen tüm X11 ve diğer bağlantılar kapatıldığında, sunucu komut çıkış durumunu istemciye gönderir ve her iki taraf da çıkış yapar.

Login Process

Bir kullanıcı başarıyla oturum açtığında sshd şunları yapar:

  1. Oturum açma bir tty üzerindeyse ve herhangi bir komut belirtilmemişse, son oturum açma zamanını ve /etc/motd dosyasını yazdırır (yapılandırma dosyasında veya ~/.hushlogin tarafından engellenmediği sürece; DOSYALAR bölümüne bakın).

  2. Oturum açma bir tty üzerindeyse, oturum açma zamanını kaydeder.

  3. /etc/nologin dosyasını kontrol eder; eğer varsa, içeriğini yazdırır ve çıkar (root hariç).

  4. Normal kullanıcı yetkileriyle çalışacak şekilde değişir.

  5. Temel ortamı (environment) kurar.

  6. ~/.ssh/environment dosyası mevcutsa ve kullanıcıların kendi ortamlarını değiştirmelerine izin veriliyorsa bu dosyayı okur. sshd_config(5) içindeki PermitUserEnvironment seçeneğine bakın.

  7. Kullanıcının ev dizinine (home directory) geçer.

  8. ~/.ssh/rc mevcutsa ve sshd_config(5) PermitUserRC seçeneği ayarlanmışsa bunu çalıştırır; aksi takdirde /etc/ssh/sshrc mevcutsa bunu çalıştırır; aksi takdirde xauth(1) çalıştırır. "rc" dosyalarına standart girdi üzerinden X11 kimlik doğrulama protokolü ve tanımlama bilgisi (cookie) verilir. Aşağıdaki SSHRC bölümüne bakın.

  9. Kullanıcının kabuğunu veya komutunu çalıştırır. Tüm komutlar, sistem şifre veritabanında belirtilen kullanıcının oturum açma kabuğu (login shell) altında çalıştırılır.

Sshrc

~/.ssh/rc dosyası mevcutsa, sh(1) bunu ortam dosyalarını okuduktan sonra ancak kullanıcının kabuğunu veya komutunu başlatmadan önce çalıştırır. stdout üzerinde herhangi bir çıktı üretmemelidir; bunun yerine stderr kullanılmalıdır. X11 yönlendirmesi kullanımdaysa, standart girdisinden "proto cookie" çiftini (ve ortamında DISPLAY değişkenini) alacaktır. Komut dosyası xauth(1) çağrısı yapmalıdır çünkü sshd, X11 çerezlerini eklemek için xauth'u otomatik olarak çalıştırmayacaktır.

Bu dosyanın birincil amacı, kullanıcının ev dizini erişilebilir hale gelmeden önce gerekebilecek tüm başlatma rutinlerini çalıştırmaktır; AFS bu tür bir ortamın özel bir örneğidir.

Bu dosya muhtemelen bazı başlatma kodları ve ardından şuna benzer bir yapı içerecektir:

if read proto cookie && [ -n "$DISPLAY" ]; then
if [ `echo $DISPLAY | cut -c1-10` = 'localhost:' ]; then
# X11UseLocalhost=yes
echo add unix:`echo $DISPLAY |
cut -c11-` $proto $cookie
else
# X11UseLocalhost=no
echo add $DISPLAY $proto $cookie
fi | xauth -q -
fi

Bu dosya mevcut değilse, /etc/ssh/sshrc çalıştırılır ve o da mevcut değilse, çerezi eklemek için xauth kullanılır.

Authorized_Keys File Format

AuthorizedKeysFile, genel anahtar kimlik doğrulaması için genel anahtarları içeren dosyaları belirtir; bu seçenek belirtilmemişse varsayılan ~/.ssh/authorized_keys ve ~/.ssh/authorized_keys2'dir. Dosyanın her satırı bir anahtar içerir ('#' ile başlayan satırlar ve boş satırlar yorum olarak yoksayılır). Genel anahtarlar boşlukla ayrılmış şu alanlardan oluşur: seçenekler (options), anahtar türü (keytype), base64 kodlu anahtar (base64-encoded key), yorum (comment). Seçenekler alanı isteğe bağlıdır. Desteklenen anahtar türleri şunlardır:

sk-ecdsa-sha2-nistp256@openssh.com ecdsa-sha2-nistp256 ecdsa-sha2-nistp384 ecdsa-sha2-nistp521 sk-ssh-ed25519@openssh.com ssh-ed25519 ssh-rsa

Yorum alanı hiçbir şey için kullanılmaz (ancak kullanıcının anahtarı tanımlaması için kolaylık sağlayabilir).

Bu dosyadaki satırların (genel anahtar kodlamasının boyutu nedeniyle) birkaç yüz bayt uzunluğunda olabileceğini ve 16 kilobite kadar RSA anahtarlarına izin veren 8 kilobaytlık bir sınıra sahip olduğunu unutmayın. Bunları elle yazmak istemezsiniz; bunun yerine id_ecdsa.pub, id_ecdsa_sk.pub, id_ed25519.pub, id_ed25519_sk.pub veya id_rsa.pub dosyasını kopyalayıp düzenleyin.

sshd, minimum 1024 bitlik bir RSA anahtar modülü boyutu uygular.

Seçenekler (varsa), virgülle ayrılmış seçenek özelliklerinden oluşur. Çift tırnak içi hariç hiçbir boşluğa izin verilmez. Aşağıdaki seçenek özellikleri desteklenir (seçenek anahtar kelimelerinin büyük/küçük harfe duyarsız olduğunu unutmayın):

agent-forwarding Daha önce restrict seçeneğiyle devre dışı bırakılmış olan kimlik doğrulama aracısı yönlendirmesini etkinleştirir.

cert-authority Listelenen anahtarın, kullanıcı kimlik doğrulaması için imzalı sertifikaları doğrulamak üzere güvenilen bir sertifika yetkilisi (CA) olduğunu belirtir.

Sertifikalar, bu anahtar seçeneklerine benzer erişim kısıtlamalarını kodlayabilir. Hem sertifika kısıtlamaları hem de anahtar seçenekleri mevcutsa, ikisinin en kısıtlayıcı birleşimi uygulanır.

command="command" Bu anahtar kimlik doğrulaması için her kullanıldığında belirtilen komutun çalıştırılacağını belirtir. Kullanıcı tarafından sağlanan komut (varsa) yoksayılır. İstemci bir pty talep ederse komut bir pty üzerinde çalıştırılır; aksi takdirde bir tty olmadan çalıştırılır. 8 bitlik temiz bir kanal gerekiyorsa, pty talep edilmemeli veya no-pty belirtilmelidir. Komutun içine ters eğik çizgi ile kaçış karakteri kullanılarak bir tırnak işareti eklenebilir.

Bu seçenek, belirli genel anahtarları yalnızca belirli bir işlemi gerçekleştirmekle sınırlandırmak için yararlı olabilir. Uzak yedeklemelere izin veren ancak başka hiçbir şeye izin vermeyen bir anahtar buna örnek gösterilebilir. İstemcinin, restrict anahtar seçeneği kullanılarak açıkça yasaklanmadığı sürece TCP ve/veya X11 yönlendirmesi belirtebileceğini unutmayın.

İstemci tarafından orijinal olarak sağlanan komut, SSH_ORIGINAL_COMMAND ortam değişkeninde mevcuttur. Bu seçeneğin kabuk, komut veya alt sistem yürütmesi için geçerli olduğunu unutmayın. Ayrıca bu komutun bir sshd_config(5) ForceCommand yönergesi tarafından geçersiz kılınabileceğini unutmayın.

Bir komut belirtilmişse ve kimlik doğrulama için kullanılan bir sertifikaya zorunlu bir komut gömülmüşse, sertifika yalnızca iki komut birbiriyle aynı olduğunda kabul edilecektir.

environment="NAME=value" Bu anahtar kullanılarak oturum açıldığında belirtilen dizgenin ortama ekleneceğini belirtir. Bu şekilde ayarlanan ortam değişkenleri, diğer varsayılan ortam değerlerini geçersiz kılar. Bu türden birden fazla seçeneğe izin verilir. Ortam işleme varsayılan olarak devre dışıdır ve PermitUserEnvironment seçeneği aracılığıyla kontrol edilir.

expiry-time="timespec" Anahtarın artık kabul edilmeyeceği bir zaman belirtir. Zaman, YYYYMMDD[Z] tarihi veya YYYYMMDDHHMM[SS][Z] zamanı olarak belirtilebilir. Tarih ve saatler, Z karakteriyle sonlandırılmadıkça sistem saat dilimine göre yorumlanacaktır; Z karakteriyle sonlandırılması durumunda ise UTC saat dilimine göre yorumlanacaktır.

from="pattern-list" Genel anahtar kimlik doğrulamasına ek olarak, uzak ana bilgisayarın kurallı adının veya IP adresinin virgülle ayrılmış kalıp listesinde bulunması gerektiğini belirtir. Kalıplar hakkında daha fazla bilgi için ssh_config(5) içindeki PATTERNS bölümüne bakın.

Ana bilgisayar adlarına veya adreslerine uygulanabilecek joker karakter eşleşmesine ek olarak, bir from deyimi CIDR adres/maske_uzunluğu notasyonunu kullanarak IP adresleriyle eşleşebilir.

Bu seçeneğin amacı isteğe bağlı olarak güvenliği artırmaktır: genel anahtar kimlik doğrulaması tek başına ağa, ad sunucularına veya anahtar dışındaki hiçbir şeye güvenmez; ancak birisi anahtarı bir şekilde çalarsa, anahtar saldırganın dünyanın her yerinden oturum açmasına izin verir. Bu ek seçenek, çalınan bir anahtarın kullanılmasını zorlaştırır (yalnızca anahtarın değil, ad sunucularının ve/veya yönlendiricilerin de güvenliğinin ihlal edilmesi gerekir).

no-agent-forwarding Bu anahtar kimlik doğrulaması için kullanıldığında kimlik doğrulama aracısı yönlendirmesini yasaklar.

no-port-forwarding Bu anahtar kimlik doğrulaması için kullanıldığında TCP yönlendirmesini yasaklar. İstemci tarafından yapılan tüm port yönlendirme talepleri bir hata döndürecektir. Bu, örneğin command seçeneği ile birlikte kullanılabilir.

no-pty tty ayrılmasını engeller (bir pty ayırma talebi başarısız olur).

no-user-rc ~/.ssh/rc dosyasının çalıştırılmasını devre dışı bırakır.

no-X11-forwarding Bu anahtar kimlik doğrulaması için kullanıldığında X11 yönlendirmesini yasaklar. İstemci tarafından yapılan tüm X11 yönlendirme talepleri bir hata döndürecektir.

permitlisten="[host:]port" ssh(1) -R seçeneğiyle uzak port yönlendirmesini yalnızca belirtilen ana bilgisayar (isteğe bağlı) ve port üzerinde dinleyecek şekilde sınırlandırır. IPv6 adresleri, adres köşeli parantez içine alınarak belirtilebilir. Virgülle ayrılmış birden fazla permitlisten seçeneği uygulanabilir. Ana bilgisayar adları, ssh_config(5) içindeki PATTERNS bölümünde açıklandığı gibi joker karakterler içerebilir. * şeklinde bir port belirtimi herhangi bir portla eşleşir. GatewayPorts ayarının dinleme adreslerini daha da kısıtlayabileceğini unutmayın. Yönlendirme talep edildiğinde bir dinleme ana bilgisayarı belirtilmemişse ssh(1)'in "localhost" ana bilgisayar adını göndereceğini ve bu adın açık localhost adresleri olan "127.0.0.1" ve "::1" adreslerinden farklı değerlendirildiğini unutmayın.

permitopen="host:port" ssh(1) -L seçeneyle yerel port yönlendirmesini yalnızca belirtilen ana bilgisayar ve porta bağlanacak şekilde sınırlandırır. IPv6 adresleri, adres köşeli parantez içine alınarak belirtilebilir. Virgülle ayrılmış birden fazla permitopen seçeneği uygulanabilir. Belirtilen ana bilgisayar adlarında kalıp eşleme veya ad araması gerçekleştirilmez; bunlar tam ana bilgisayar adları ve/veya adresleri olmalıdır. * şeklinde bir port belirtimi herhangi bir portla eşleşir.

port-forwarding Daha önce restrict seçeneğiyle devre dışı bırakılmış olan port yönlendirmesini etkinleştirir.

principals="principals" Bir cert-authority satırında, sertifika kimlik doğrulaması için izin verilen yetkilileri (principals) virgülle ayrılmış bir liste olarak belirtir. Sertifikanın kabul edilmesi için sertifikanın yetkili listesinde bu listeden en az bir adın bulunması gerekir. Bu seçenek, cert-authority seçeneği kullanılarak güvenilir sertifika imzalayıcısı olarak işaretlenmemiş anahtarlar için yoksayılır.

pty Daha önce restrict seçeneğiyle devre dışı bırakılmış olan PTY ayrılmasına izin verir.

no-touch-required Bu anahtar kullanılarak yapılan imzalar için kullanıcı varlığının gösterilmesini gerektirmez. Bu seçenek yalnızca FIDO kimlik doğrulayıcı algoritmaları ecdsa-sk ve ed25519-sk için anlamlıdır.

verify-required Bu anahtar kullanılarak yapılan imzaların kullanıcıyı (örneğin bir PIN aracılığıyla) doğruladığını kanıtlamasını gerektirir. Bu seçenek yalnızca FIDO kimlik doğrulayıcı algoritmaları ecdsa-sk ve ed25519-sk için anlamlıdır.

restrict Tüm kısıtlamaları etkinleştirir, yani port, aracı ve X11 yönlendirmesini devre dışı bırakmanın yanı sıra PTY ayrılmasını ve ~/.ssh/rc dosyasının çalıştırılmasını da devre dışı bırakır. Gelecekte authorized_keys dosyalarına herhangi bir kısıtlama özelliği eklenirse, bunlar da bu kümeye dahil edilecektir.

tunnel="n" Sunucuda bir tun(4) aygıtını zorunlu kılar. Bu seçenek olmadan, istemci bir tünel talep ederse bir sonraki kullanılabilir aygıt kullanılacaktır.

user-rc Daha önce restrict seçeneğiyle devre dışı bırakılmış olan ~/.ssh/rc dosyasının çalıştırılmasını etkinleştirir.

X11-forwarding Daha önce restrict seçeneğiyle devre dışı bırakılmış olan X11 yönlendirmesine izin verir.

Örnek bir authorized_keys dosyası:

# Satır başında yorumlara izin verilir. Boş satırlara izin verilir.
# Kısıtlamasız düz anahtar
ssh-rsa ...
# Zorunlu komut, PTY ve tüm yönlendirmeleri devre dışı bırak
restrict,command="dump /home" ssh-rsa ...
# ssh -L yönlendirme hedeflerinin kısıtlanması
permitopen="192.0.2.1:80",permitopen="192.0.2.2:25" ssh-rsa ...
# ssh -R yönlendirme dinleyicilerinin kısıtlanması
permitlisten="localhost:8080",permitlisten="[::1]:22000" ssh-rsa ...
# Tünel yönlendirmesi için yapılandırma
tunnel="0",command="sh /etc/netstart tun0" ssh-rsa ...
# PTY ayrılmasına izin vermek için kısıtlamanın geçersiz kılınması
restrict,pty,command="nethack" ssh-rsa ...
# Dokunma gerektirmeden FIDO anahtarına izin ver
no-touch-required sk-ecdsa-sha2-nistp256@openssh.com ...
# FIDO anahtarı için kullanıcı doğrulaması (örneğin PIN veya biyometrik) gerektir
verify-required sk-ecdsa-sha2-nistp256@openssh.com ...
# CA anahtarına güven, sertifikada talep edilirse dokunmasız FIDO'ya izin ver
cert-authority,no-touch-required,principals="user_a" ssh-rsa ...

Ssh_Known_Hosts File Format

/etc/ssh/ssh_known_hosts ve ~/.ssh/known_hosts dosyaları bilinen tüm ana bilgisayarlar için ana bilgisayar genel anahtarlarını (host public keys) içerir. Genel dosya yönetici tarafından hazırlanmalıdır (isteğe bağlı) ve kullanıcı bazındaki dosya otomatik olarak güncellenir: kullanıcı bilinmeyen bir ana bilgisayara her bağlandığında, ana bilgisayarın anahtarı kullanıcı bazındaki dosyaya eklenir.

Bu dosyalardaki her satır şu alanları içerir: işaretçi (marker, isteğe bağlı), ana bilgisayar adları (hostnames), anahtar türü (keytype), base64 kodlu anahtar (base64-encoded key), yorum (comment). Alanlar boşluklarla ayrılır.

İşaretçi isteğe bağlıdır, ancak varsa satırın bir sertifika yetkilisi (CA) anahtarı içerdiğini belirtmek için "@cert-authority" veya satırda yer alan anahtarın iptal edildiğini ve kesinlikle kabul edilmemesi gerektiğini belirtmek için "@revoked" olmalıdır. Bir anahtar satırında yalnızca tek bir işaretçi kullanılmalıdır.

Ana bilgisayar adları, virgülle ayrılmış bir kalıp listesidir ('*' ve '?' joker karakter işlevi görür); her bir kalıp sırasıyla ana bilgisayar adıyla karşılaştırılır. sshd, HostbasedAuthentication kullanırken olduğu gibi bir istemcinin kimliğini doğrularken bu, kurallı istemci ana bilgisayar adı olacaktır. ssh(1) bir sunucunun kimliğini doğrularken bu, kullanıcı tarafından verilen ana bilgisayar adı, belirtilmişse ssh(1) HostkeyAlias değeri veya ssh(1) CanonicalizeHostname seçeneği kullanılmışsa kurallı sunucu ana bilgisayar adı olacaktır.

Bir kalıbın önüne olumsuzlama belirtmek için '!' de getirilebilir: ana bilgisayar adı olumsuzlanmış bir kalıpla eşleşirse, satırdaki başka bir kalıpla eşleşmiş olsa bile (o satır tarafından) kabul edilmez. Bir ana bilgisayar adı veya adres isteğe bağlı olarak '[' ve ']' köşeli parantezleri içine alınabilir ve ardından ':' ve standart dışı bir port numarası gelebilir.

Alternatif olarak ana bilgisayar adları, dosya içeriğinin ifşa olması durumunda ana bilgisayar adlarını ve adreslerini gizleyen özetlenmiş (hashed) bir biçimde saklanabilir. Özetlenmiş ana bilgisayar adları '|' karakteri ile başlar. Tek bir satırda yalnızca tek bir özetlenmiş ana bilgisayar adı bulunabilir ve yukarıdaki olumsuzlama veya joker karakter işleçlerinin hiçbiri uygulanamaz.

Anahtar türü ve base64 kodlu anahtar doğrudan ana bilgisayar anahtarından alınır; bunlar örneğin /etc/ssh/ssh_host_rsa_key.pub dosyasından elde edilebilir. İsteğe bağlı yorum alanı satırın sonuna kadar devam eder ve kullanılmaz.

'#' ile başlayan satırlar ve boş satırlar yorum olarak yoksayılır.

Ana bilgisayar kimlik doğrulaması gerçekleştirilirken, eşleşen herhangi bir satırda doğru anahtar varsa kimlik doğrulaması kabul edilir; bu anahtar ya tam olarak eşleşen bir anahtardır ya da sunucu kimlik doğrulaması için bir sertifika sunmuşsa sertifikayı imzalayan sertifika yetkilisinin anahtarıdır. Bir anahtara sertifika yetkilisi olarak güvenilebilmesi için yukarıda açıklanan "@cert-authority" işaretçisini kullanması gerekir.

Bilinen ana bilgisayarlar dosyası, ilişkili özel anahtarın çalındığı bilindiğinde olduğu gibi anahtarları iptal edilmiş olarak işaretleme olanağı da sağlar. İptal edilen anahtarlar, anahtar satırının başına "@revoked" işaretçisi eklenerek belirtilir ve kimlik doğrulaması veya sertifika yetkilisi olarak asla kabul edilmezler, aksine karşılaşıldığında ssh(1) tarafından bir uyarı üretilmesine neden olurlar.

Aynı adlar için birkaç satıra veya farklı ana bilgisayar anahtarlarına sahip olunmasına izin verilir (ancak önerilmez). Farklı alan adlarından gelen ana bilgisayar adlarının kısa biçimleri dosyaya eklendiğinde bu kaçınılmaz olarak gerçekleşecektir. Dosyaların çelişkili bilgiler içermesi mümkündür; dosyalardan herhangi birinde geçerli bilgi bulunabiliyorsa kimlik doğrulaması kabul edilir.

Bu dosyalardaki satırların tipik olarak yüzlerce karakter uzunluğunda olduğunu ve ana bilgisayar anahtarlarını kesinlikle elle yazmak istemeyeceğinizi unutmayın. Bunun yerine bunları bir betik, ssh-keyscan(1) aracılığıyla veya örneğin /etc/ssh/ssh_host_rsa_key.pub dosyasını alıp başına ana bilgisayar adlarını ekleyerek oluşturun. ssh-keygen(1) ayrıca bir ana bilgisayar adıyla eşleşen ana bilgisayarların kaldırılması ve tüm ana bilgisayar adlarının özetlenmiş gösterimlerine dönüştürülmesi dahil olmak üzere ~/.ssh/known_hosts için bazı temel otomatik düzenleme seçenekleri sunar.

Örnek bir ssh_known_hosts dosyası:

# Satır başında yorumlara izin verilir
cvs.example.net,192.0.2.10 ssh-rsa AAAA1234.....=
# Özetlenmiş bir ana bilgisayar adı
|1|JfKTdBh7rNbXkVAQCRp4OQoPfmI=|USECr3SWf1JUPsms5AqfD5QfxkM= ssh-rsa AAAA1234.....=
# İptal edilmiş bir anahtar
@revoked * ssh-rsa AAAAB5W...
# Bir CA anahtarı, *.mydomain.com veya *.mydomain.org içindeki herhangi bir ana bilgisayar için kabul edilir
@cert-authority *.mydomain.org,*.mydomain.com ssh-rsa AAAAB5W...

Files

~/.hushlogin Bu dosya sırasıyla PrintLastLog ve PrintMotd etkinse son oturum açma zamanının ve /etc/motd dosyasının yazdırılmasını engellemek için kullanılır. Banner tarafından belirtilen afişin yazdırılmasını engellemez.

~/.rhosts Bu dosya ana bilgisayar tabanlı kimlik doğrulaması için kullanılır (daha fazla bilgi için ssh(1) sayfasına bakın). Bazı makinelerde, kullanıcının ev dizini bir NFS bölümündeyse sshd bu dosyayı root olarak okuduğundan bu dosyanın herkes tarafından okunabilir olması gerekebilir. Ek olarak bu dosya kullanıcıya ait olmalı ve başka hiç kimse için yazma izinlerine sahip olmamalıdır. Çoğu makine için önerilen izin, kullanıcı için okuma/yazma olması ve başkaları tarafından erişilemez olmasıdır.

~/.shosts Bu dosya .rhosts ile tamamen aynı şekilde kullanılır, ancak rlogin/rsh ile oturum açmaya izin vermeden ana bilgisayar tabanlı kimlik doğrulamasına izin verir.

~/.ssh/ Bu dizin, kullanıcıya özgü tüm yapılandırma ve kimlik doğrulama bilgileri için varsayılan konumdur. Bu dizinin tüm içeriğini gizli tutmak için genel bir gereklilik yoktur, ancak önerilen izinler kullanıcı için okuma/yazma/çalıştırma olması ve başkaları tarafından erişilemez olmasıdır.

~/.ssh/authorized_keys Bu kullanıcı olarak oturum açmak için kullanılabilecek genel anahtarları (ECDSA, Ed25519, RSA) listeler. Bu dosyanın biçimi yukarıda açıklanmıştır. Dosyanın içeriği son derece hassas değildir, ancak önerilen izinler kullanıcı için okuma/yazma olması ve başkaları tarafından erişilemez olmasıdır.

Bu dosya, ~/.ssh dizini veya kullanıcının ev dizini diğer kullanıcılar tarafından yazılabilir durumdaysa dosya yetkisiz kullanıcılar tarafından değiştirilebilir veya değiştirilebilir. Bu durumda, StrictModes seçeneği "no" olarak ayarlanmadığı sürece sshd bunun kullanılmasına izin vermeyecektir.

~/.ssh/environment Bu dosya oturum açıldığında (varsa) ortama okunur. Yalnızca boş satırlar, yorum satırları ('#' ile başlayan) ve name=value biçimindeki atama satırlarını içerebilir. Dosya yalnızca kullanıcı tarafından yazılabilir olmalıdır; başka hiç kimse tarafından okunabilir olması gerekmez. Ortam işleme varsayılan olarak devre dışıdır ve PermitUserEnvironment seçeneği aracılığıyla kontrol edilir.

~/.ssh/known_hosts Kullanıcının oturum açtığı ve sistem genelindeki bilinen ana bilgisayar anahtarları listesinde henüz bulunmayan tüm ana bilgisayarlar için ana bilgisayar anahtarlarının bir listesini içerir. Bu dosyanın biçimi yukarıda açıklanmıştır. Bu dosya yalnızca root/sahibi tarafından yazılabilir olmalı ve herkes tarafından okunabilir olabilir, ancak olması zorunlu değildir.

~/.ssh/rc Kullanıcının ev dizini erişilebilir hale gelmeden önce çalıştırılacak başlatma rutinlerini içerir. Bu dosya yalnızca kullanıcı tarafından yazılabilir olmalı ve başka hiç kimse tarafından okunabilir olması gerekmez.

/etc/hosts.equiv Bu dosya ana bilgisayar tabanlı kimlik doğrulaması içindir (bkz. ssh(1)). Yalnızca root tarafından yazılabilir olmalıdır.

/etc/moduli "Diffie-Hellman Group Exchange" anahtar değişimi yöntemi için kullanılan Diffie-Hellman gruplarını içerir. Dosya biçimi moduli(5) sayfasında açıklanmıştır. Bu dosyada kullanılabilir hiçbir grup bulunamazsa sabit dahili gruplar kullanılacaktır.

/etc/motd Bkz. motd(5).

/etc/nologin Bu dosya mevcutsa, sshd root dışındaki hiç kimsenin oturum açmasına izin vermez. Dosyanın içeriği oturum açmaya çalışan herkese gösterilir ve root olmayan bağlantılar reddedilir. Dosya herkes tarafından okunabilir olmalıdır.

/etc/shosts.equiv Bu dosya hosts.equiv ile tamamen aynı şekilde kullanılır, ancak rlogin/rsh ile oturum açmaya izin vermeden ana bilgisayar tabanlı kimlik doğrulamasına izin verir.

/etc/ssh/ssh_host_ecdsa_key /etc/ssh/ssh_host_ed25519_key /etc/ssh/ssh_host_rsa_key Bu dosyalar ana bilgisayar anahtarlarının özel (private) kısımlarını içerir. Bu dosyalar yalnızca root'a ait olmalı, yalnızca root tarafından okunabilmeli ve başkaları tarafından erişilemez olmalıdır. Bu dosyalar grup/herkes tarafından erişilebilir durumdaysa sshd'nin başlatılmayacağını unutmayın.

/etc/ssh/ssh_host_ecdsa_key.pub /etc/ssh/ssh_host_ed25519_key.pub /etc/ssh/ssh_host_rsa_key.pub Bu dosyalar ana bilgisayar anahtarlarının genel (public) kısımlarını içerir. Bu dosyalar herkes tarafından okunabilir olmalı ancak yalnızca root tarafından yazılabilir olmalıdır. İçerikleri ilgili özel kısımlarla eşleşmelidir. Bu dosyalar aslında hiçbir şey için kullanılmaz; içeriklerinin bilinen ana bilgisayar dosyalarına kopyalanabilmesi amacıyla kullanıcının kolaylığı için sağlanmıştır. Bu dosyalar ssh-keygen(1) kullanılarak oluşturulur.

/etc/ssh/ssh_known_hosts Sistem genelindeki bilinen ana bilgisayar anahtarları listesidir. Bu dosya, sistem yöneticisi tarafından kuruluştaki tüm makinelerin genel ana bilgisayar anahtarlarını içerecek şekilde hazırlanmalıdır. Bu dosyanın biçimi yukarıda açıklanmıştır. Bu dosya yalnızca root/sahibi tarafından yazılabilir olmalı ve herkes tarafından okunabilir olmalıdır.

/etc/ssh/sshd_config sshd için yapılandırma verilerini içerir. Dosya biçimi ve yapılandırma seçenekleri sshd_config(5) sayfasında açıklanmıştır.

/etc/ssh/sshrc ~/.ssh/rc dosyasına benzer şekilde, makineye özgü oturum açma zamanı başlatmalarını küresel olarak belirtmek için kullanılabilir. Bu dosya yalnızca root tarafından yazılabilir olmalı ve herkes tarafından okunabilir olmalıdır.

/var/empty Kimlik doğrulama öncesi aşamada ayrıcalık ayrımı sırasında sshd by kullanılan chroot(2) dizinidir. Dizin hiçbir dosya içermemelidir, root'a ait olmalı ve grup veya herkes tarafından yazılabilir olmamalıdır.

/var/run/sshd.pid Bağlantıları dinleyen sshd'nin işlem kimliğini (process ID) içerir (farklı portlar için eşzamanlı olarak çalışan birkaç arka plan programı varsa bu, en son başlatılanın işlem kimliğini içerir). Bu dosyanın içeriği hassas değildir; herkes tarafından okunabilir olabilir.

See Also

apple_ssh_and_filevault(7), apple_ssh_and_fips(7), scp(1), sftp(1), ssh(1), ssh-add(1), ssh-agent(1), ssh-keygen(1), ssh-keyscan(1), chroot(2), login.conf(5), moduli(5), sshd_config(5), inetd(8), sftp-server(8)

Authors

OpenSSH, Tatu Ylonen tarafından sunulan orijinal ve ücretsiz ssh 1.2.12 sürümünün bir türevidir. Aaron Campbell, Bob Beck, Markus Friedl, Niels Provos, Theo de Raadt ve Dug Song birçok hatayı giderdi, daha yeni özellikleri yeniden ekledi ve OpenSSH'i geliştirdiler. Markus Friedl, SSH protokol sürümleri 1.5 ve 2.0 için destek sağladı. Niels Provos ve Markus Friedl ayrıcalık ayrımı desteğini sağladılar.

macOS 26.4 October 4, 2025 macOS 26.4