SSH'ye verileri yalnızca enter veya sekme basıldıktan sonra ve her tuşa basmadan sonra göndermesini söyleyebilir miyim?
SSH'ye verileri yalnızca enter veya sekme basıldıktan sonra ve her tuşa basmadan sonra göndermesini söyleyebilir miyim?
Yanıtlar:
Hayır, çünkü SSH yazdığınız şeyin eyleme girmek için bir giriş veya sekme gerektirip gerektirmeyeceğini bilmediğinden, komut geçmişinizden geçmeye çalışıyorsanız, örneğin, ^R
veya yukarı oklar gönderilmez kendileri ve bu ... nahoş olurdu.
Yine de ekranda görünmesi için her karakter arasında beklemeniz gerekmez; ne yazmanız gerektiğini biliyorsanız, istediğiniz kadar hızlı bir şekilde bastırın ve terminal yazmayı bıraktığınız andan itibaren yaklaşık bir gidiş-dönüş saatinde yetişecektir; Yine de bir satır tamponlu kurulum (paket kaybı farklı, ancak kendi ilginç tuhaflıklar tanıtır).
PuTTY, kullanılabilecek iki özellik sunar: "yerel yankı" ve "yerel çizgi düzenleme". Yerel çizgi düzenleme her şeyi arabelleğe alır ve yalnızca bir satır dönüşünden sonra sunucuya gönderir. Bu komut satırının üstesinden gelmeyi çok daha kolaylaştırabilir, ancak bir metin editörü cehennemi kullanmayı da sağlayabilir.
PuTTY, algılanan bağlantı gecikmesini etkileyebilecek bazı şeyleri (Nagle algoritması) etkinleştirmek / devre dışı bırakmak için başka seçeneklere de sahiptir. Gördüğüm gibi, OpenSSH istemcisi PuTTY'nin bu konuda yaptığı tüm özellikleri sunmuyor ve karşılaştıran bir Linux alternatifi tanımıyorum.
Aksi takdirde, womble haklı.
Mosh bu sorunu çözecek şekilde tasarlandı. Yüksek gecikmeli ve güvenilir olmayan bağlantılar üzerinden kullanım için tasarlanmıştır ve yerel yankı ve çizgi düzenlemesi sağlar.
Ssh oturumunu ssh host.example.org bash
(veya kullanmak istediğiniz kabuk) ile açın.
Uzak kabuğa çizgi arabelleğe alınmış modu alacaksınız, bu bir istem ve çizgi düzenleme işlemlerine sahip olmayacağınız ancak yerel yankı ve "bir seferde bir satır" modu elde edeceğiniz anlamına gelir. Çok kötü bir bağlantı ile çalışırken bazen yararlıdır. Tüm programlar düzgün çalışmayacak çünkü bir takma adınız olmayacak, ancak çoğu UNIX yardımcı programı gayet iyi çalışıyor.
Güncelleme:
Yukarıdaki hile kullanırken normal hat düzenleme (alabilirsiniz taleb de) yerel olarak adlandırılan uygun bir sarıcı programı kullanarak sonuna rlfe . Sadece koş rlfe ssh host.example.org bash
.
Aynı sorunu yaşama ( bazı yerlerde korkunç mobil veri kalitesi nedeniyle yüksek gecikme süresi ve paket kaybı ) ve benim için kesip atmamaya dikkat et (tüm uzak ana bilgisayarlarda özel programlar gerekir, UTF8'i yerel olarak ve uzaktan tüm sunucularda kırmadan , tüm güvenlik duvarlarını değiştirmek - ve yine de gerçekten yerel çizgi düzenlemesi sağlamaz) ssh için yerel çizgi düzenleme modu sağlamak için küçük bir sarmalayıcı yazmaya karar verdim .
Varsayılan olarak, her şeyi varsayılan char-char modundaki ssh'ye iletir, ancak herhangi bir zamanda readline tarafından desteklenen yerel çizgi düzenleme moduna girmek için bir kısayol tuşuna basabilirsiniz. Böylece tüm satırları yerel olarak (düzenleme, komut geri çağırma vb.) Girebilirsiniz, ve sonra enter tuşuna bastığınızda uzak tarafa tek bir TCP paketi olarak gönderilir.
Avantaj, gecikmesiz komut satırı düzenlemesidir (eski telnet pişmiş / kurallı "satır satır arabelleğe alınmış mod" gibi, ancak GNU okuma çizgisi tarafından sağlanan üstün düzenleme komutlarıyla ). Ayrıca, sunucularda veya güvenlik duvarlarında hiçbir şeyin değiştirilmesi gerekmez. Düzenleyiciler ve diğer lanet tabanlı programlar, normal ssh bağlantısında olduğu gibi varsayılan karakter karakter modunda normal modda (gecikmeli de olsa) çalışmaya devam eder.
Dezavantajı, her istediğiniz zaman yerel çizgi düzenleme moduna girmek için kısayol tuşuna basmanız veya otomatik algılamaya izin vermek için uzak ana bilgisayardaki istemini değiştirmeniz gerekir. Ayrıca, uzak sekme dosya adı tamamlaması şu anda yalnızca sizi char-by-char moduna bırakarak çalışır (veya tercihlerinize bağlı olarak uzaktaki yerine yerel dosya sistemini kullanır). Yine de devam etmekte olan bir çalışma, bu nedenle, çekme istekleri veya iyileştirme için uygulanabilir fikirler açıktır!
Avantaj, yalnızca kabuğunuzun (ve satır düzenlemesinin) yerel ve gecikmesiz olması değil, aynı zamanda uzak dosya sisteminde gezinebileceğiniz ve uzak dosyalar için kabuk dosya adı tamamlama ( sekme tuşu ) kullanabilmenizdir . Ayrıca, (en iyi özellik IMHO), uzaktaki dosyaları gecikmeden düzenlemek için yerel tercih editörünüzü kullanabilirsiniz.
Dezavantajları (özellikle bağlantı aynı zamanda düşük bant genişliği ise ve yalnızca yüksek gecikme süresi değil) düzenlenmesi gereken her bir dosya için tamamen yerel ana bilgisayara aktarılmalı ve ardından düzenlemeden sonra tekrar uzaktan kumandaya aktarılmalıdır. Sshfs (sshfs (1) seçenekleri bakınız bazı önbelleğe sağlar gelmez önbelleği , cache_timeout , cache_x_timeout biraz o sorunları hafifletmek için). Ayrıca, uzaktan kumandada bir şey çalıştırmak istiyorsanız, başka bir ekran kullanmanız veya " ssh remotehost " ile tüm komutları öneklemeniz gerekir (örneğin ssh remotehost sudo service apache restart
). Seçenek Bkz ControlMaster içinde ssh_config (5) yani hızlı (ve şifre sormadan) yürütmek için yapmak.
Yaparak yalnızca komut çalıştırıyorsanız, bu davranışı taklit edebilirsiniz,
ssh user @ targetmachine 'komutları bir dizgede'
fakat,
ssh-agent
, şifreyi kullanmak veya şifreyi girmek zorunda kalacaksınız .Yazarken akıcı bir yankı elde etmek için tmux kullanabilirsiniz. Yerel olarak tmux'u çalıştırın. Bir bölmede ssh kabuğuna ve altındaki bölmede yerel bir kabuğa sahipseniz, yerel bölmeden uzak bölmeye anahtar gönderebilirsiniz.
tmux send-keys -t top 'ls' C-m
Etkileşimli komutlar ve küçük komutlar doğrudan ssh kabuğuna yazın. Gecikme yazmamı engellemeye başladığında, yerel bölmeye geçip gönder tuşlarını kullanıyorum. Bu bile bir komut yazmanın ortasında çalışır.
Kısayol için bunu .bashrc dosyama ekledim.
function ts {
args=$@
tmux send-keys -t right "$args" C-m
}
Gönderme anahtarlarını açıklayan Christian Pelczarski'ye teşekkürler: https://minimul.com/increased-developer-productivity-with-tmux-part-5.html
Örneğin, tırnak kullanırken kaçmak zorunda kalacaksınız.
ts git config --global alias.lola \'log --graph --decorate --pretty=oneline --abbrev-commit --all\'
Bu istediğini yapar. Hem istemciyi hem de sunucuyu yüklemeniz gerekir ve OpenSSH yukarı akış değişiklikleri asla kabul etmedi. https://github.com/hyc/OpenSSH-LINEMODE