ssh(1) | BSD Genel Komutları Kılavuzu | ssh(1) |
ssh - OpenSSH SSH istemcisi (uzaktan oturum açma aracı)
ssh [ -l kullanıcı ] konakismi | kullanıcı@konakismi [ komut ] ssh [ -afgknqstvxACNTX1246 ] [ -b bağlantı_adresi ] [ -c şifre_belirtimi ] [ -e önceleme_krk ] [ -i kimlik_dosyası ] [ -l kullanıcı ] [ -m mac_belirtimi ] [ -o seçenek ] [ -p port ] [ -F yapılandırma_dosyası ] [ -L yerelport:uzakkonak:uzakkonakportu ] [ -R uzakport:yerelkonak:yerelkonakportu ] [ -D port ] konakismi | kullanıcı@konakismi [ komut ]
ssh (SSH istemci) uzaktaki bir makinada komut çalıştırmak için uzaktaki makinada bir kullanıcı oturumu açmayı sağlayan bir uygulamadır. rlogin ve rsh'ın yerini alması amaçlanmıştır. ssh güvenli olmayan bir ağ üzerindeki güvenilir olmayan iki sistemin şifreli dolayısı ile güvenli iletişim kurmalarını sağlar. X11 bağlantıları ve çeşitli TCP/IP bağlantı portları da güvenli kanal üzerinden iletilebilirler.
ssh, konakismi ile belirtilen makinaya bağlanır ve oturum açar. Şayet kullanıcı bir komut belirtmiş ise, kullanıcıya oturum kabuğu yerine komutun çalıştırıldıktan sonraki çıktısı döndürülür.
Kullanıcı, uzaktaki sisteme kimliğini kanıtlamak zorundadır ve bunu kullanılan protokole bağlı olarak farklı yöntemlerle yapabilir:
İlk olarak eğer kullanıcının oturum açtığı sistemin ismi uzaktaki sistemin /etc/hosts.equiv veya /etc/ssh/shosts.equiv dosyalarında bulunuyorsa ve her iki taraftaki kullanıcı isimleri aynı ise, kullanıcın uzak sisteme erişmesine hemen izin verilir. İkinci olarak, eğer .rhosts veya .shosts dosyaları kullanıcının uzaktaki ev dizininde mevcut ise ve istemci makinanın adı ile bu makinadaki kullanıcı adı bu dosyalardan birinde var ise, yine kullanıcın erişmesine izin verilir. Güvenli olmamaması nedeni ile bu çeşit kimlik denetiminin kullanmasına normalde sunucu tarafından izin verilmez.
İkinci kimlik denetim yöntemi ise rhosts veya hosts.equiv yöntemlerinin RSA tabanlı konak kimlik denetimi ile birlikte kullanılmasıdır. Bu şu anlama gelir: eğer erişime $HOME/.rhosts, $HOME/.shosts, /etc/hosts.equiv veya /etc/ssh/shosts.equiv tarafından izin verilmiş ve buna ek olarak sunucu da istemci anahtarını doğrulayabiliyorsa (DOSYALAR bölümündeki /etc/ssh/ssh_known_hosts ve $HOME/.ssh/known_hosts dosyalarının açıklamalarına bakınız), ancak o zaman oturum açılmasına izin verilir. Bu kimlik denetimi yöntemi sayesinde IP kandırmaca, DNS kandırmaca ve yönlendirme kandırmacanın sebep olduğu güvenlik açıkları engellenmiş olur.
Üçüncü kimlik kanıtlama yöntemi olarak, ssh RSA tabanlı kimlik denetimini destekler. Bu senaryo açık anahtarlı kriptografiye dayanır: Şifrelemenin ve şifre çözmenin farklı anahtarlarla yapıldığı ve şifre çözme anahtarını şifreleme anahtarından türetmeniz mümkün olmadığı kripto sistemleri vardır. RSA böyle bir sistemdir. Burada amaç her kullanıcının kimlik denetimi için bir çift genel ve özel anahtar oluşturmasıdır. Sunucu genel anahtara sahip iken, özel anahtar sadece kullanıcının kendisinde bulunur. $HOME/.ssh/authorized_keys dosyası erişim hakkı olan genel anahtarları listeler. Kullanıcı oturum açmak istediği zaman, ssh kimlik denetimi için hangi anahtar çiftini kullanmak istediğini sunucuya bildirir. Sunucu bu anahtarın geçerli olup olmadığına bakar, şayet geçerli ise kullanıcıya (aslında kullanıcı adına çalışan ssh'a) kullanıcının genel anahtarı ile şifrelenmiş bir kimlik sorgusu, rasgele bir sayı gönderir. Şifreli kimlik sorgusu sadece uygun özel anahtar ile çözülebilir. Kullanıcının istemcisi bu kimlik sorgusunu kullanıcının özel anahtarı ile çözer, böylece uygun özel anahtarın varlığını ispatlar (özel anahtarı sunucuya göstermeden).
ssh RSA kimlik denetim protokolünü özdevinimli olarak gerçekleştirir. Kullanıcı kendi RSA anahtar çiftini ssh-keygen(1) komutunu çalıştırarak oluşturur. Bu işlem sayesinde özel anahtar $HOME/.ssh/identity dosyasında ve genel anahtar da $HOME/.ssh/identity.pub doyasında saklanır. Daha sonra kullanıcı identity.pub dosyasını uzak makinenin kullanıcının ev dizinideki $HOME/.ssh/authorized_keys dosyasına kopyalamalıdır. authorized_keys dosyası geleneksel $HOME/.rhosts dosyasına karşılık gelir ve her satırı bir anahtar içerir (satırlar çok uzun olabilmektedir). Sonuçta kullanıcı parola girmeden oturum açmaya hak kazanmaktadır. RSA kimlik denetimi rhosts kimlik denetimine göre daha güvenlidir.
RSA kimlik denetiminin en uygun kullanımı bir kimlik denetimi ajanı ile sağlanabilir. Daha fazla bilgi için ssh-agent(1)'a bakınız.
Şayet bahsedilen kimlik denetimi yöntemleri hata verirler ise, bu sefer ssh kullanıcıya parola sorar. Parola ana makineye denetim için gönderilir. Fakat bütün iletişim şifrelendiği için parola ağı dinlemekte olan biri tarafından görülemez.
Kullanıcı protokolün 2. sürümünü kullanarak bağlantı kurduğunda benzer kimlik denetimi yöntemleri kullanılır. PreferredAuthentications (tercih edilen kimlik kanıtlamaları) için öntanımlı değerler kullanılarak, istemci öncelikle konak tabanlı kimlik denetimi ile uzaktaki makineye erişmeye çalışır; bu yöntemin başarısız olması durumunda, genel anahtarlı kimlik denetimi yöntemi denenir, bu yöntemin de başarısız olması durumunda son olarak klavye etkileşimli ve parolalı kimlik denetimi yöntemine başvurulur.
Genel anahtar yöntemi, bir önceki bölümde anlatılan RSA kimlik denetimi ile benzerdir ve RSA veya DSA algoritmalarının kullanılmasına izin verir: İstemci oturum tanıtıcısını özel anahtarı ($HOME/.ssh/id_dsa veya $HOME/.ssh/id_rsa) ile imzalar ve sonucu sunucuya gönderir. Sunucu, bu imza ile eşleşen genel anahtarın $HOME/.ssh/authorized_keys dosyasında olup olmadığına bakar. Hem anahtarın listede bulunması hem de imzanın doğru olması durumunda istemciye erişim izni verilir. Oturum tanıtıcı sadece sunucu ve istemci tarafından bilinen ortak Diffie-Hellman değerinden türetilir.
Şayet genel anahtarlı kimlik denetimi başarısız olursa ya da desteklenmiyorsa, kullanıcının kimliğini ispatlamak için kullanıcının parolası şifrelenerek sunucuya gönderilebilir.
ssh bunlara ek olarak konak tabanlı ve kimlik sorma/yanıt verme kimlik denetimi yöntemlerini de destekler.
Protokol 2 gizlilik ve bütünlük ilkeleri için ek mekanizmalar sağlar. Gizlilik için veri trafiği 3DES, Blowfish, CAST128 veya Arcfour algoritmaları ile şifrelenir ve bütünlük ilkesi için ise hmac-md5 ya da hmac-sha1 algoritmaları kullanılır. Protokol 1'in bağlantının bütünlüğünü kesinlikle garanti eden bir mekanizmaya gereksinimi olduğu unutulmamalıdır.
Sunucu, kullanıcının kimliğini onayladığı takdirde ya kullanıcının belirttiği komutu yürütür ya da sistemde oturum açar ve uzak sistemde kullanıcının normal bir kabuğa erişmesini sağlar. Uzakta çalıştırılacak komut ya da kabukla gerçekleştirilen bütün iletişim şifrelenir.
Kullanıcı, sözde uçbirim (normal oturum) sağlanması durumunda aşağıdaki önceleme karakterlerini kullanabilir.
Şayet bir uçbirim sağlanmazsa, oturum saydam olur ve ikili veri güvenilir şekilde aktarılabilir. Birçok sistemde önceleme karakterini ``none'' şeklinde ayarlamak tty kullanılsa bile oturumu saydam kılar.
Uzak sistemdeki komut ya da kabuk sonlandığında oturum sonlanır ve bütünl X11 ve TCP/IP bağlantıları kapatılır. Erişilen makinada çalıştırılan uygulamanın çıkış durumu ssh'ın çıkış durumu olarak döndürülür.
Sözde uçbirim istenmesi durumunda ssh birçok işlevi bir önceleme karakteri aracılığı ile desteker.
Tek bir yaklaşık işareti (tilde) ~~ şeklinde ya da yaklaşık işaretini aşağıda belirtilen karakterlerin haricindeki bir karakterin takip etmesi şeklinde gönderilebilir. Önceleme karakterinin önceleme karakteri olarak yorumlanabilmesi karakterden hemen sonra bir satırsonu karakteri gelmelidir. Önceleme karakteri yapılandırma dosyasındaki EscapeChar yapılandırma seçeneği ile ya da komut satırında -e seçeneği ile değiştirilebilir.
Desteklenen öncelemler (öntanımlının '~' olduğu kabulüyle) şunlardır:
Şayet ForwardX11 değişkeni ``yes'' şeklinde ayarlı ise (ya da aşağıdaki -X ve -x seçeneklerinin tanımlarına bakınız) ve kullanıcı X11 (DISPLAY çevre değişkeni atanmış ise) kullanıyorsa, X11 görüntüye olan bağlantı özdevinimli biçimde uzaktaki sisteme iletilir. Bu sayede kabuktan (ya da komut ile) çalıştırılan herhangi bir X11 programı şifreli kanal boyunca iletilir ve yerel sistemin gerçek X sunucusu ile bağlantısı gerçekleştirilmiş olur. Kullanıcı DISPLAY değişkenini el ile ayarlamamalıdır. X11 bağlantılarının iletilmesi komut satırında ya da yapılandırma dosyaları aracalığı ile ayarlanabilir.
ssh tarafından ayarlanan DISPLAY değeri (sıfırdan büyük bir sayı) sunucu sistemi işaret eder. Bu normaldir ve sebebi de ssh'nın bağlantıları şifreli kanal üzerinden iletmek için sunucu sistemde 'vekil' X sunucusu oluşturmasıdır.
ssh yine sunucu makinede özdevinimli biçimde Xauthority verisini ayarlar. Bu amaçla rasgele yetkilendime çerezi üretilip sunucuda 'Xauthority' dosyasında saklanır ve iletilen bağlantıların bu çerezi taşıyıp taşımadıkları kontrol edilir ve bağlantı açıldığında bu çerez gerçek çerez ile değiştirilir. Gerçek kimlik denetimi çerezi sunucu sisteme hiçbir zaman gönderilmez (ve hiçbir çerez düz metin olarak gönderilmez).
Şayet ForwardAgent değişkeni ``yes'' şeklinde ayarlandı ise (aşağıda açıklanan -A ve -a seçeneklerine bakınız) ve kullanıcı kimlik denetimi ajanı kullanılıyorsa, ajana olan bağlantı özdevinimli biçimde uzak tarafa iletilir.
Keyfi TCP/IP bağlantılarının güvenli kanal üzerinden iletimi ya komut satırında ya da yapılandırma dosyasında belirtilebilir. TCP/IP iletimi uygulamalarına örnek olarak elektronik para çantasına güvenli bağlantı ya da güvenlik duvarı üzerinden iletişim verilebilir.
ssh kullanılmış olan bütün ana sistemleri içeren bir veritabanını özdevinimli olarak oluşturur ve denetler. Ana sistem anahtarları kullanıcının ev dizinindeki $HOME/.ssh/known_hosts dosyasında tutulur. Buna ek olarak /etc/ssh/ssh_known_hosts dosyasına da bilinen sistemleri kontrol için özdevinimli olarak başvurulur.
Yeni sistemler özdevinimli olarak kullacının dosyasına eklenir. Şayet bir sistemin kimliği değişirse, ssh bu konuda uyarır ve truva atlarının kullanıcın parolasını çalmasını engellemek için parola kimlik denetimini edilgenleştirir. Bu mekanizmanın diğer bir amacı şifrelemeyi es geçebilen araya girme saldırılarına engel olmaktır. StrictHostKeyChecking seçeneği anahtarı bilinmeyen ya da değişmiş olan sistemlerde oturum açmayı engellemek için kullanılabilir.
Seçenekler şunlardır:
Bu seçenek etkinleştirilirken dikkat edilmelidir. Uzak konaktaki (ajanın Unix-alan soketi için) dosya izinlerini atlayabilen kullanıcılar iletilen bağlantılar sayesinde yerel ajana erişebilirler. Saldırgan, ajandan anahtarları alamaz ancak ajanda yüklü olan kimlikleri kullanarak kimlik denetimini geçmeyi başarabilir.
AddressFamily (Adres Ailesi) BatchMode (Toplu İş Kipi) BindAddress (Bağlantı Adresi) ChallengeResponseAuthentication (Kimlik Sorma/Yanıtlama Yöntemi) CheckHostIP (Konak IP Denetimi) Cipher (Şifre) Ciphers (Şifreler) ClearAllForwardings (Bütün İletimleri Temizle) Compression (Sıkıştırma) CompressionLevel (Sıkıştırma Seviyesi) ConnectionAttempts (Bağlantı Denemeleri) ConnectionTimeout (Bağlantı Zaman Aşımı) DynamicForward (Özdevimli İletim) EscapeChar (Önceleme Karakteri) ForwardAgent (İletim Ajanı) ForwardX11 (X11 İletimi) ForwardX11Trusted (Güvenilir X11 İletimi) GatewayPorts (Ağ Geçidi Portları) GlobalKnownHostsFile (Genel Bilinen Konaklar Dosyası) GSSAPIAuthentication (GSSAPI Kimlik Denetimi) GSSAPIDelegateCredentials (GSSAPI Yetkilendirme Tanıtımları) Host (Konak) HostbasedAuthentication (Konak Tabanlı Kimlik Denetimi) HostKeyAlgorithms (Konak Anahtarı Algoritmaları) HostKeyAlias (Konak Anahtarı Takma Adları) HostName (Konak Adı) IdentityFile (Kimlik Dosyası) LocalForward (Yerel İletim) LogLevel (Günlükleme Düzeyi) MACs (İleti Kimlik Denetimi Kodları) NoHostAuthenticationForLocalhost (Yerel Konak İçin Kimlik Denetimi Yapma) NumberOfPasswordPrompts (Parola İsteme Adedi) PasswordAuthentication (Parolalı Kimlik Denetimi) Port PreferredAuthentications (Tercih Edilen Kimlik Denetimi Yöntemleri) Protocol (Protokol) ProxyCommand (Vekil Komutu) PubkeyAuthentication (Genel Anahtarlı Kimlik Denetimi) RemoteForward (Uzak İletim) RhostsRSAAuthentication (RSA tabanlı Rhosts Kimlik Denetimi) RSAAuthentication (RSA Kimlik Denetimi) ServerAliveInterval (Sunucu Canlılık Aralığı) ServerAliveCountMax (Canlı Sunucu En Çok Mesaj Sayısı) SmartcardDevice (Akıllı Kart Aygıtı) StrictHostKeyChecking (Mutlak Konak Anahtarı Denetimi) TCPKeepAlive (TCP Canlı Tutma) UsePrivilegedPort (Ayrıcalıklı Port Kullan) User (Kullanıcı) UserKnownHostsFile (Kullanıcının Bilinen Konakları Dosyası) VerifyHostKeyDNS (Uzak Konak Anahtarının Doğruluğunun DNS ile Sağlanması) XAuthLocation (XAuth'un Tam Yolu)
Bu seçenek etkinleştirilirken dikkat edilmelidir. Uzak sistemdeki dosya izinlerini atlayabilen kullanıcılar (kullanıcının X yetkilendirme veritabanı için) iletilen bağlantılar sayesinde yerel X11 görüntüye erişebilirler. Saldırgan, tuş vuruşlarını izlenmek gibi etkinliklerde bulunabilir.
ssh yapılandırma verilerini her kullanıcıya özel ayrı birer yapılandırma dosyasından ve de sistemin yapılandırma dosyasından alabilir. Dosya biçimi ve yapılandırma seçenekleri ssh_config(5)'de açıklanmaktadır.
ssh normalde aşağıdaki çevre değişkenlerini ayarlar:
Ayrıca ssh, $HOME/.ssh/environment dosyasını okur ve eğer bu dosya mevcut ise ve de kullanıcılar değişkenlerini değiştirme hakkına sahip iseler ``DEĞİŞKEN=değer'' biçimindeki satırları ortama ekler. Daha fazla bilgi için, sshd_config(5)'deki PermitUserEnvironment (Kullanıcı Ortamına İzin Ver) seçeneğine bakınız.
Kurallı sistem adı (isim sunucularından dönene ad) istemci için oturum açılırken denetimde sshd(8) tarafından kullanılır; diğer isimlere de gerek vardır çünkü ssh, anahtarı denetlemeden önce kullanıcının belirttiği ismi kurallı isme çevirmez. Bunun nedeni isim sunucularına erişebilen birinin sistem kimlik denetimini yanıltma olasılığıdır.
sshd(8) öntanımlı olarak .rhosts kimlik kanıtlama yönteminden önce RSA konak kimlik denetimini gerektirecek şekilde kurulur. Şayet sunucu makinanın /etc/ssh/ssh_known_hosts dosyasında istemcinin konak anahtarı bulunmuyorsa, bu anahtar $HOME/.ssh/known_hosts dosyasında bulunabilir. Bunu yapmanın en basit yolu sunucu konağa ssh ile oturum açtıktan sonra istemciye ssh kullanarak bağlanmaktır. Böylece konak anahtarı kendiliğinden $HOME/.ssh/known_hosts dosyasına eklenir.
ssh uzak komutun çıkış durumu ile ya da hata olmuş ise 255 ile sonlanır.
gzip(1), rsh(1), scp(1), sftp(1), ssh-add(1), ssh-agent(1), ssh-keygen(1), telnet(1), hosts.equiv(5), ssh_config(5), sshd_config(5), ssh-keysign(8), sshd(8).
T. Ylonen, T. Kivinen, M. Saarinen, T. Rinne, ve S. Lehtinen, SSH Protocol Architecture (SSH Protokol Mimarisi), draft-ietf-secsh-architecture-12.txt, Ocak 2002 (halen geliştiriliyor).
OpenSSH, Tatu Ylonen'in özgün ve özgür 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 yazılım hatasını ortadan kaldırmışlar, yeni özellikler eklemişler ve OpenSSH'ı oluşturmuşlardır. Markus Friedl SSH protokolünün 1.5 ve 2.0 sürümü desteği için katkıda bulunmuştur.
Emin İslam Tatlı <eminislam (at) web.de>, Ağustos 2004
25 Eylül 1999 | BSD |