SSH Nedir, Nasıl Bağlanılır?

Yayın tarihi:

13 dk okuma

Acar Diveroli
Yazar: Acar Diveroli
Mavi imleçli ssh user@server.example komutu, TCP 22, KEX, HOST KEY ve AUTH işaretli tünel, host key sorusu ve kilit rozeti

Küçük bir bulut sunucusu kiralıyorsunuz ve gelen karşılama e-postasında üç bilgi var: bir IP adresi, bir kullanıcı adı ve "SSH port: 22" satırı. Ya da ev ağınızdaki depolama cihazının kılavuzu bir terminal açıp ssh admin@192.168.1.50 yazmanızı söylüyor. İkisi de sizden aynı şeyi bekliyor: o makineye SSH ile girmenizi ve başında oturuyormuş gibi komut satırında çalışmanızı.

Türkçede SSH kısaltması "satış sonrası hizmet" için de kullanılır; bu yazının konusu ise ağ protokolü Secure Shell. Önce SSH'nin ne olduğunu, bağlandığınızda arka planda neler yaşandığını ve Windows, macOS ya da Linux'tan nasıl bağlanacağınızı anlatıyoruz. Ardından host key sorusuna, SSH anahtarı ile şifre farkına, tünellere, SSH'nin TLS ve VPN'den farkına ve ne zaman bir proxy yerine geçebileceğine geçiyoruz.

SSH nedir?

SSH (Secure Shell, güvenli kabuk), uzaktaki bir bilgisayarda size şifreli bir bağlantı üzerinden komut satırı açan ağ protokolüdür. Kabuk (shell), yazdığınız komutları okuyup çalıştıran programdır; Linux'taki Bash ve Windows'taki PowerShell buna örnektir. SSH bu konuşmayı ağ üzerinden taşır ve aradaki kimse onu okuyamaz ya da değiştiremez.

İşin içinde iki program vardır. SSH istemcisi sizin bilgisayarınızda çalışır ve bağlantıyı başlatır; SSH sunucusu ise uzaktaki makinede çalışan, genellikle sshd adını taşıyan bir arka plan programıdır ve varsayılan olarak 22 numaralı TCP portunu dinler. Protokolün bugünkü sürümünün mimari belgesi RFC 4251, SSH'yi güvensiz bir ağ üzerinde güvenli uzaktan oturum açma ve diğer güvenli ağ hizmetleri için kullanılan bir protokol olarak tanımlar.

Aynı şifreli bağlantı dosya kopyalamak, tek bir komut çalıştırmak ya da başka ağ bağlantılarını taşımak için de kullanılabilir; SSH tüneli tam olarak bunu yapar. Telnet gibi eski araçlar şifreler dahil her şeyi okunabilir metin olarak gönderir; SSH aynı işi şifreli yapar.

SSH bağlantısı nasıl çalışır?

SSH bağlantısı belirli bir sırayla kurulur: önce iki taraf şifrelemede anlaşır, sonra sunucu kim olduğunu kanıtlar, ancak ondan sonra siz oturum açarsınız. ssh user@server.example yazdığınızda sırasıyla şunlar olur:

  1. TCP bağlantısı. İstemciniz sunucuya bağlanır; başka bir port belirtmediyseniz 22 numaralı porta.
  2. Sürüm bilgisi değişimi. İki taraf da SSH-2.0- ile başlayan ve kendi yazılımının adını taşıyan bir satır gönderir.
  3. Anahtar değişimi. İki taraf desteklediği algoritmaları listeler, ortak olanları seçer ve aynı gizli değeri, onu ağ üzerinden hiç göndermeden hesaplar. Bundan sonraki her şeyi şifreleyen oturum anahtarları bu değerden türetilir.
  4. Sunucunun kimlik doğrulaması. Sunucu bu sonucu host key'inin özel yarısıyla imzalar. İstemciniz imzayı kontrol eder ve anahtarı daha önce kaydettiği anahtarla karşılaştırır; sunucu yeniyse size sorar.
  5. Kullanıcının kimlik doğrulaması. Oturumu şifreli bağlantının içinde açarsınız: bir şifreyle ya da bir SSH anahtarına sahip olduğunuzu kanıtlayarak.
  6. Kanallar. Kabuk oturumunuz, dosya aktarımları ve yönlendirilen portlar bu tek bağlantının içinde ayrı kanallar olarak çalışır.

