Apakah ada cara untuk menghindari keterlambatan pengetikan SSH?


43

Dapatkah saya memberi tahu SSH untuk mengirim data hanya setelah menekan enter atau tab, dan tidak setelah setiap penekanan tombol individu?


Saya sangat tertarik di mana Anda memiliki penundaan mengetik sehingga Anda tidak dapat bekerja dengannya. Saya menggunakan ssh di zaman modem dan tidak pernah menghadapi masalah ini.
mailq

4
Saya mengakses SliceHost VPS (USA) dari Belgia. Penundaan ini cukup terlihat untuk membuat saya bingung. Namun, saya perhatikan bahwa orang lain tampaknya tidak terlalu terganggu dengan ini daripada saya ..
StackedCrooked


@mailq Anda tidak menggunakan 3G pada 2019? Menyimpan dari rumah desa desa atau bawah tanah lebih seperti melakukannya dengan dialup
POMATu

Jawaban:


32

Tidak, karena SSH tidak memiliki cara untuk mengetahui apakah apa yang Anda ketikkan akan memerlukan masuk atau tab untuk bertindak - jika Anda mencoba menelusuri riwayat perintah Anda, misalnya, ^Rpanah ke atas tidak akan dikirim oleh diri mereka sendiri, dan itu akan menjadi ... tidak menyenangkan.

Anda tidak harus menunggu di antara setiap karakter agar karakter tersebut muncul di layar; jika Anda tahu apa yang harus Anda ketik, bash pergi secepat yang Anda suka, dan terminal akan mengejar sekitar satu kali perjalanan pulang pergi dari saat Anda berhenti mengetik, yang kira-kira sama baiknya dengan Anda akan keluar dari setup line-buffered tetap (paket loss berbeda, tetapi memperkenalkan quirks yang menarik itu sendiri).


Saya akan sangat tertarik menemukan cara untuk membandingkan kecepatan ssh-typing-speed di beberapa mesin. Saya mengamati bahwa kecepatan dapat bervariasi BANYAK antara mesin yang terletak di tempat yang sama dan yang tidak memiliki beban berat pada mereka. Teori saya adalah ini terjadi terutama dengan contoh kecil dari AWS (seperti mikro atau mini).
Sorin

1
Lihatlah kertas Mosh. Penulis melakukan benchmarking mosh.org/#techinfo
user7610

25

Putty menawarkan dua fitur yang mungkin berguna: "gema lokal" dan "pengeditan baris lokal". Pengeditan baris lokal mendukung semuanya dan hanya mengirimkannya ke server setelah pengembalian baris. Itu bisa membuat baris perintah lebih mudah untuk ditangani, tetapi mungkin juga membuat menggunakan editor teks neraka.

Putty juga memiliki beberapa opsi lain untuk mengaktifkan / menonaktifkan hal-hal tertentu (algoritma Nagle) yang dapat mempengaruhi latensi koneksi yang dirasakan. Seperti yang saya lihat, klien OpenSSH tidak menawarkan semua fitur yang dilakukan PutTY dalam hal ini, dan saya tidak tahu tentang alternatif Linux yang membandingkan.

Kalau tidak, womble benar.


Ini harus menjadi jawaban yang diterima
Freddie Fabregas

Saya gagal menginstal Putty pada macOS, apakah ada penggantinya?
Aero Windwalker

Putty di linux agak menyakitkan. Itu tidak dapat terhubung kembali secara otomatis, menunjukkan beberapa kotak pesan pada putuskan sambungan dan saya perlu membuka jendela lagi. Saya berharap saya bisa menggunakan sesuatu seperti kitty atau plink.exe di linux atau lebih baik hanya men-tweak autossh. Beberapa perangkat tidak mendukung mosh tho (jika saya mencoba mengakses router openwrt rumah saya)
POMATu

22

Mosh dirancang untuk mengatasi masalah ini. Ini dirancang untuk digunakan pada latensi tinggi dan koneksi yang tidak dapat diandalkan, dan menyediakan gema lokal dan pengeditan garis.


Anda dapat menginstalnya di direktori lokal dari sumber tanpa sudo. Juga, lihat mosh.org. Dikatakan, "Tidak ada kode istimewa. Tidak ada daemon. Anda tidak perlu menjadi superuser untuk menginstal atau menjalankan Mosh. Klien dan server adalah executable yang dijalankan oleh pengguna biasa dan hanya berlangsung selama masa koneksi."
Steven C. Howell

1
Hanya untuk diperhatikan. Mosh bukan SSH. Ini menggunakan protokol miliknya sendiri. (Tapi saya tidak punya masalah dengan itu.)
user7610

Ini bekerja dari awal untuk saya di jaringan wifi buruk android dan rumah. Ia tahu tentang readline
tinmarino

9

Buka sesi ssh dengan ssh host.example.org bash(atau shell apa pun yang ingin Anda gunakan).

Anda akan mendapatkan mode buffer-line ke shell jarak jauh, yang berarti Anda tidak akan mendapatkan prompt dan pengeditan baris tetapi Anda akan mendapatkan mode echo lokal dan mode "satu baris pada satu waktu". Terkadang berguna saat bekerja dengan koneksi yang sangat buruk. Tidak semua program akan berjalan dengan baik karena Anda tidak akan memiliki pseudo-tty tetapi sebagian besar utilitas UNIX berfungsi dengan baik.

Memperbarui:

Saat menggunakan trik di atas, Anda bisa mendapatkan pengeditan baris normal ( readline ) di ujung lokal dengan menggunakan program wrapper yang nyaman yang disebut rlfe . Lari saja rlfe ssh host.example.org bash.


