הפעלות כאלה נשארות מחוברות בזמן שהעורך עולה, ואז המסך מפסיק להתעדכן למרות שתהליך ה-SSH בבירור חי. הקלדה לא מפיקה דבר, Ctrl-C נראה כאילו אינו עושה דבר, והמסקנה הברורה היא שה-VPN הפיל משהו. רוב הזמן המנהרה תקינה והטרמינל המדומה המרוחק נמצא במצב שאיש לא התכוון אליו, כי הדהוד, קלט קנוני ובקרת זרימה חיים בטרמינל ולא ברשת. לגלות איזה משלושת אלה זז זו עבודה של שתי פקודות.

הקפיאה חיה בטרמינל, לא במנהרה

טרמינל מדומה נושא יותר מאשר בתים. הוא מחזיק דגלי משמעת שורה שקובעים אם הקלט מודהד, אם קריאות ממתינות לשורה חדשה, אם תווים מסוימים יוצרים אותות, ואם ניתן לעצור את הפלט בתו בקרה. עורך אינטראקטיבי מעביר את הטרמינל הזה למצב גולמי למשך כל הזמן ואמור לשחזר את ההגדרות הקודמות ביציאה. כשהשחזור לא קורה, הקונכייה שאליה חוזרים אינה הקונכייה שעזבתם, גם אם החיבור מעולם לא נפל.

השוו טרמינלים לפני שאתם מסיקים משהו. הפעלה שנייה שמריצה את אותו עורך מוכיחה שהלקוח והנתיב יכולים לעשות את העבודה; היא לא אומרת דבר על הטרמינל שדגליו שבורים.

קראו את ההגדרות בטרמינל שקָפָא

זהו קודם את ההתקן, ואז קראו את שתי הצורות של מצבו. הצורה הקריאה מראה מה מוגדר, וצורת המכונה היא זו שתוכלו להזין בחזרה מאוחר יותר.

tty
stty -a
stty -g

שלוש קבוצות דגלים מסבירות את רוב הדוחות האלה. הגדרות הדהוד קובעות אם הקשות מופיעות בכלל, כך שטרמינל עם הדהוד כבוי נראה מת בזמן שהקונכייה מקבלת כל תו. מצב קנוני קובע אם תוכנית רואה קלט שורה אחת בכל פעם, כך שטרמינל שנשאר במצב קנוני גורם ליישום במצב גולמי להיראות כאילו הוא מתעלם ממקשים עד Enter. הגדרות בקרת זרימה קובעות אם הטרמינל מציית לתווים XON ו-XOFF, והקבוצה הזו מייצרת את הקפיאה המזויפת המשכנעת ביותר מבין השלוש.

רשמו את הפלט לפני שאתם משנים משהו, במיוחד כשההפעלה נושאת קיצורי מקלדת מותאמים שמישהו תלוי בהם. צורת המכונה היא הרשומה הבטוחה ביותר, בכפוף לכך שהיא תלוית מימוש ושצריך לשחזר אותה אותו סוג מערכת שהפיק אותה.

תקנו את הטרמינל ההוא, לא את ההפעלה שאתם מקלידים בה

התיקון הסטנדרטי משחזר את הפרופיל השפוי שהעמוד במדריך מפרט, והוא משפיע על טרמינל אחד בלבד. אם העורך עדיין מחזיק עבודה שלא נשמרה בטרמינל הזה, הניחו לו עד שהעבודה תישמר.

מקונכייה אחרת, כוונו במפורש אל ההתקן הקפוא כדי שהטרמינל שאתם עובדים בו יישאר ללא פגע.

stty -F /dev/pts/7 -a
stty -F /dev/pts/7 sane

מסך ריק עם תצוגה פגומה הוא בעיה נפרדת ממשמעת שורה שבורה, ותוכנית reset מטפלת בו בכך שהיא מפיקה רצפי אתחול טרמינל. נסו קודם את תיקון המצב, כי הוא משנה הגדרות שאפשר לבדוק, בעוד שרצף ה-reset כותב מחדש את המסך ואינו מסביר דבר על איך נשבר.

מלכודת Ctrl-S מאחורי קפיאה משכנעת

כשבקרת זרימה בתוכנה מופעלת והתווים הרגילים מוקצים, Ctrl-S אומר לטרמינל להפסיק לשלוח פלט ו-Ctrl-Q אומר לו להמשיך. ההפעלה נשארת חיה לאורך כל הזמן, Ctrl-Q בודד הוא לרוב כל התיקון, ושום דבר לא מופיע בשום יומן, וכך הקפיאה הזו שורדת כל כך הרבה הסלמות.

בדקו את ההגדרות בפועל במקום להניח אותן. ניתן להקצות מחדש או לבטל את תווי ההתחלה והעצירה, וטרמינל שבקרת הזרימה שלו כבויה לא יגיב לאף אחד מהם.

אם המצב חוזר, או שה-SSH עצמו נתקע

מצב רע חוזר מצביע על משהו שמשנה את הדגלים בלי לשחזר אותם: קובץ אתחול, סקריפט עטיפה, מרבב שמאפס את החלון הלא נכון, או יישום שמת בזמן שהוא מחזיק במצב גולמי. הוסיפו בדיקה מותנית שמדווחת על המצב במקום איפוס בלתי מותנה, כי איפוס גורפי מסתיר את הסיבה ועלול לעקוף הגדרות מכוונות.

כשגם תעבורת SSH רגילה נתקעת, או שהתיקון לא משנה דבר, הטרמינל מפסיק להיות החשוד.

ssh -vvv [email protected]
ping -M do -s 1400 -c 3 host.example.com

תקיעה שמופיעה רק בהעברות גדולות מרמזת על בעיית MTU בנתיב, בעוד שתקיעה שבולעת גם הקשות בודדות מצביעה על הנתיב או על השרת ולא על גודל החבילה. הפרידו את הראיות מהטרמינל מראיות הרשת, כי עורך שעובד בהפעלה שנייה אינו הוכחה שהטרמינל הראשון היה אי פעם תקין.

מאמרים קשורים