Taşıma katmanı belirtimi RFC 4253, ilk dört adımı tanımlar ve 22 numaralı portun SSH'ye ayrıldığını kayda geçirir. Her bağlantı yeni oturum anahtarları aldığı için trafiğinizi bugün kaydeden biri, sunucunun host key'ini ileride çalsa bile bu kaydı çözemez.

SSH ile sunucuya nasıl bağlanılır?

ssh yazarsınız, ardından sunucudaki kullanıcı adını, bir @ işaretini ve sunucunun adresini eklersiniz; sonra istendiğinde oturum açarsınız:

bash
ssh user@server.example

user sizin bilgisayarınızdaki değil, sunucudaki hesaptır; server.example ise bir ana makine adının ya da 203.0.113.10 gibi bir IP adresinin yerini tutar. Sunucu 22 dışında bir port kullanıyorsa -p ekleyin: ssh -p 2222 user@server.example. Aşağıda anlatılan host key sorusundan sonra şifre istenir; şifreyi yazarken ekranda hiçbir şey görünmez. Satır başındaki istem user@server:~$ gibi bir ifadeye dönüştüğünde yazdığınız komutlar sunucuda çalışır; exit sizi kendi bilgisayarınıza geri getirir.

Windows'ta

Windows 10 (1809 derlemesinden itibaren) ve Windows 11 bir OpenSSH istemcisi içerir; bu yüzden ssh komutu PowerShell'de, Komut İstemi'nde ve Windows Terminal'de çalışır. Kontrol etmek için ssh -V yazın. Windows 11 test makinemizde çıktı şu oldu:

text
OpenSSH_for_Windows_9.5p2, LibreSSL 3.8.2

Windows ssh komutunu tanımıyorsa Ayarlar > Sistem > İsteğe bağlı özellikler sayfasını açın, View features (Özellikleri görüntüle) düğmesine basın, OpenSSH İstemcisi'ni (OpenSSH Client) arayıp ekleyin. Bazı Windows 11 sürümlerinde bu sayfa Ayarlar > Uygulamalar altındadır. Microsoft'un Windows için OpenSSH rehberi bu adımları ve ilk bağlantıyı gösterir.

macOS ve Linux'ta

İkisinde de SSH istemcisi hazır gelir. Mac'te Terminal'i Spotlight'tan ya da Uygulamalar > İzlenceler klasöründen açıp aynı komutu yazın. Bir Linux sisteminde ssh yoksa dağıtımınızın OpenSSH istemci paketini kurun; paketin adı genellikle openssh-client ya da openssh olur.

SSH ilk bağlantıda neden onay ister?

SSH onay ister, çünkü bu sunucunun host key'ini daha önce hiç görmemiştir ve anahtarın gerçekten bağlanmak istediğiniz sunucuya ait olup olmadığını kendi başına bilemez. Host key (sunucu anahtarı), SSH kurulurken sunucunun oluşturduğu bir anahtar çiftidir; açık yarısı, bir sertifikanın bir web sitesini tanıtması gibi sunucuyu tanıtır.

OpenSSH önce The authenticity of host … can't be established satırını yazar, anahtarın türünü ve parmak izini (fingerprint) gösterir. Parmak izi, SHA256: ve ardından gelen 43 karakterden oluşan kısa bir özettir. Son olarak Are you sure you want to continue connecting (yes/no/[fingerprint])? diye sorar. yes yanıtını verirseniz istemci anahtarı kullanıcı profilinizdeki .ssh klasöründe bulunan known_hosts dosyasına kaydeder ve sonraki her bağlantıda karşılaştırır.

