vim Membeku melalui SSH? Semak stty Sebelum Menyalahkan VPN
Editor yang membeku melalui SSH biasanya masalah keadaan terminal, bukan terowong yang terputus. Baca stty pada pseudo-terminal yang betul, kemudian baiki hanya itu.
Sesi seperti ini kekal bersambung semasa editor bermula, kemudian skrin berhenti dikemas kini walaupun proses SSH jelas masih hidup. Menaip tidak menghasilkan apa-apa, Ctrl-C kelihatan tidak melakukan apa-apa, dan kesimpulan yang jelas ialah VPN telah menjatuhkan sesuatu. Kebanyakan masa terowong itu baik dan pseudo-terminal jauh berada dalam keadaan yang tiada siapa niatkan, kerana gema, input kanonik dan kawalan aliran hidup dalam terminal dan bukan dalam rangkaian. Mencari yang mana antara ketiga-tiganya bergerak ialah kerja dua arahan.
Pembekuan hidup dalam terminal, bukan terowong
Pseudo-terminal membawa lebih daripada bait. Ia menyimpan bendera disiplin baris yang menentukan sama ada input digema, sama ada bacaan menunggu baris baharu, sama ada aksara tertentu menjana isyarat, dan sama ada output boleh dihentikan oleh aksara kawalan. Editor interaktif menukar terminal itu kepada mod mentah sepanjang tempoh dan sepatutnya memulihkan tetapan sebelumnya apabila keluar. Apabila pemulihan tidak berlaku, shell yang anda kembali bukanlah shell yang anda tinggalkan, walaupun sambungan itu tidak pernah terputus.
Bandingkan terminal sebelum membuat sebarang kesimpulan. Sesi kedua yang menjalankan editor yang sama membuktikan klien dan laluan mampu melakukan kerja itu; ia tidak memberitahu apa-apa tentang terminal yang benderanya rosak.
Baca tetapan pada terminal yang membeku
Kenal pasti peranti dahulu, kemudian baca kedua-dua bentuk keadaannya. Bentuk yang boleh dibaca menunjukkan apa yang ditetapkan, dan bentuk mesin ialah yang boleh anda masukkan semula kemudian.
tty
stty -a
stty -g
Tiga kumpulan bendera menjelaskan kebanyakan laporan ini. Tetapan gema menentukan sama ada tekanan kekunci kelihatan sama sekali, jadi terminal dengan gema dimatikan kelihatan mati sementara shell menerima setiap aksara. Mod kanonik menentukan sama ada program melihat input satu baris pada satu masa, jadi terminal yang ditinggalkan dalam mod kanonik membuat aplikasi mod mentah kelihatan mengabaikan kekunci sehingga Enter. Tetapan kawalan aliran menentukan sama ada terminal mematuhi aksara XON dan XOFF, dan kumpulan itu menghasilkan pembekuan palsu yang paling meyakinkan antara ketiga-tiganya.
Rakam output sebelum menukar apa-apa, terutamanya apabila sesi membawa pengikatan kekunci tersuai yang diharapkan oleh seseorang. Bentuk mesin ialah rekod paling selamat, dengan syarat ia bergantung pada pelaksanaan dan harus dipulihkan oleh jenis sistem yang sama yang menghasilkannya.
Baiki satu terminal itu, bukan sesi tempat anda menaip
Pembaikan standard memulihkan profil sihat yang disenaraikan oleh halaman manual, dan ia hanya menjejaskan satu terminal. Jika editor masih memegang kerja yang belum disimpan dalam terminal itu, biarkan ia sehingga kerja itu disimpan.
Dari shell lain, sasarkan peranti yang membeku secara eksplisit supaya terminal tempat anda bekerja kekal tidak disentuh.
stty -F /dev/pts/7 -a
stty -F /dev/pts/7 sane
Skrin kosong dengan paparan rosak ialah masalah berasingan daripada disiplin baris yang rosak, dan program reset menanganinya dengan memancarkan jujukan permulaan terminal. Cuba pembaikan keadaan dahulu, kerana ia menukar tetapan yang boleh anda periksa, manakala jujukan reset menulis semula skrin dan tidak menjelaskan apa-apa tentang bagaimana ia rosak.
Perangkap Ctrl-S di sebalik pembekuan yang meyakinkan
Apabila kawalan aliran perisian diaktifkan dan aksara biasa ditetapkan, Ctrl-S memberitahu terminal berhenti menghantar output dan Ctrl-Q memberitahunya menyambung semula. Sesi kekal hidup sepanjang masa, satu Ctrl-Q selalunya keseluruhan pembaikan, dan tiada apa muncul dalam mana-mana log, dan begitulah pembekuan ini bertahan daripada begitu banyak peningkatan.
Periksa tetapan sebenar daripada menganggapnya. Aksara mula dan henti boleh ditetapkan semula atau dilumpuhkan, dan terminal dengan kawalan aliran dimatikan tidak akan bertindak balas terhadap mana-mana daripadanya.
Jika keadaan kembali, atau SSH sendiri tersekat
Keadaan buruk berulang menunjuk kepada sesuatu yang menukar bendera tanpa memulihkannya: fail permulaan, skrip pembalut, multiplekser yang menetapkan semula tetingkap yang salah, atau aplikasi yang mati sambil memegang mod mentah. Tambahkan pemeriksaan bersyarat yang melaporkan keadaan dan bukannya tetap semula tanpa syarat, kerana tetap semula menyeluruh menyembunyikan puncanya dan boleh menimpa tetapan yang disengajakan.
Apabila trafik SSH biasa juga tersekat, atau pembaikan tidak mengubah apa-apa, terminal berhenti menjadi suspek.
ssh -vvv [email protected]
ping -M do -s 1400 -c 3 host.example.com
Sekatan yang hanya muncul semasa pemindahan besar mencadangkan masalah MTU laluan, manakala yang turut menelan tekanan tunggal menunjuk kepada laluan atau pelayan dan bukan saiz paket. Asingkan bukti terminal daripada bukti rangkaian, kerana editor yang berfungsi dalam sesi kedua bukan bukti bahawa terminal pertama pernah sihat.