1
Saya mencoba dan tidak merasa itu bisa diterapkan. Tapi itu keren untuk diketahui, terima kasih.
StackedCrooked

ini bekerja sangat baik untuk saya.
danau

6

Setelah memiliki masalah yang sama ( latensi tinggi dan hilangnya paket karena kualitas data seluler yang mengerikan di beberapa lokasi), dan mosh tidak memotongnya untuk saya (perlu program khusus pada semua host jarak jauh, memperbaiki UTF8 secara lokal dan jarak jauh di semua server tanpa memecahkannya) , memodifikasi semua firewall - dan tidak benar-benar menyediakan pengeditan baris lokal) Saya telah memutuskan untuk menulis pembungkus kecil untuk menyediakan mode pengeditan baris lokal untuk ssh .

Secara default, ini hanya meneruskan semuanya ke ssh dalam mode default char-by-char, tetapi Anda dapat menekan tombol pintas untuk memasuki mode pengeditan baris lokal bertenaga baca-baca kapan saja. Jadi Anda bisa memasukkan (dengan mengedit, mengingat perintah, dll) seluruh baris secara lokal, dan kemudian ketika Anda menekan enter akan dikirim sebagai satu paket TCP ke sisi jauh.

Keuntungannya adalah pengeditan baris perintah bebas-lag (seperti telnet lama yang dimasak / kanonik "mode buffered baris demi baris", tetapi dengan perintah pengeditan superior yang disediakan oleh GNU readline ). Juga, tidak ada yang perlu diubah di server atau firewall. Dan editor dan program berbasis kutukan lainnya terus bekerja secara normal (walaupun dengan lag) dalam mode char-by-char default seperti pada koneksi ssh normal.

Kekurangannya adalah Anda harus menekan tombol pintas untuk masuk ke mode pengeditan baris lokal setiap kali Anda menginginkannya, atau Anda perlu memodifikasi prompt pada host jarak jauh untuk memungkinkan deteksi otomatis. Selain itu, penyelesaian nama file tab jarak jauh saat ini hanya berfungsi dengan mengembalikan Anda ke mode char-by-char (atau menggunakan sistem file lokal alih-alih yang jauh, tergantung pada preferensi Anda). Ini sedang dalam proses, jadi tarik permintaan atau ide yang bisa diterapkan untuk perbaikan dipersilahkan!


Di sisi yang tidak konvensional, Anda dapat menggunakan SSHFS sebagai alternatif untuk memasang sistem file jarak jauh secara lokal.

Keuntungannya tidak hanya bahwa shell Anda (dan pengeditan barisnya) adalah lokal dan bebas lag, tetapi juga bahwa Anda dapat menavigasi sistem file jarak jauh dan menggunakan penyelesaian nama file shell ( kunci tab ) untuk file jarak jauh. Selain itu, (fitur IMHO terbaik) Anda dapat menggunakan editor lokal pilihan Anda untuk mengedit file jarak jauh tanpa lag.

Kekurangannya adalah (terutama jika Anda menautkan juga bandwidth rendah, dan tidak hanya latensi tinggi) bahwa untuk setiap file yang akan diedit, perlu ditransfer sepenuhnya ke localhost, dan kemudian setelah diedit, sepenuhnya ditransfer ke remote lagi. SSHFS memang menyediakan untuk beberapa cache (lihat sshfs (1) opsi cache , cache_timeout , cache_x_timeout ) untuk mengurangi masalah itu. Juga, jika Anda ingin mengeksekusi sesuatu pada remote Anda perlu menggunakan layar lain atau awalan semua perintah dengan " ssh remotehost " (misalnya ssh remotehost sudo service apache restart). Lihat opsi ControlMaster di ssh_config (5) untuk membuatnya lebih cepat dieksekusi (dan tanpa diminta kata sandi).


3

Anda bisa meniru perilaku itu jika Anda hanya menjalankan perintah dengan melakukan,

ssh user @ targetmachine 'perintah saya dalam string'

tapi,

  1. ini menambahkan penundaan tambahan dalam membuat koneksi (dapat dikurangi menggunakan koneksi master / shared ssh )
  2. jika Anda tidak memiliki kunci pribadi tanpa kata sandi, Anda harus menggunakan ssh-agentatau mengetik kata sandi
  3. jelas itu tidak berfungsi jika Anda berinteraksi dengan menu atau mengedit file, dll.

1

Anda dapat menggunakan tmux untuk mendapatkan gema pengetikan yang lancar. Jalankan tmux secara lokal. Jika Anda memiliki shell ssh di satu panel, dan shell lokal di panel di bawahnya, maka dari panel lokal Anda dapat mengirim kunci ke panel jarak jauh.

tmux send-keys -t top 'ls' C-m

Perintah interaktif dan perintah kecil saya ketik langsung di shell ssh lagging. Segera setelah jeda mulai menghalangi pengetikan saya, saya beralih ke panel lokal dan menggunakan tombol kirim. Ini berfungsi bahkan di tengah mengetik perintah.

Untuk pintas saya menambahkan ini ke .bashrc saya

function ts {
    args=$@
    tmux send-keys -t right "$args" C-m
}

Terima kasih kepada Christian Pelczarski untuk menjelaskan kunci-kirim: https://minimul.com/increased-developer-productivity-with-tmux-part-5.html

Anda harus melarikan diri saat menggunakan kutipan, misalnya

ts git config --global alias.lola \'log --graph --decorate --pretty=oneline --abbrev-commit --all\'

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.