Yanıt vermeden önce parmak izini, başka bir yoldan öğrendiğiniz değerle karşılaştırın: bazı bulut sağlayıcıları onu sunucunun konsol çıktısında gösterir, bir yönetici de sunucuda ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub komutuyla yazdırabilir. Anahtarı kontrol etmeden kabul etmek sizi ortadaki adam (man-in-the-middle) saldırısına açık bırakır: sizinle sunucu arasındaki biri kendini sunucu gibi gösterir ve şifrenizi okur.

Tanıdığınız bir sunucu birden WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! uyarısını gösterirse durun ve eski kaydı silmeden önce sunucuyu yöneten kişiye sorun; yeniden kurulmuş bir sunucu zararsızdır, sahte bir sunucu ise değildir. Bu soruyu StrictHostKeyChecking no ayarıyla asla susturmayın: bu ayar, karşı tarafta kimin olduğunu söyleyen tek kontrolü ortadan kaldırır.

SSH anahtarı nasıl oluşturulur?

SSH anahtar çiftini, SSH istemcisiyle birlikte gelen ssh-keygen komutuyla oluşturursunuz:

bash
ssh-keygen -t ed25519 -C "you@laptop"

-t ed25519 Ed25519 türünü seçer (güncel OpenSSH sürümlerinde varsayılan tür zaten budur); -C ise anahtarı sonradan tanımanızı sağlayan bir açıklama ekler. Komut önce anahtarın nereye kaydedileceğini sorar (Enter tuşu kullanıcı profilinizdeki .ssh klasörünü kabul eder), sonra bir anahtar parolası (passphrase) ister: özel anahtar dosyasını diskte şifreleyen bir paroladır. Mutlaka belirleyin; yoksa dosyayı kopyalayan herkes sizin adınıza oturum açabilir.

Windows 11 test makinemizde -f demo_ed25519 ile bir test klasörüne geçici bir deneme anahtarı oluşturduk, ardından sildik. Klasör yolunu çıkardığımız çıktı şöyle:

text
Generating public/private ed25519 key pair.
Your identification has been saved in demo_ed25519
Your public key has been saved in demo_ed25519.pub
The key fingerprint is:
SHA256:lkosA9+FmCGq1dOjgIoIqQKwHR/jAMjzf+GsngbbGCc you@laptop

Uzantısı olmayan dosya özel anahtardır (private key): bilgisayarınızdan hiç çıkmaz. .pub uzantılı dosya ise açık anahtardır (public key) ve rahatça paylaşabileceğiniz tek bir satırdan oluşur. ssh-keygen kılavuzu, anahtar parolasını sonradan değiştirmek dahil bütün seçenekleri listeler.

Anahtarla giriş için açık anahtar satırı, sunucudaki hesabınızın ~/.ssh/authorized_keys dosyasına eklenmelidir. Birçok bulut sağlayıcısı sunucuyu oluştururken açık anahtarınızı ister ve onu oraya kendisi yerleştirir. macOS ve Linux'ta ssh-copy-id user@server.example komutu, bir kez şifreyle girdikten sonra anahtarı kopyalar. Windows'ta .pub dosyasını Not Defteri ile açın, satırı kopyalayın, bir kez şifrenizle oturum açın ve satırı o dosyaya yapıştırın.

Şifre mi SSH anahtarı mı: hangi giriş yöntemini kullanmalısınız?

Mümkün olan her yerde SSH anahtarı kullanın: ilk giriş için şifre yeterlidir, ama anahtar bir kez yerine oturduktan sonra hem daha güvenli hem daha rahattır.

Şifreyle girişSSH anahtarıyla giriş
Neye ihtiyacınız var?Hesabın şifresiÖzel anahtar dosyası ve parolası
Sunucuya ne ulaşır?Şifrenin kendisi (şifreli bağlantının içinde)Yalnız bir imza; anahtar sizde kalır
Tahmin saldırılarıZayıf şifrelere karşı mümkünPratikte mümkün değil
Sızan bir siteden tekrar kullanılan şifreSunucuyu açarEtkisi yok
Betikler ve otomatik yedeklerZahmetli ve riskliBunun için tasarlandı
KaybedersenizYönetici sıfırlarKonsoldan yeni bir açık anahtar eklenir

