- SSH oturumu donduğunda süreci zorla sonlandırmaya gerek kalmadan, SSH’ye gömülü escape sequence menüsü üzerinden çeşitli kontroller yapılabilir
- Oturum içinde
↵Enter tuşuna bastıktan sonra ~? yazarsanız gizli komut listesi görüntülenir; ~. ile de her durumda bağlantıyı anında kapatabilirsiniz
- Bu escape sequence’ler SSH istemcisinin kendisine gömülüdür; bu yüzden sunucu yanıt vermese veya bağlantı kopmuş olsa bile çalışır
- İç içe SSH oturumlarında
~~ kullanarak sequence’i içteki istemciye iletebilirsiniz
- Ayrıca
-C, -v, -D gibi kullanışlı SSH seçenekleri de tanıtılıyor
SSH escape sequence menüsü
- SSH oturumu içinde
↵Enter tuşuna basıp ardından ~? yazarsanız desteklenen escape sequence listesini görebilirsiniz
- Başlıca sequence’ler:
~. — bağlantıyı kapatır (multiplex edilmiş oturumlar dahil)
~B — uzak sisteme BREAK sinyali gönderir
~C — komut satırını açar (port forwarding ayarlanabilir, help yazarak yönergeleri görebilirsiniz)
~R — rekey isteği
~V/v — verbosity’yi (LogLevel) artırır/azaltır
~^Z — SSH’yi askıya alır (suspend)
~# — forward edilen bağlantıların listesini gösterir
~& — SSH’yi arka plana alır (bağlantının kapanmasını beklerken)
~~ — escape karakterinin kendisini gönderir (iki kez girilir)
- Bu sequence’ler SSH istemcisinin kendisine gömülü olduğundan, SSH sunucusu yanıt vermediğinde veya bağlantı kopmuş olsa bile çalışır
- En kullanışlısı
~. komutudur; oturum donduğunda her durumda anında çıkış yapmanızı sağlar
- Escape sequence’ler yalnızca yeni satırdan (newline) hemen sonra algılanır
İç içe SSH oturumlarında kullanım
- Bir SSH oturumunun içinden yeniden SSH ile bağlandığınız iç içe ortamda,
~~ kullanarak sequence’i içteki istemciye iletebilirsiniz
- Örnek:
pinkie@stable:~$ ssh ponyville # stable
pinkie@ponyville:~$ ssh manehatten # stable › ponyville
pinkie@manehatten: ~$ # stable › ponyville › manehatten
pinkie@manehatten:~$ Connection to manehatten closed. # ↵Enter `~~.`
pinkie@ponyville:~$ # stable › ponyville
pinkie@ponyville:~$ ssh manehatten stable › ponyville
pinkie@manehatten: ~$ # stable › ponyville › manehatten
pinkie@manehatten:~$ Connection to ponyville closed. # ↵Enter `~.`
pinkie@stable:~$ # stable
stable → ponyville → manehatten şeklinde bağlıyken
~~. girildiğinde yalnızca en içteki oturum (manehatten) kapanır ve ponyville’e dönülür
~. girildiğinde ara oturum (ponyville) da kapanır ve stable’a dönülür
Bonus SSH seçenekleri
ssh -C — gzip sıkıştırmasını etkinleştirir; belgelerde hızlı ağlarda gereksiz denilse de TUI kullanımı veya büyük miktarda log çıktısında gecikme ve tepki süresini iyileştirmede oldukça etkilidir
ssh -v — ayrıntılı loglamayı etkinleştirir (-vv, -vvv ile daha fazla bilgi gösterilebilir); yavaş bağlantılarda veya Raspberry Pi gibi yavaş cihazlara bağlanırken bağlantının takılıp kalmadığını mı yoksa sadece yavaş mı olduğunu ayırt etmek için kullanışlıdır
ssh -D 1234 — localhost:1234 üzerinde bir SOCKS proxy oluşturur; sunucunun ağı üzerinden erişim sağlayarak sunucu tarafındaki LAN işleri veya basit bir DIY VPN amacıyla kullanılabilir
5 yorum
Vay, gerçekten ilk kez gördüğüm bir özellik; artık terminali kapatmaya gerek kalmayacak sanırım.
Vay be.. SSH'yi on küsur yıldır kullanıyorum, ilk kez böyle bir özellik görüyorum.
Gerçekten de bir menü açılıyor.
Cihaz durduruluyor
Ee......
Hacker News görüşleri
manpage'leri güçlü biçimde savunmaya çalışıyordum. Çoğu açık kaynak manpage'in kalitesi yüksek, bazıları ise gerçekten mükemmel
Ama
manaracının kendisinde sorunlar var. Örneğin openssh istemcisindeki~?gibi escape sözdizimini bulmaya çalıştım ama manpage içinde aranamıyorBunun nedeni man'in
~karakterini garip bir Unicode tilde işaretine dönüştürmesi; bu yüzden grep ile aranamıyor.-karakteri de aynı şekilde dönüştürülüyor ve aranamıyorBu, komut satırı araçlarının belgelenmesi açısından ölümcül. Bu tür dönüştürme özellikleri varsayılan olarak kapalı olmalı
ctrl-rile birebir arama yapılabiliyor (/<ctrl-r>~?)lessile düzgün çalışıyorman -E asciiseçeneğiyle çözdüm. Ortamım Cygwin 3.6.6, yani dağıtıma özgü bir fark da olabilirneovimkullanırsanız~?araması düzgün çalışıyor. Yalnız regex escape'ini (\~?) bilmek gerekiyor\~\?araması düzgün çalışıyor~.kısayolunu uzun zamandır kullanıyorum ama yardım menüsünü bilmiyordum~karakterini iki kez girerseniz gerçek bir tilde gönderebilirsiniz ve normal oturumlarda ilk karakter olarak girilmediği sürece escape olarak algılanmazYani
~yalnızca satırın ilk karakteri olup yeni satırdan hemen sonra geldiğinde escape olarak çalışır. Arayüz tasarımı epey özenliBu yüzden
ls ~/^?^?^?^?^?~/a.outgibi bir çıktı görebilirsiniz. SSH ekranı değil, giriş akışını izler~.ile çıkmak için önce Enter'a basmanız gerekir, bu da sunucuya iletilebilirSSH'yi 15 yıldan uzun süredir kullanıyorum ama böyle escape dizileri olduğunu ilk kez öğrendim
Bir dahaki sefere oturum donarsa mutlaka
~.deneyeceğim. Terminali kapatmaktan çok daha iyiVPN veya Tailscale kullanmak bunu çözebilir; ya da bağlantıyı canlı tutmak için
tcp_keepaliveparametresini ayarlayabilirsinizÖrnek ayar: Böylece CGNAT ortamında da oturum açık kalır
~.kullanıyorum. SSH'ye-vseçeneği vermek bağlantı sorunlarını debug etmek için de yararlı~~.ile kapatabilirsiniz~.yazmadan önce mutlaka Enter'a basıp yeni satırdan başlamalısınızBen de
~.'ı uzun zamandır kullanıyordum ama diğer escape'leri bilmiyordum. Shell prompt'unda doğrudan çalışmıyor; bu yüzdencatçalıştırıp ardından~?yazmak gerekiyor<enter>~.ile çıkılabilir~.ile kapatıyordum ama~karakterinin yalnızca yeni satırda çalıştığını bilmiyordum.~^Zde kullanışlı görünüyorEski telnet'in ctrl-[ dizisini hatırlattı
Entersadece yeni bir escape girişi için hazırlık yaparBu özellikler aslında rsh'den miras. Yaşlı biri olarak hatırlıyorum
~komut tarzı önce cu(1)'de ortaya çıktı. rsh'den de önce, 4.1BSD dönemindescp'yi rcp gibi kullanmak için-Oseçeneğini vermek gerekiyorSSH'nin menüsü tünelleme yaparken kullanışlı. Bugünlerde Tailscale gibi şeylerle yer değiştiriyor ama hâlâ işe yarıyor
Birden fazla SSH oturumunu tek bağlantıda multiplex ederek kimlik doğrulamayı tekrar etmemek mümkün oluyor ve sekme tamamlama da hızlanıyor
Ama bağlantı takıldığında biraz can sıkıcı olabiliyor
“Gizli” olmaktan çok, çoğu kişinin manpage'i sonuna kadar okumadığı için bilmediği bir özellik
~escape'i 1970'lerdeki UNIX cu içinde de vardı. SSH onun bir devamı sayılabilirControlMaster yapılandırmasının varsayılanları pek kullanışlı değil; bu yüzden aşağıdaki gibi bir yapılandırma bloğu eklemek iyi olabilir
Böylece aynı host'a yapılan SSH/scp/rsync bağlantıları mevcut bağlantıyı yeniden kullanır
Oturum sırasında
~Cescape'iyle porta yönlendirme de ekleyebilirsinizControlPersistsüresini 1 saate kadar çıkarırsanız kısa aralıklı girişlerde bağlantı korunurBen de SSH oturumu donduğunda yalnızca
[Enter] ~.ile toparlayabiliyordumLinux uzmanı değilseniz pek bilinmeyen gizli bir özellik gibi duruyor
Biliyordum ama pek kullanacağım bir şey değildi. (...)