SSH komutu: -l, -p ve -i seçeneklerinin kullanımı ve bağlantı hatalarını kontrol etme

Test ortamıRHEL ailesiAlmaLinux 9.8OpenSSH 9.9p1Alıcı taraf Debian 12 · OpenSSH 9.2p1 normal hesaproot hesabı
Ağ komutlarısshKonum/usr/bin/ssh

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.10
Linux 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 whoami
The 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.
user

Anahtar 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.10
The 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ü.

ssh
usage: 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 -V
OpenSSH_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 none

Yedi 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çenekKopyalaAçıklama
-lHesapBağlanılacak hesap adını belirtir
-pPortBağlanılacak portu belirtir (varsayılan 22)
-iAnahtar dosyasıÖzel anahtar dosyasını belirtir
-vBağlantı sürecini debug1 satırlarıyla yazdırır
-CGönderilip alınan verileri sıkıştırır
-XX11 yönlendirme (uzak GUI programları)
-TSanal terminal ayırmaz
-tSanal terminali zorla ayırır
-nStandart girdiyi /dev/null olarak değiştirir
-qUyarı ve bilgi mesajlarını azaltır
-oseçenek=değerYapılandırma dosyası seçeneğini yalnızca bu bağlantı için belirtir
-LYerel port yönlendirme
-FYapılandırma dosyasını belirtir
-GBağlanmadan uygulanacak ayarları yazdırır
-VOpenSSH istemci sürümünü yazdırır
SeçenekKopyalaAçıklama
-NUzak komut olmadan yalnızca bağlantıyı korur
-JBaş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 whoami
user

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

Bü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]:80

Yalnı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/mykey

Bu 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/mykey

Komut 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 22

hostname 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
server2

Uzak 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 $?
3

Komut 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 tty
not a tty

ssh 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 cat
hello
echo hello | ssh -n user@192.0.2.10 cat

Aynı 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.invalid
ssh: Could not resolve hostname nosuchhost.invalid: Name or service not known

Adres 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.10
ssh: connect to host 192.0.2.10 port 2222: Connection timed out

known_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 true
Host 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 whoami
Warning: Permanently added '192.0.2.10' (ED25519) to the list of known hosts.
user

Hesap 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 0

Connecting 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 DISPLAY
debug1: X11 forwarding requested but DISPLAY not set

DISPLAY, 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.

SSH komutu simülatörüAlmaLinux 9.8 → Debian 12
[root@server work]#
Yalnızca tarayıcı içinde çalışır ve gerçek bir sunucuya bağlanmaz. ↑↓ ile daha önce yazdığınız komutları geri çağırabilirsiniz.

🔢 SSS & önerilen içerikler

-o ServerAliveInterval=60 eklenirse bağlantıyı korumak için her 60 saniyede bir sunucuya sinyal gönderilir. -G ile kontrol edince serveraliveinterval varsayılan 0 değerinden 60'a değişti. Her seferinde yazmamak için aynı öğeyi ~/.ssh/config dosyasında Host altına ekleyin.

ssh kullanım bilgisinde parola alan bir seçenek yoktur. Parola ile kimlik doğrulamada parola, bağlanırken sorulduğunda yazılır; otomatik bağlanması gereken işlerde ssh-keygen ile oluşturulan bir anahtarla kimlik doğrulanır.

Üzerinden geçilecek sunucuyu -J ile yazın. [ssh -J admin@bastion.example.com user@192.0.2.10] komutunu -G ile kontrol edince üzerinden geçilecek sunucu proxyjump öğesine girdi.

ℹ️ 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.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

İnsan olduğunuzu kanıtlayın: 2   +   4   =