SSH ile oturum açmayı tanımlayan RFC'ye göre her sunucunun desteklemek zorunda olduğu tek yöntem anahtarla giriştir; şifreyle giriş isteğe bağlıdır.

SSH tüneli nedir?

SSH tüneli, başka bir ağ bağlantısını şifreli SSH oturumunuzun içinde taşır; böylece bilgisayarınızdaki bir program, sunucudaki ya da sunucunun yakınındaki bir hizmete, o hizmet kendi bilgisayarınızdaymış gibi ulaşır. Buna port yönlendirme (port forwarding) denir ve ssh üç türünü sunar.

En yaygını yerel yönlendirmedir (-L). Sunucunuzda yalnız kendi 127.0.0.1 adresini dinleyen bir veritabanı çalışıyorsa, ssh -L 5432:localhost:5432 user@server.example komutundan sonra dizüstü bilgisayarınızdaki veritabanı aracı localhost:5432 adresine bağlanır ve SSH bu bağlantıyı sunucudaki veritabanına ulaştırır. Uzak yönlendirme (-R) sunucuda, sizin bilgisayarınıza geri dönen bir port açar. Dinamik yönlendirme (-D) ise istemciyi küçük bir SOCKS proxy'ye dönüştürür; bir sonraki bölümün konusu budur.

OpenSSH'nin ssh kılavuzu her seçeneği anlatır. Tünelleri yalnız sahibi ya da yöneticisi olduğunuz sunucularda ve buna izin verilen ağlarda kullanın. Tünel, içinden geçen trafiği yerel ağdan gizler ama o trafiği izinli hâle getirmez: bir okul, bir işveren ya da resmî bir kurum bir hizmeti engelliyorsa, o trafiği SSH içinden geçirmek de aynı kuralları çiğner.

SSH, SOCKS5 proxy olarak kullanılabilir mi?

Evet: ssh -D 1080 -N user@server.example komutu kendi bilgisayarınızın 1080 numaralı portunda bir SOCKS5 proxy başlatır ve içine giren trafiği sunucunuz üzerinden dışarı çıkarır; -N kabuk açmaz, yalnız tüneli kurar. SOCKS5 proxy, bir programın bağlantılarını içeriğini okumadan herhangi bir adrese ve porta aktaran aracıdır; ayrıntılar SOCKS5 Proxyler Nedir? yazısında.

Bir tarayıcının proxy ayarına SOCKS5 olarak 127.0.0.1 adresini ve 1080 portunu girerseniz siteler ev bağlantınızın değil, sunucunuzun IP adresini görür. Komut satırı araçları ise proxy'yi genellikle ortam değişkenlerinden okur; bunların nasıl çalıştığını Linux proxy ayarları yazısında anlattık.

Bu, kendi işleriniz için kullanışlıdır; örneğin sitenizin sunucunun bulunduğu yerden nasıl göründüğünü kontrol etmek için. Sınırları da bu kurulumdan gelir: tek bir çıkış IP'si, tek bir şehirde bir veri merkezi adresi, bakımını sizin yaptığınız bir sunucu ve yalnız TCP; SOCKS5 proxy ise UDP de taşıyabilir.

Bir iş birden fazla adres gerektirdiğinde SOCKS5 Proxy hizmetimiz aynı programlarda aynı ayarlarla çalışır ve residential ile mobil IP'leri birçok ülkede sunar; konumu ülke ve şehir düzeyinde seçersiniz.

Sabit bir adres içinse Datacenter Proxy, kendi sunucunuzu çalıştırmadan 50'den fazla ülkede size ayrılmış IPv4 adresleri verir.

SSH, SSL/TLS ve VPN arasındaki fark nedir?

