SSH komutu: -l, -p ve -i seçeneklerinin kullanımı ve bağlantı hatalarını kontrol etme
SSH komutu, ssh hesap@sunucu-adresi biçiminde uzak bir Linux sunucusuna şifreli bir bağlantıyla bağlanan ve bağlandığı sunucuda komut çalıştıran OpenSSH istemci komutudur. Bir AlmaLinux 9 sunucusundan bir Debian 12 sunucusuna ssh çalıştırıp ilk bağlantıdaki ana makine anahtarı kontrolünden -l, -p ve -i seçeneklerine, uzak komut çalıştırmaya ve -v hata ayıklama çıktısına kadar her şeyi sırayla kontrol ettik. Seçeneklerin gerçekte nasıl uygulandığının bağlanmadan ssh -G ile önceden görülebildiğini gördük.
Aşağıdaki çıktı iki sunucuda çalıştırılan sonucun aynısıdır. Sunucu adresi ve hesap, ana makine adı, anahtar yolu ve anahtar parmak izi ile bağlanan sunucunun OpenSSL ve çekirdek sürüm numaraları örnek değerlerle değiştirildi. Bağlanan AlmaLinux sunucusu root hesabını, bağlantıyı alan Debian sunucusu ise normal bir hesabı kullanır.
1️⃣ SSH komutunun temel kullanımı
Uzak bir sunucuya giriş yaparken ssh'den sonra hesap adını ve sunucu adresini @ ile birleştirerek yazarsınız. Giriş yapınca komut istemi bağlanılan sunucununkine döner, exit yazınca bağlantı kesilir ve asıl sunucuya geri dönersiniz.
ssh user@192.0.2.10Linux server2 6.1.0-53-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.187-1 (2026-09-07) x86_64
Last login: Wed Oct 28 20:27:41 2026 from 198.51.100.7
[user]:~$ whoami
user
[user]:~$ exit
exit
Connection to 192.0.2.10 closed.Bağlandığımız Debian sunucusu girişte ayrıca birkaç satır sunucu duyurusu (motd) ve bir posta bildirimi gösterdi; yukarıdaki çıktıdan yalnızca bu satırlar çıkarıldı.
Bir sunucuya ilk kez bağlanırken ssh, giriş öncesinde sunucunun ana makine anahtarı parmak izini yazdırır ve bağlanmaya devam edilip edilmeyeceğini sorar. yes yazınca ana makine anahtarı ~/.ssh/known_hosts dosyasına kaydedildi, ardından whoami sonucu göründü.
ssh user@192.0.2.10 whoamiThe authenticity of host '192.0.2.10 (192.0.2.10)' can't be established.
ED25519 key fingerprint is SHA256:9fT2kL0qX8vN4cR1yB6sW3mZ7aH5dE0uJ2pG8oK1iVc.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.0.2.10' (ED25519) to the list of known hosts.
userAnahtar known_hosts dosyasına kaydedildikten sonra aynı sunucuya yeniden bağlanınca bu soru bir daha çıkmadı. Parmak izi sunucu yöneticisinden aldığınız değerle uyuşmuyorsa no yazın. no yazınca ssh bağlanmadan sona erdi.
ssh user@192.0.2.10The authenticity of host '192.0.2.10 (192.0.2.10)' can't be established.
ED25519 key fingerprint is SHA256:9fT2kL0qX8vN4cR1yB6sW3mZ7aH5dE0uJ2pG8oK1iVc.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? no
Host key verification failed.no ile bitirildiğinde known_hosts dosyası oluşturulmadı. Bu yüzden bir sonraki bağlantıda da aynı soru yeniden çıkar.
2️⃣ SSH komutu seçenekleri
ssh seçenekleri bağlantı hedefinden önce yazılır. Yalnızca ssh çalıştırıldığında kullanılabilen seçeneklerin listesi kullanım bilgisi olarak göründü.
sshusage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-B bind_interface] [-b bind_address]
[-c cipher_spec] [-D [bind_address:]port] [-E log_file]
[-e escape_char] [-F configfile] [-I pkcs11] [-i identity_file]
[-J destination] [-L address] [-l login_name] [-m mac_spec]
[-O ctl_cmd] [-o option] [-P tag] [-p port] [-R address]
[-S ctl_path] [-W host:port] [-w local_tun[:remote_tun]]
destination [command [argument ...]]
ssh [-Q query_option]Kullanım bilgisinde olmayan bir seçenek verilirse aynı kullanım bilgisiyle birlikte [unknown option] hatası görünür.
-V, kurulu OpenSSH istemci sürümünü yazdırır. Aşağıdaki sonuç bağlanan AlmaLinux sunucusuna aittir; bağlantıyı alan Debian 12 sunucusunda OpenSSH_9.2p1 göründü.
ssh -VOpenSSH_9.9p1, OpenSSL 3.5.1 1 Jul 2025-G sunucuya bağlanmaz; verilen seçenekleri yapılandırma dosyalarıyla birleştirip gerçekte uygulanacak değerleri yazdırır. Tam çıktı 87 satır olduğu için grep ile yalnızca gereken satırları seçiyoruz.
ssh -G user@example.com | grep -E "^(user|hostname|port|identityfile|connecttimeout|stricthostkeychecking|serveraliveinterval) "user user
hostname example.com
port 22
stricthostkeychecking ask
serveraliveinterval 0
identityfile ~/.ssh/id_rsa
identityfile ~/.ssh/id_ecdsa
identityfile ~/.ssh/id_ecdsa_sk
identityfile ~/.ssh/id_ed25519
identityfile ~/.ssh/id_ed25519_sk
identityfile ~/.ssh/id_xmss
identityfile ~/.ssh/id_dsa
connecttimeout noneYedi identityfile satırı, -i verilmediğinde ssh'nin sırayla aradığı varsayılan anahtar dosyalarıdır. connecttimeout none, bağlantı bekleme süresinin ayrıca belirlenmediği anlamına gelir.
| Seçenek | Kopyala | Açıklama |
|---|---|---|
| -lHesap | Bağlanılacak hesap adını belirtir | |
| -pPort | Bağlanılacak portu belirtir (varsayılan 22) | |
| -iAnahtar dosyası | Özel anahtar dosyasını belirtir | |
| -v | Bağlantı sürecini debug1 satırlarıyla yazdırır | |
| -C | Gönderilip alınan verileri sıkıştırır | |
| -X | X11 yönlendirme (uzak GUI programları) | |
| -T | Sanal terminal ayırmaz | |
| -t | Sanal terminali zorla ayırır | |
| -n | Standart girdiyi /dev/null olarak değiştirir | |
| -q | Uyarı ve bilgi mesajlarını azaltır | |
| -oseçenek=değer | Yapılandırma dosyası seçeneğini yalnızca bu bağlantı için belirtir | |
| -L | Yerel port yönlendirme | |
| -F | Yapılandırma dosyasını belirtir | |
| -G | Bağlanmadan uygulanacak ayarları yazdırır | |
| -V | OpenSSH istemci sürümünü yazdırır |
| Seçenek | Kopyala | Açıklama |
|---|---|---|
| -N | Uzak komut olmadan yalnızca bağlantıyı korur | |
| -J | Başka bir sunucu üzerinden bağlanır |
3️⃣ ssh -l seçeneği ve -L ile port yönlendirme
-l, bağlanılacak hesap adını belirten seçenektir. ssh -l user 192.0.2.10, ssh user@192.0.2.10 ile aynı hesapla bağlandı.
ssh -l user 192.0.2.10 whoamiuser-G ile kontrol edince -l ile verilen hesabın user öğesine girdiği görüldü.
ssh -G -l admin example.com | grep -E "^(user|hostname|port) "user admin
hostname example.com
port 22-l ile hesap@adres birlikte yazılınca hangisinin uygulandığını da -G ile kontrol ettik. OpenSSH 9.9p1'de -l ile verilen admin uygulandı.
ssh -G -l admin user@example.com | grep -E "^(user|hostname) "user admin
hostname example.comBüyük harf -L adı benzer olsa da hesapla ilgisi olmayan bir yerel port yönlendirme seçeneğidir. Kendi sunucunuzdaki bir porta gelen bağlantıları SSH bağlantısının içinden geçirip uzak sunucu tarafındaki bir adrese ve porta bağlar.
8080:localhost:80, kendi sunucunuzun 8080 portunu uzak sunucudan bakıldığında localhost'un 80 portuna bağlamak anlamına gelir. -G ile kontrol edince localforward öğesinde aynı değer göründü.
ssh -G -L 8080:localhost:80 user@example.com | grep -E "^(hostname|localforward) "hostname example.com
localforward 8080 [localhost]:80Yalnızca bir tüneli açık tutmak istediğinizde, uzak komut olmadan bağlantıyı koruyan -N seçeneğini de ekleyin.
4️⃣ SSH portunu ve anahtar dosyasını belirtme
SSH sunucusu bağlantıları 22 dışındaki bir portta kabul ediyorsa portu -p ile belirtin. -i, varsayılan adı olmayan bir özel anahtar dosyasını belirtir.
ssh -G -p 2222 -i ./mykey user@example.com | grep -E "^(user|hostname|port|identityfile) "user user
hostname example.com
port 2222
identityfile ./mykey-i belirtilince yedi varsayılan anahtar dosyası satırı kayboldu ve yalnızca belirtilen dosya kaldı.
Anahtar dosyaları ssh-keygen ile oluşturulur. Zaten kullandığınız bir anahtar varsa -f ile yeni bir dosya adı verin. Aşağıda yeni mykey adıyla bir ed25519 anahtarı oluşturmanın sonucu var.
ssh-keygen -t ed25519 -f ./mykey -N "" -C "user@example.com"Generating public/private ed25519 key pair.
Your identification has been saved in ./mykey
Your public key has been saved in ./mykey.pub
The key fingerprint is:
SHA256:XLbhLZHSNdMvUqhSIbzRNJi/zKKkNnWmy0mTeBoUfaY user@example.com
The key's randomart image is:
+--[ED25519 256]--+
| ..=+.+o |
| . =oo+.oo |
| . . +=B. . . |
| . =o=o=. . .|
| . E S++... . |
| . .o.+ +. |
| o+== . |
| +*oo |
| ...+. |
+----[SHA256]-----+mykey özel anahtar, mykey.pub ise açık anahtardır. OpenSSH kılavuzu açık anahtarın bağlanılacak sunucudaki ~/.ssh/authorized_keys dosyasına eklenmesini söyler. Bu işlem [ssh-copy-id -i ./mykey.pub user@192.0.2.10] gibi ssh-copy-id ile yapılabilir.
Aynı sunucuya sık bağlanıyorsanız ~/.ssh/config dosyasına bir takma ad yazıp yalnızca ssh ve takma adı girin. Host satırı takma addır, altındaki satırlar ise o takma adla bağlanırken uygulanacak değerlerdir.
Host myserver
HostName 192.0.2.10
User user
Port 2222
IdentityFile ~/.ssh/mykeyBu ayarları bir ./config dosyasına yazıp -F ile okuyunca adres, hesap, port ve anahtar dosyasının hepsi tek bir takma adla uygulandı.
ssh -F ./config -G myserver | grep -E "^(user|hostname|port|identityfile) "user user
hostname 192.0.2.10
port 2222
identityfile ~/.ssh/mykeyKomut satırına yazılan seçenekler yapılandırma dosyasından önce gelir. Aynı takma ada -p 22 de eklenince port 22 oldu.
ssh -F ./config -G -p 22 myserver | grep -E "^(hostname|port) "hostname 192.0.2.10
port 22hostname yapılandırma dosyasındaki 192.0.2.10 olarak kaldı, yalnızca port komut satırındaki değere değişti.
5️⃣ SSH ile uzak komut çalıştırma
Bağlantı hedefinden sonra bir komut yazılırsa ssh giriş ekranı olmadan yalnızca o komutu çalıştırır ve bağlantıyı keser. Birden fazla komut ya da noktalı virgül gibi kabuk sembolleri varsa tek tırnak içine alın.
ssh user@192.0.2.10 'whoami; hostname'user
server2Uzak komutun çıkış kodu olduğu gibi ssh'nin çıkış kodu olarak döndü. Betiklerde uzak komutun başarılı olup olmadığı bu değerle anlaşılır.
ssh user@192.0.2.10 'exit 3'; echo $?3Komut bu şekilde çalıştırıldığında sanal terminal ayrılmaz. -T ile çalıştırılan tty, [not a tty] yazdırdı.
ssh -T user@192.0.2.10 ttynot a ttyssh kılavuzu -t seçeneğini uzak sunucuda ekran tabanlı programlar çalıştırırken kullanılan seçenek olarak açıklar. -t eklenince /dev/pts/0 göründü ve sonunda bağlantının kapatıldığını bildiren bir ileti de çıktı.
ssh -t user@192.0.2.10 tty/dev/pts/0
Connection to 192.0.2.10 closed.-q de eklenince bu ileti görünmedi.
ssh -t -q user@192.0.2.10 tty/dev/pts/0-n, ssh'nin standart girdisini /dev/null olarak değiştirir. -n olmadan çalıştırınca uzak cat, kanal ile verilen hello'yu olduğu gibi yazdırdı.
echo hello | ssh user@192.0.2.10 cathelloecho hello | ssh -n user@192.0.2.10 catAynı komuta -n eklenince hello uzak cat'e ulaşmadı ve hiçbir şey yazdırılmadı.
6️⃣ SSH bağlantı hataları ve ssh -v ile hata ayıklama
Bağlanılamadığında önce hata iletisine bakıp hangi aşamada durduğunu kontrol edin. Sunucu adresi bulunamayınca [Could not resolve hostname] göründü.
ssh user@nosuchhost.invalidssh: Could not resolve hostname nosuchhost.invalid: Name or service not knownAdres doğru ama o portta yanıt yoksa [Connection timed out] görünür. -o ConnectTimeout=5 eklenince 5 saniye sonra bu hatayla sona erdi.
ssh -o ConnectTimeout=5 -p 2222 user@192.0.2.10ssh: connect to host 192.0.2.10 port 2222: Connection timed outknown_hosts dosyasında olmayan bir sunucuya -o BatchMode=yes ile bağlanınca ssh ana makine anahtarını sormadan [Host key verification failed.] ile sona erdi. Bir betikte ilk bağlantının soruda takılmaması için StrictHostKeyChecking=accept-new kullanılır.
ssh -o BatchMode=yes user@192.0.2.10 trueHost key verification failed.ssh_config kılavuzuna göre accept-new yalnızca daha önce görülmemiş sunucuların ana makine anahtarını sormadan kaydeder. Kayıtlı anahtardan farklı bir anahtar gelirse bağlantıyı reddeder.
ssh -o StrictHostKeyChecking=accept-new user@192.0.2.10 whoamiWarning: Permanently added '192.0.2.10' (ED25519) to the list of known hosts.
userHesap için kayıtlı bir anahtar yoksa [Permission denied (publickey)] görünür. Tekrarlanan kimlik doğrulama hataları sunucunun bağlanan IP'yi engellemesine yol açabilir.
-v, bağlantı sürecini debug1 satırlarıyla yazdırır. Tam çıktı 70 satırı aştığı için aşağıda yalnızca bağlantı ve kimlik doğrulama aşamalarının satırları grep ile seçildi.
ssh -v -i ~/.ssh/id_ed25519 user@192.0.2.10 true 2>&1 | grep -E 'Connecting to|Connection established|remote software version|Server host key|is known and matches|can continue|Offering public key|Authenticated to|Exit status'debug1: Connecting to 192.0.2.10 [192.0.2.10] port 22.
debug1: Connection established.
debug1: Remote protocol version 2.0, remote software version OpenSSH_9.2p1 Debian-2+deb12u10
debug1: Server host key: ssh-ed25519 SHA256:9fT2kL0qX8vN4cR1yB6sW3mZ7aH5dE0uJ2pG8oK1iVc
debug1: Host '192.0.2.10' is known and matches the ED25519 host key.
debug1: Authentications that can continue: publickey,password
debug1: Offering public key: /root/.ssh/id_ed25519 ED25519 SHA256:4bN7qT1xW9cK3mR6yH0sD2fL8vZ5aJ1eP7uG3oX4iQs explicit
Authenticated to 192.0.2.10 ([192.0.2.10]:22) using "publickey".
debug1: Exit status 0Connecting to satırı bağlantı denemesidir, Server host key ve is known and matches satırları ise ana makine anahtarı kontrolüdür. Offering public key satırında anahtar sunuldu, Authenticated to satırında anahtar doğrulaması tamamlandı. Kimlik doğrulamada takılırsa önce istediğiniz anahtar dosyasının Offering public key satırında görünüp görünmediğini kontrol edin.
-C de eklenince kex satırındaki compression değeri none'dan zlib@openssh.com'a değişti.
ssh -v -C user@192.0.2.10 true 2>&1 | grep -E 'compression'debug1: kex: server->client cipher: aes256-gcm@openssh.com MAC: <implicit> compression: zlib@openssh.com
debug1: kex: client->server cipher: aes256-gcm@openssh.com MAC: <implicit> compression: zlib@openssh.com
debug1: Enabling compression at level 6.-X, uzak sunucudaki GUI programlarının ekranını kendi bilgisayarınıza getiren seçenektir. Ekranı olmayan bir AlmaLinux sunucusunda çalıştırınca DISPLAY olmadığını bildiren bir debug1 satırı göründü.
ssh -v -X user@192.0.2.10 true 2>&1 | grep DISPLAYdebug1: X11 forwarding requested but DISPLAY not setDISPLAY, GUI ekranlarının nerede gösterileceğini belirleyen ortam değişkenidir. Bu yüzden -X, masaüstü ekranı olan bir bilgisayardan bağlanırken kullanılır.
🔲 SSH komutu simülatörü
Aşağıdaki simülatörde ssh ile sanal bir sunucuya bağlanıp seçenekleri, uzak komutları ve ssh -G'yi kendiniz yazarak deneyebilirsiniz.
🔢 SSS & önerilen içerikler
SSH
Linux'ta SSH: tanımı ve temel ayarlar
Şifresiz Telnet'in yerini alan SSH'nin ortaya çıkışını, varsayılan 22 numaralı portu, anahtarla kimlik doğrulamayı ve kurulumu özetleyen yazı.
Güvenlik
OpenSSH güvenlik açığı CVE-2024-6387: geçici engelleme ve yamayı uygulama
OpenSSH açığı regreSSHion'ın giriş bekleme süresindeki alarm sinyalini nasıl istismar ettiğini ve önce geçici engellemeyi, ardından yamayı hangi sırayla uyguladığımızı anlatan yazı.
Cloudways
Cloudways SFTP & SSH bağlantısı: FileZilla ayarı, SSH anahtarı kaydı ve IP beyaz listesi
Yönetilen bir bulut sunucusuna SSH anahtarı ekleyip bağlanan IP'yi beyaz listeye aldıktan sonra ssh ve FileZilla ile bağlanma sürecini anlatan yazı.
ℹ️ Satış ortaklığı bildirimi
Bu sitenin içeriklerinde satış ortaklığı bağlantıları bulunur. Bir ziyaretçi bu bağlantılar üzerinden ürün veya hizmet satın alırsa bu site satıcıdan komisyon alır. Bu süreçte alıcının ödediği tutar (kampanya indirimlerinde tutar düşer↓) artmaz. Yayımlanan fiyat, indirim ve stok bilgileri yazının yazıldığı zamana aittir ve gerçek durumdan farklı olabilir; bu yüzden satın almadan önce son bilgiyi satıcıdan kontrol etmenizi rica ederiz. Ürünler kendi ölçütlerimize göre seçilir ve değerlendirilir; komisyon alınıp alınmaması tanıtım sırasını veya değerlendirme içeriğini etkilemez.