Üçü de trafiği şifreler ama farklı şeyleri korur: SSH bir oturumu ve onun içinden açılan bağlantıları, TLS bir web sayfası gibi tek bir uygulama bağlantısını, VPN ise cihazın gönderdiği her şeyi korur.

SSHSSL/TLSVPN
Neyi korur?Tek sunucudaki oturumunuzuHTTPS gibi tek bir bağlantıyıCihazın bütün trafiğini
Sunucu nasıl doğrulanır?İlk kullanımda kaydedilen host keyBir otoritenin imzaladığı sertifikaVPN protokolüne bağlı
Tipik kullanımSunucu yönetimi, dosya aktarımıWeb siteleri, e-posta, API'lerOfis ağı, halka açık Wi-Fi
Varsayılan port22HTTPS için 443Protokole bağlı

Pratikteki asıl fark, güvenin nasıl kurulduğudur. Tarayıcı bir siteye, o sitenin SSL sertifikasına bir sertifika otoritesi kefil olduğu için güvenir; SSH ise ilk bağlantıda kabul ettiğiniz anahtara güvenir. İlk parmak izi kontrolünün önemi buradan gelir.

Sunucunuzun SSH erişimini nasıl güvende tutarsınız?

Host key'leri kontrol eder, anahtarla oturum açar ve sunucuyu güncel tutarsanız SSH güvenlidir; izinsiz girişler protokolden değil, zayıf şifrelerden ve çalınan anahtarlardan gelir. Birinin her an oturum açmayı denediğini varsayın:

  • Anahtarları bir anahtar parolasıyla koruyun ve her kişi için ayrı bir anahtar kullanın; böylece birini kaldırırken diğerlerine dokunmazsınız.
  • Anahtarınız çalıştıktan sonra şifreyle girişi kapatın: kendi Linux sunucunuzda bu, /etc/ssh/sshd_config dosyasındaki PasswordAuthentication no satırıdır. Denerken bir oturumu açık tutun; bir hata sizi dışarıda bırakmasın.
  • Root olarak şifreyle oturum açmayın. OpenSSH'nin varsayılan ayarı root girişine zaten yalnız anahtarla izin verir; normal bir hesap ve sudo kullanın.
  • Güncellemeleri kurun: hem işletim sistemi hem SSH sunucusu için.
  • Özel anahtarı bir şifre gibi koruyun: onu asla bir sohbete, destek talebine ya da kod deposuna yapıştırmayın.

SSH'yi başka bir porta taşımak yalnız kayıtlardaki gürültüyü azaltır; asıl koruma anahtarlardan ve güncellemelerden gelir.

SSH ile nerede karşılaşırsınız?

  • Bulut sunucuları ve VPS paketleri: genellikle ilk günden SSH ile yönetilir.
  • Paylaşımlı hosting: birçok paket, dosya yöneticisinin yanında SSH erişimi de sunar.
  • Git: git@host:team/project.git gibi adresler üzerinden kodu anahtarınızla gönderip alırsınız.
  • Dosya aktarımı: scp ve sftp SSH üzerinden çalışır ve Windows'ta da hazır gelir.
  • Ev cihazları: ağ depolama cihazları, modemler ve benzerleri.
  • Kendi Mac'iniz: Sistem Ayarları > Genel > Paylaşma altındaki Uzaktan Oturum Açma açıksa başka bilgisayarlar Mac'inize SSH ile bağlanabilir; Apple bunun Mac'in güvenliğini azaltabileceğini belirtir.

Sık yapılan hatalar

  • İlk bağlantı sorusuna parmak izini karşılaştırmadan yes yazmak.
  • Host key uyarılarını, anahtarın neden değiştiğini öğrenmek yerine StrictHostKeyChecking no ile susturmak.
  • Biri "SSH anahtarınızı" istediğinde .pub dosyası yerine özel anahtarı göndermek.
  • Anahtarla giriş çalışmadan şifreyle girişi kapatmak ve sunucuya erişimi kaybetmek.
  • Yanlış kullanıcı adı kullanmak. Birçok bulut imajı root yerine ubuntu ya da admin gibi bir hesap kullanır; yanlış ad "Permission denied" ile biter.
  • Proxy ortam değişkenlerinin ssh komutunu etkilemesini beklemek. Etkilemezler; SSH'nin kendi ayarları ~/.ssh/config dosyasındadır.

Karar rehberi

İhtiyacınızNe yapmalı?
Bir sunucuya ilk kez girmekssh user@server.example, parmak izini karşılaştırın, sonra yes
Sunucu başka bir port kullanıyor-p ve port numarasını ekleyin
Şifre yazmaktan kurtulmakssh-keygen ile anahtar oluşturun, .pub satırını authorized_keys dosyasına ekleyin
Yalnız sunucuda dinleyen bir veritabanına ulaşmak-L ile yerel yönlendirme
Kendi sunucunuzun IP'siyle gezinmekssh -D 1080 -N, ardından SOCKS5 127.0.0.1:1080
Çok sayıda konum ya da residential IPTek sunucu yerine bir proxy hizmeti

Sıkça sorulan sorular

SSH güvenli mi?

Evet; ilk bağlantıda host key'i kontrol eder ve girişinizi korursanız güvenlidir. Zayıf noktalar şifrelemede değil, tahmin edilebilen şifrelerde, anahtar parolası olmayan özel anahtarlarda ve kontrol edilmeden kabul edilen parmak izlerindedir.

Port 22 nedir?

Port 22, SSH sunucularının varsayılan olarak dinlediği ve resmî olarak SSH'ye ayrılmış TCP portudur. Bir sunucu başka bir port da kullanabilir; o zaman ssh -p 2222 user@server.example ile bağlanırsınız ya da portu ~/.ssh/config dosyasına bir Port satırıyla kaydedersiniz.

Telefonda SSH kullanabilir miyim?

Evet. Android ve iPhone için SSH istemci uygulamaları aynı adres, kullanıcı adı ve portla bağlanır; çoğu telefonda bir anahtar da oluşturabilir, siz de onun açık yarısını sunucuya eklersiniz. Host key parmak izini orada da karşılaştırın.

"Permission denied (publickey)" hatası ne demek?

Sunucu yalnız anahtarla girişi kabul ediyor ve istemcinizin sunduğu anahtarlardan hiçbiri o kullanıcı için tanımlı değil. Kullanıcı adını, doğru anahtarın kullanılıp kullanılmadığını (ssh -i bir anahtar seçer) ve .pub satırının o hesabın ~/.ssh/authorized_keys dosyasında olup olmadığını kontrol edin.

SSH, SFTP ve SCP arasındaki fark nedir?

SSH protokolün ve uzaktan oturumun adıdır; SFTP ve SCP ise bir SSH bağlantısının içinde çalışan dosya aktarım araçlarıdır. sftp klasörlerde gezinebildiğiniz bir oturum açar, scp dosyaları tek komutla kopyalar; ikisi de ssh ile aynı girişi ve anahtarları kullanır.

SSH oturumu nasıl kapatılır?

exit yazın ya da sunucu Linux veya macOS çalıştırıyorsa Ctrl+D'ye basın. Oturum donmuşsa önce Enter'a basın, sonra ~. (tilde ve nokta) yazın: istemci bunu bir kaçış dizisi olarak tanır ve bağlantıyı sizin tarafınızdan kapatır.

Özet

SSH, uzaktaki bir bilgisayarda size şifreli bir komut satırı verir: istemciniz 22 numaralı porta bağlanır, sunucu kimliğini host key ile kanıtlar, siz de bir şifreyle ya da daha iyisi ssh-keygen ile oluşturduğunuz bir anahtarla oturum açarsınız. Parmak izini ilk bağlantıda kontrol edin, host key denetimini asla kapatmayın ve tünelleri yalnız izin verilen yerlerde kullanın. Tek bir sunucunun verebileceğinden fazla çıkış adresine ihtiyacınız olduğunda proxy ürünlerimizi karşılaştırın.

ChatGPT'ye sorClaude'a sor