פתרון בעיות באמצעות המסוף הטורי

בדף הזה מוסבר איך להפעיל גישה אינטראקטיבית לקונסולה הטורית של מכונה כדי לנפות באגים בבעיות של הפעלה ורשת, לפתור בעיות במכונות שלא פועלות, לבצע פעולות ב-GRand Unified Bootloader‏ (GRUB) ולבצע משימות אחרות לפתרון בעיות.

למכונה של Compute Engine יש ארבע יציאות טוריות וירטואליות. האינטראקציה עם יציאה טורית דומה לשימוש בחלון הטרמינל, בכך שהקלט והפלט הם במצב טקסט בלבד ואין ממשק גרפי או תמיכה בעכבר. מערכת ההפעלה של המכונה, ה-BIOS וישויות אחרות ברמת המערכת כותבים לעיתים קרובות פלט ליציאות הטוריות, ויכולים לקבל קלט כמו פקודות או תשובות להנחיות. בדרך כלל, הישויות האלה ברמת המערכת משתמשות ביציאה הטורית הראשונה (יציאה 1), ולעיתים קרובות היציאה הטורית הראשונה נקראת "הקונסולה הטורית".

אם אתם רק צריכים לראות את הפלט של היציאה הטורית בלי לשלוח פקודות לקונסולה הטורית, אתם יכולים להפעיל את ה-method‏ getSerialPortOutput או להשתמש ב-Cloud Logging כדי לקרוא את המידע שהמכונה כתבה ליציאה הטורית שלה. מידע נוסף זמין במאמר הצגת יומנים של יציאה טורית. עם זאת, אם נתקלתם בבעיות בגישה למכונה באמצעות SSH או אם אתם צריכים לפתור בעיות במכונה שלא הופעלה באופן מלא, אתם יכולים להפעיל גישה אינטראקטיבית לקונסולה הטורית, שמאפשרת לכם להתחבר לכל אחת מהיציאות הטוריות של המכונה ולקיים איתה אינטראקציה. לדוגמה, אתם יכולים להריץ פקודות ישירות ולהגיב להנחיות ביציאה הטורית.

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

לפני שמתחילים

  • אם עדיין לא עשיתם את זה, תצטרכו להגדיר אימות. אימות הוא התהליך שבו מאמתים את הזהות שלכם כדי לקבל גישה לממשקי API ולשירותים של Google Cloud . כדי להריץ קוד או דוגמאות מסביבת פיתוח מקומית, אפשר לבצע אימות ל-Compute Engine באחת מהדרכים האלה:

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

    המסוף

    כשמשתמשים במסוף Google Cloud כדי לגשת לשירותים ולממשקי ה-API של Google Cloud , לא צריך להגדיר אימות.

    gcloud

    1. התקינו את ה-CLI של Google Cloud ואז היכנסו ל-CLI של gcloud באמצעות הזהות המאוחדת שלכם. אחרי שנכנסתם לחשבון, אתחלו את ה-CLI של Google Cloud באמצעות הפקודה הבאה:

      gcloud init
  • הגדרת אזור ותחום כברירת מחדל.
  • REST

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

      התקינו את ה-CLI של Google Cloud ואז היכנסו ל-CLI של gcloud באמצעות הזהות המאוחדת שלכם.

    מידע נוסף מופיע במאמר אימות לשימוש ב-REST במסמכי האימות של Google Cloud .

הפעלת גישה אינטראקטיבית בקונסולה הטורית

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

הפעלת הגישה לפרויקט

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

כברירת מחדל, הגישה האינטראקטיבית ליציאה הטורית מושבתת. אפשר גם להשבית אותה באופן מפורש על ידי הגדרת המפתח serial-port-enable לערך FALSE. בכל מקרה, כל הגדרה ברמת המכונה מבטלת את ההגדרה ברמת הפרויקט או את הגדרת ברירת המחדל.

המסוף

  1. נכנסים לדף Metadata במסוף Google Cloud .

    מעבר למטא-נתונים

  2. לוחצים על עריכה כדי לערוך את רשומות המטא-נתונים.
  3. מוסיפים רשומה חדשה שמשתמשת במפתח serial-port-enable ובערך TRUE.
  4. שומרים את השינויים.

gcloud

ב-Google Cloud CLI, מזינים את הפקודה project-info add-metadata באופן הבא:

gcloud compute project-info add-metadata \
    --metadata serial-port-enable=TRUE

REST

ב-API, שולחים בקשה ל-method‏ projects().setCommonInstanceMetadata ומספקים את המפתח serial-port-enable עם הערך TRUE:

{
 "fingerprint": "FikclA7UBC0=",
 "items": [
  {
   "key": "serial-port-enable",
   "value": "TRUE"
  }
 ]
}

הפעלת גישה למכונה

להפעיל גישה אינטראקטיבית לקונסולה טורית במכונה ספציפית. הגדרה ברמת המכונה, אם היא קיימת, מבטלת כל הגדרה ברמת הפרויקט. אפשר גם להשבית את הגישה למכונה ספציפית, גם אם הגישה מופעלת ברמת הפרויקט, על ידי הגדרת serial-port-enable ל-FALSE במקום ל-TRUE. באופן דומה, אפשר להפעיל את הגישה למכונה אחת או יותר גם אם היא מושבתת בפרויקט, באופן מפורש או כברירת מחדל.

המסוף

  1. נכנסים לדף VM instances במסוף Google Cloud .

    כניסה לדף VM instances

  2. לוחצים על המכונה שרוצים לאפשר גישה אליה.
  3. לוחצים על Edit.
  4. בקטע Remote access, מסמנים את התיבה Enable connecting to serial ports.
  5. שומרים את השינויים.

gcloud

ב-Google Cloud CLI, מזינים את הפקודה instances add-metadata ומחליפים את instance-name בשם של המכונה.

gcloud compute instances add-metadata instance-name \
    --metadata serial-port-enable=TRUE

REST

ב-API, שולחים בקשה למתודה instances().setMetadata עם המפתח serial-port-enable והערך TRUE:

POST https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/instances/example-instance/setMetadata
{
 "fingerprint": "zhma6O1w2l8=",
 "items": [
  {
   "key": "serial-port-enable",
   "value": "TRUE"
  }
 ]
}

הגדרת קונסולה טורית למכונה פיזית

במכונות Bare Metal, מגדילים את קצב העברת הנתונים (קצב באוד) של הקונסולה הטורית ל-115,200‎ bps (כ-11.5kB/sec). שימוש במהירות נמוכה יותר עלול לגרום לפלט משובש או חסר במסוף.

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

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

console=ttyS0,115200

אם משנים את הגדרות ה-GRUB, משתמשים בפקודה שדומה לזו:

serial --speed=115200

חשוב לוודא שאתם מעדכנים את ההגדרות של תוכנת האתחול בפועל. אפשר לעשות את זה באמצעות update-grub, grub2-mkconfig או פקודה דומה.

התחברות לקונסולה טורית

ב-Compute Engine יש שערים אזוריים לקונסולה טורית בכל אזור של Google Cloud. אחרי שמפעילים את הגישה האינטראקטיבית לקונסולה הטורית של מכונה, אפשר להתחבר לקונסולה טורית אזורית.

הקונסולה הטורית מאמתת משתמשים באמצעות מפתחות SSH. באופן ספציפי, צריך להוסיף את מפתח ה-SSH הציבורי למטא-נתונים של הפרויקט או המכונה, ולשמור את המפתח הפרטי במכונה המקומית שממנה רוצים להתחבר. ה-CLI של gcloud ומסוף Google Cloud מוסיפים לפרויקט מפתחות SSH באופן אוטומטי. אם אתם משתמשים בלקוח של צד שלישי, יכול להיות שתצטרכו להוסיף מפתחות SSH באופן ידני.

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

המסוף

כדי להתחבר לקונסולה טורית אזורית של מכונה:

  1. נכנסים לדף VM instances במסוף Google Cloud .

    כניסה לדף VM instances

  2. לוחצים על המכונה שאליה רוצים להתחבר.
  3. בקטע Details, לוחצים על Connect to serial console כדי להתחבר לקונסולה הטורית ביציאת ברירת המחדל (יציאה 1).
  4. כדי להתחבר ליציאה טורית אחרת, לוחצים על החץ למטה לצד הלחצן Connect to serial console ומשנים את מספר היציאה בהתאם.
  5. במכונות של Windows, פותחים את התפריט הנפתח שליד הכפתור ומתחברים ל-Port 2 כדי לגשת לקונסולה הטורית.

gcloud

כדי להתחבר לקונסולה הטורית האזורית של מכונה, משתמשים בפקודה gcloud compute connect-to-serial-port:

gcloud compute connect-to-serial-port INSTANCE_NAME \
    --port=PORT_NUMBER

מחליפים את מה שכתוב בשדות הבאים:

  • ‫INSTANCE_NAME: השם של המכונה שרוצים להתחבר לקונסולה הטורית שלה.
  • ‫PORT_NUMBER: מספר היציאה שאליה רוצים להתחבר. במכונות Linux, משתמשים ב-1, ובמכונות Windows משתמשים ב-2. למידע נוסף על מספרי יציאות, ראו הסבר על מספור של יציאות טוריות.

לקוחות SSH אחרים

אתם יכולים להתחבר לקונסולה הטורית של מכונה באמצעות לקוחות SSH אחרים של צד שלישי, כל עוד הלקוח מאפשר להתחבר ליציאת TCP‏ 9600. לפני שמתחברים, אפשר לאמת את החיבור באמצעות מפתחות המארח של הקונסולה הטורית.

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

  • כדי להתחבר למכונה של Linux:

    ssh -i PRIVATE_SSH_KEY_FILE -p 9600 PROJECT_ID.ZONE.INSTANCE_NAME.USERNAME.OPTIONS@REGION-ssh-serialport.googleapis.com
    
  • כדי להתחבר למכונה של Windows:

    ssh -i PRIVATE_SSH_KEY_FILE -p 9600 PROJECT_ID.ZONE.INSTANCE_NAME.USERNAME.OPTIONS.port=2@REGION-ssh-serialport.googleapis.com
    

מחליפים את מה שכתוב בשדות הבאים:

  • ‫PRIVATE_SSH_KEY_FILE: מפתח ה-SSH הפרטי של המכונה.
  • ‫PROJECT_ID: מזהה הפרויקט של המכונה הזו.
  • ‫ZONE: האזור של המכונה.
  • ‫REGION: האזור של המכונה.
  • ‫INSTANCE_NAME: השם של המכונה.
  • ‫USERNAME: שם המשתמש שבו אתם משתמשים כדי להתחבר למכונה. בדרך כלל זה שם המשתמש במחשב המקומי.
  • ‫OPTIONS: אפשרויות נוספות שאפשר לציין לחיבור הזה. לדוגמה, אפשר לציין יציאה טורית מסוימת ואפשרות מתקדמת כלשהי. מספר היציאה יכול להיות בין 1 ל-4, כולל. למידע נוסף על מספרי יציאות, ראו הסבר על מספור של יציאות טוריות. אם לא מציינים מספר, מתחברים ליציאה טורית 1.

אם אתם לא מצליחים להתחבר באמצעות לקוח SSH של צד שלישי, אתם יכולים להריץ את הפקודה gcloud compute connect-to-serial-port עם האפשרות --dry-run בשורת הפקודה כדי לראות את פקודת ה-SSH שהייתה אמורה לפעול. אחר כך תוכלו להשוות בין האפשרויות לבין הפקודה שבה אתם משתמשים.

אימות חיבורים של לקוחות SSH של צד שלישי

כשמשתמשים בלקוח SSH של צד שלישי שהוא לא Google Cloud CLI, מומלץ לוודא שאתם מוגנים מפני התחזות או התקפות אדם בתווך, על ידי בדיקת מפתח המארח של SSH ליציאה טורית של Google. כדי להגדיר את המערכת לבדיקת מפתח המארח של SSH, מבצעים את השלבים הבאים:

  1. מורידים את מפתח המארח של SSH לקונסולה הטורית שבה משתמשים:

  2. פותחים את קובץ המארחים המוכרים, שבדרך כלל נמצא ב-~/.ssh/known_hosts.

  3. מוסיפים את התוכן של מפתח המארח של ה-SSH, עם שם המארח של השרת לפני המפתח. לדוגמה, אם מפתח השרת us-central1 מכיל את השורה ssh-rsa AAAAB3NzaC1yc..., אז ~/.ssh/known_hosts צריך להכיל שורה כזו:

    [us-central1-ssh-serialport.googleapis.com]:9600 ssh-rsa AAAAB3NzaC1yc...

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

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

התנתקות מהקונסולה הטורית

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

המסוף

במסוף Google Cloud , מתנתקים מהקונסולה הטורית:

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

gcloud

כדי להתנתק מהקונסולה הטורית ב-Google Cloud CLI:

  1. לוחצים על המקש ENTER.
  2. מקלידים ~. (טילדה ואחריה נקודה).

לקוחות SSH אחרים

בלקוחות SSH אחרים, מתנתקים מהקונסולה הטורית באופן הבא:

  1. לוחצים על המקש ENTER.
  2. מקלידים ~. (טילדה ואחריה נקודה).

ב-Google Cloud CLI או באמצעות SSH, אפשר לגלות פקודות אחרות על ידי הקלדת ~?. אפשר גם לבדוק את דף ה-man של SSH באמצעות הפקודה הבאה:

man ssh

אל תנסו לנתק את החשבון באחת מהדרכים הבאות:

  • שילוב המקשים CTRL+ALT+DELETE או שילובים דומים אחרים. זה לא יעבוד כי הקונסולה הטורית לא מזהה שילובי מקשים של מקלדת PC.

  • הפקודה exit או logout לא פועלת כי למערכת האורחת אין מידע על חיבורים לרשת או למודם. הפקודה הזו גורמת למסוף להיסגר ולהיפתח מחדש, ואתם נשארים מחוברים לסשן. כדי להפעיל את הפקודות exit ו-logout בסשן, צריך להגדיר את האפשרות on-dtr-low.

התחברות לקונסולה טורית באמצעות בקשת כניסה

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

כברירת מחדל, קובצי האימג' של מערכת Linux ש-Google מספקת לא מוגדרים לאפשר התחברות באמצעות סיסמה למשתמשים מקומיים. עם זאת, קובצי האימג' של Windows ש-Google מספקת מוגדרים כך שהם מאפשרים למשתמשים מקומיים להתחבר באמצעות סיסמה.

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

אם ה-VM לא מצליח לבצע אתחול כדי להריץ סקריפט לטעינה בזמן ההפעלה (לדוגמה, בגלל תוכנת אתחול GRUB פגומה), או אם אין לכם סיסמה מקומית וחסרים sshd או google-guest-agent, אתם לא יכולים להשתמש בסקריפט לטעינה בזמן ההפעלה כדי להתחבר. במקום זאת, צריך לשחזר את ה-VM באחת מהשיטות הבאות:

  • משתמשים בכלי GCE Rescue בקוד פתוח כדי לאבחן שגיאות הפעלה של קונסולה טורית (gce-rescue diagnose), לתקן באופן אוטומטי בעיות הפעלה נפוצות (gce-rescue repair) או להפעיל את המכונה במצב שחזור מיוחד ל-Pixel‏ (Rescue mode) (gce-rescue rescue).
  • מחברים את דיסק האתחול למכונה וירטואלית זמנית כדי לתקן אותו אופליין. הוראות מפורטות מופיעות במאמר חילוץ מכונה וירטואלית שאין אליה גישה.

הגדרת סיסמה מקומית באמצעות סקריפט לטעינה בזמן ההפעלה

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

כדי להגדיר סיסמה מקומית במכונה קיימת, בוחרים באחת מהאפשרויות הבאות:

Linux

  1. נכנסים לדף VM instances במסוף Google Cloud .

    כניסה לדף VM instances

  2. בעמודה Name, לוחצים על השם של המכונה שרוצים להוסיף לה סיסמה מקומית.

    דף הפרטים של המכונה ייפתח.

  3. לוחצים על עריכה.

    ייפתח הדף לעריכת הפרטים של המכונה.

  4. בקטע Metadata > Automation, מבצעים את הפעולות הבאות:

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

    2. מוסיפים את הסקריפט הבא לטעינה בזמן ההפעלה:

      #!/bin/bash
      useradd USERNAME
      echo 'USERNAME:PASSWORD' | chpasswd
      usermod -aG google-sudoers USERNAME
      

      מחליפים את מה שכתוב בשדות הבאים:

      • ‫USERNAME: שם המשתמש שרוצים להוסיף.

      • ‫PASSWORD: הסיסמה של שם המשתמש. בחלק ממערכות ההפעלה יש דרישות מינימליות לאורך ולמורכבות של הסיסמה, לכן צריך לציין סיסמה באופן הבא:

        • הסיסמה צריכה להכיל לפחות 12 תווים.

        • השתמשו בשילוב של אותיות רישיות וקטנות, מספרים וסמלים.

  5. לוחצים על Save.

    דף הפרטים של המכונה ייפתח.

  6. לוחצים על איפוס.

  7. מתחברים לקונסולה הטורית.

  8. כשמופיעה בקשה, מזינים את פרטי ההתחברות.

Windows

  1. נכנסים לדף VM instances במסוף Google Cloud .

    כניסה לדף VM instances

  2. בעמודה Name, לוחצים על השם של המכונה שרוצים להוסיף לה סיסמה מקומית.

    דף הפרטים של המכונה ייפתח.

  3. לוחצים על עריכה.

    ייפתח הדף לעריכת הפרטים של המכונה.

  4. בקטע Metadata:

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

    2. לוחצים על Add item.

    3. בשדה Key, מזינים windows-startup-script-cmd.

    4. בשדה ערך, מזינים את הסקריפט הבא:

      net user USERNAME PASSWORD /ADD /Y
      net localgroup administrators USERNAME /ADD
      

      מחליפים את מה שכתוב בשדות הבאים:

      • ‫USERNAME: שם המשתמש שרוצים להוסיף.

      • ‫PASSWORD: הסיסמה של שם המשתמש. בחלק ממערכות ההפעלה יש דרישות מינימליות לאורך ולמורכבות של הסיסמה, לכן צריך לציין סיסמה באופן הבא:

        • הסיסמה צריכה להכיל לפחות 12 תווים.

        • השתמשו בשילוב של אותיות רישיות וקטנות, מספרים וסמלים.

  5. לוחצים על Save.

    דף הפרטים של המכונה ייפתח.

  6. לוחצים על איפוס.

  7. מתחברים לקונסולה הטורית.

  8. כשמופיעה בקשה, מזינים את פרטי ההתחברות.

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

הגדרת סיסמה מקומית באמצעות passwd במכונה

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

  1. מתחברים למכונה. מחליפים את INSTANCE_NAME בשם המכונה.

    gcloud compute ssh INSTANCE_NAME
  2. במכונה, יוצרים סיסמה מקומית באמצעות הפקודה הבאה. הפעולה הזו מגדירה סיסמה למשתמש שאתם מחוברים אליו.

    sudo passwd $(whoami)
  3. פועלים לפי ההנחיות כדי ליצור סיסמה.

  4. לאחר מכן, צאו מהמכונה והתחברו לקונסולה הטורית.

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

הגדרת התחברות ביציאות טוריות אחרות

הנחיות ההתחברות מופעלות ביציאה 1 כברירת מחדל בכל קובצי האימג' הציבוריים של Linux שמשתמשים בניהול השירות של systemd. בתמונות של Windows, הנחיות ההתחברות מופעלות ביציאה 2 כברירת מחדל ומנוהלות על ידי מנהל ההתקנים. עם זאת, לעיתים קרובות יציאה 1 יכולה להיות עמוסה בנתוני רישום ביומן ובמידע אחר שמודפס ליציאה. לחלופין, אפשר להפעיל בקשת התחברות ביציאה אחרת, כמו יציאה 2 (ttyS1), על ידי הפעלת הפקודה הבאה במכונה:

Linux

במערכות הפעלה של Linux שמשתמשות ב-systemd:

  • הפעלה זמנית של השירות עד להפעלה הבאה מחדש:

    sudo systemctl start serial-getty@ttyS1.service
  • מפעילים את השירות באופן קבוע, החל מההפעלה הבאה מחדש:

    sudo systemctl enable serial-getty@ttyS1.service

Windows

במערכות הפעלה של Windows:

  • פותחים את שורת הפקודה כאדמין.

  • משנים את יציאת ה-EMS מ-COM2 ל-COM1:

    bcdedit /emssettings EMSPORT:1 EMSBAUDRATE:9600
  • הפעלה מחדש של המכונה

הסבר על מספור היציאות הטוריות

לכל מכונה וירטואלית יש ארבע יציאות טוריות. כדי לשמור על עקביות עם ה-API של getSerialPortOutput, כל יציאה ממוספרת מ-1 עד 4. ב-Linux ובמערכות דומות אחרות, היציאות הטוריות ממוספרות מ-0 עד 3. לדוגמה, בתמונות רבות של מערכות הפעלה, המכשירים התואמים הם /dev/ttyS0 עד /dev/ttyS3. ב-Windows, היציאות הטוריות נקראות COM1 עד COM4. כדי להתחבר למה שמוגדר ב-Windows בתור COM3 וב-Linux בתור ttyS2, צריך לציין את יציאה 3. אתם יכולים להיעזר בטבלה הבאה כדי להבין לאיזו יציאה אתם רוצים להתחבר.

יציאות טוריות של מכונות וירטואליות יציאות טוריות רגילות של Linux יציאות COM של Windows
1 /dev/ttyS0 COM1
2 /dev/ttyS1 COM2
3 /dev/ttyS2 COM3
4 /dev/ttyS3 COM4

שימו לב: הרבה קובצי אימג' של Linux משתמשים ביציאה 1 (/dev/ttyS0) לרישום הודעות מהליבה (kernel) ומתוכנות המערכת.

שליחת אות הפסקה (break) טורי

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

כדי לשלוח פקודת Magic SysRq באמצעות הדמיה של הפסקת חיבור טורי:

  1. לוחצים על המקש ENTER.
  2. מקלידים ~B (טילדה, ואחריה B באותיות רישיות).
  3. מקלידים את הפקודה Magic SysRq.

צפייה ביומני הביקורת של הקונסולה הטורית

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

  1. נכנסים לדף Logs Explorer במסוף Google Cloud .

    כניסה לדף Logs Explorer

  2. מרחיבים את התפריט הנפתח ובוחרים באפשרות GCE VM Instance.
  3. בשורת החיפוש, מקלידים ssh-serialport.googleapis.com ולוחצים על Enter.
  4. מופיעה רשימה של יומני ביקורת. היומנים מתארים חיבורים וניתוקים מקונסולה טורית. מרחיבים את הרשומות כדי לקבל מידע נוסף.

בכל אחד מיומני הביקורת, אתם יכולים:

  1. מרחיבים את הנכס protoPayload.
  2. חפשו את methodName כדי לראות את הפעילות שהיומן הזה חל עליה (בקשת חיבור או בקשת ניתוק). לדוגמה, אם היומן הזה עוקב אחרי ניתוק מהקונסולה הטורית, שם השיטה יהיה "google.ssh-serialport.v1.disconnect". באופן דומה, ביומן החיבורים יופיע "google.ssh-serialport.v1.connect". רשומה ביומן הביקורת נרשמת בתחילת כל סשן בקונסולה הטורית ובסופו.

לסוגים שונים של יומנים יש מאפיינים שונים של יומני ביקורת. לדוגמה, ליומני ביקורת שקשורים לחיבורים יש מאפיינים שספציפיים ליומני חיבורים, וליומני ביקורת של ניתוקים יש קבוצת מאפיינים משלהם. יש מאפיינים מסוימים של יומני ביקורת שמשותפים לשני סוגי היומנים.

כל היומנים של הקונסולה הטורית

בטבלה הבאה מפורטים המאפיינים של יומן הביקורת והערכים שלהם בכל היומנים של הקונסולה הטורית:

מאפיין (property) ערך
requestMetadata.callerIp כתובת ה-IP ומספר היציאה שמהם החיבור הגיע.
serviceName ssh-serialport.googleapis.com
resourceName מחרוזת שמכילה את מזהה הפרויקט, האזור, שם המכונה ומספר היציאה הטורית, כדי לציין לאיזו קונסולה טורית זה קשור. לדוגמה, projects/myproject/zones/us-east1-a/instances/example-instance/SerialPort/2 הוא מספר יציאה 2, שנקרא גם COM2 או ‎/dev/ttyS1, למכונה example-instance.
resource.labels מאפיינים שמזהים את מזהה המכונה, האזור ומזהה הפרויקט.
timestamp חותמת זמן שמציינת מתי הסשן התחיל או הסתיים.
severity NOTICE
operation.id מחרוזת מזהה שמזהה באופן ייחודי את הסשן. אפשר להשתמש בה כדי לשייך רשומת ניתוק לרשומת החיבור המתאימה.
operation.producer ssh-serialport.googleapis.com

יומני חיבורים

בטבלה הבאה מפורטים המאפיינים של יומן הביקורת והערכים הספציפיים שלהם ליומני החיבורים:

מאפיין (property) ערך
methodName google.ssh-serialport.v1.connect
status.message Connection succeeded.
request.serialConsoleOptions כל אפשרות שצוינה בבקשה, כולל מספר היציאה הטורית.
request.@type type.googleapis.com/google.compute.SerialConsoleSessionBegin
request.username שם המשתמש שצוין בבקשה הזו. הוא משמש לבחירת המפתח הציבורי התואם.
operation.first TRUE
status.code בבקשות חיבור שהצליחו, הערך google.rpc.Code.OK בשדה status.code מציין שהפעולה הושלמה בהצלחה בלי שגיאות. ערך ה-enum של המאפיין הזה הוא 0, ולכן המאפיין status.code לא מוצג. עם זאת, כל קוד שבודק ערך status.code של google.rpc.Code.OK פועל כצפוי.

יומני ניתוקים

בטבלה הבאה מפורטים מאפייני יומן הביקורת והערכים שלהם, שספציפיים ליומני ניתוק:

מאפיין (property) ערך
methodName google.ssh-serialport.v1.disconnect
response.duration משך הזמן, בשניות, שהסשן נמשך.
response.@type type.googleapis.com/google.compute.SerialConsoleSessionEnd
operation.last TRUE

יומני חיבורים שנכשלו

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

מאפיין (property) ערך
severity ERROR
status.code

קוד השגיאה הקנוני של Google API שמתאר הכי טוב את השגיאה. אלה קודי השגיאה האפשריים:

status.message ההודעה הקריאה לאנשים של הרשומה הזו.

השבתת הגישה האינטראקטיבית לקונסולה הטורית

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

השבתת קונסולה טורית אינטראקטיבית במכונה או בפרויקט מסוימים

בעלי פרויקטים ומשתמשים עם הרשאת עריכה, וגם משתמשים שקיבלו את התפקיד compute.instanceAdmin.v1, יכולים להשבית את הגישה לקונסולה הטורית על ידי שינוי המטא-נתונים במכונה או בפרויקט הספציפיים. בדומה להפעלת הגישה לקונסולה הטורית, מגדירים את המטא-נתונים של serial-port-enable לערך FALSE:

serial-port-enable=FALSE

לדוגמה, באמצעות Google Cloud CLI, אפשר להחיל את המטא-נתונים האלה על מכונה ספציפית באופן הבא:

gcloud compute instances add-metadata instance-name \
    --metadata=serial-port-enable=FALSE

כדי להחיל את המטא-נתונים על הפרויקט:

gcloud compute project-info add-metadata \
    --metadata=serial-port-enable=FALSE

השבתת הגישה האינטראקטיבית לקונסולה הטורית באמצעות מדיניות הארגון

אם קיבלתם את התפקיד orgpolicy.policyAdmin בארגון, אתם יכולים להגדיר כלל מדיניות של הארגון שמונע גישה אינטראקטיבית לקונסולה הטורית, גם אם הגישה האינטראקטיבית לקונסולה הטורית מופעלת בשרת המטא-נתונים. אחרי שמגדירים את מדיניות הארגון, היא מבטלת את מפתח המטא-נתונים serial-port-enable, ואף משתמש בארגון או בפרויקט לא יכול להפעיל גישה אינטראקטיבית לקונסולה הטורית. כברירת מחדל, האילוץ הזה מוגדר לערך FALSE.

האילוץ להשבתת הגישה האינטראקטיבית לקונסולה הטורית הוא:

compute.disableSerialPortAccess

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

gcloud

כדי להגדיר את המדיניות באמצעות Google Cloud CLI, מריצים את הפקודה resource-manager enable-enforce. מחליפים את organization-id במזהה הארגון. לדוגמה, 1759840282.

gcloud resource-manager org-policies enable-enforce \
    --organization organization-id compute.disableSerialPortAccess

REST

כדי להגדיר מדיניות ב-API, שולחים בקשת POST לכתובת ה-URL הבאה. מחליפים את organization-name בשם הארגון. לדוגמה, organizations/1759840282.

 POST https://cloudresourcemanager.googleapis.com/v1/organization-name:setOrgPolicy

גוף הבקשה צריך להכיל אובייקט policy עם המגבלה הבאה:

"constraint": "constraints/compute.disableSerialPortAccess"

לדוגמה:

 {
   "policy":
   {
     "booleanPolicy":
     {
       "enforced": TRUE
     },
     "constraint": "constraints/compute.disableSerialPortAccess"
   }
 }
 

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

כדי להשבית את המדיניות באופן זמני, משתמשים בפקודה disable-enforce:

gcloud resource-manager org-policies disable-enforce \
    --organization organization-id compute.disableSerialPortAccess

לחלופין, אפשר לשלוח בקשת API שבה גוף הבקשה מגדיר את הפרמטר enforced לערך FALSE:

{
  "policy":
  {
    "booleanPolicy":
    {
      "enforced": FALSE
    },
    "constraint": "constraints/compute.disableSerialPortAccess"
  }
}

הגדרת מדיניות הארגון ברמת הפרויקט

אפשר להגדיר את אותה מדיניות ארגונית לכל פרויקט בנפרד. ההגדרה הזו מבטלת את ההגדרה ברמת הארגון.

gcloud

כדי להשבית את אכיפת המדיניות בפרויקט ספציפי. מחליפים את project-id במזהה הפרויקט.

gcloud resource-manager org-policies disable-enforce \
    --project project-id compute.disableSerialPortAccess

כדי להפעיל את אכיפת המדיניות הזו, אפשר להשתמש בפקודה enable-enforce עם אותם ערכים.

REST

ב-API, שולחים בקשת POST לכתובת ה-URL הבאה כדי לאפשר גישה אינטראקטיבית לקונסולה הטורית בפרויקט, ומחליפים את project-id במזהה הפרויקט:

POST https://cloudresourcemanager.googleapis.com/v1/projects/project-id:setOrgPolicy

גוף הבקשה צריך להכיל אובייקט policy עם המגבלה הבאה:

"constraint": "constraints/compute.disableSerialPortAccess"

לדוגמה:

{
  "policy":
  {
    "booleanPolicy":
    {
      "enforced": FALSE
    },
    "constraint": "constraints/compute.disableSerialPortAccess"
  }
}

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

אם נתקלתם בשגיאה "SSH authentication failed" או שהופניתם לדף שגיאה כללי של SSH כשניסיתם להשתמש בכפתור Connect to serial console, בדקו את הדברים הבאים:

  • ‫VPC Service Controls: אם הפרויקט מוגן באמצעות VPC Service Controls, אי אפשר להשתמש בקונסולה הטורית מבוססת-הדפדפן. במקום זאת, אתם צריכים להשתמש בפקודה gcloud compute connect-to-serial-port.
  • הרשאות IAM: ודאו שיש לכם את התפקיד iam.serviceAccountUser בחשבון השירות של המכונה. שער הקונסולה הטורית דורש את התפקיד הזה כדי לאמת את החיבור.
  • ‫OS Login: אם המכונה משתמשת ב-OS Login, ודאו ששלחתם את מפתחות ה-SSH לפרופיל OS Login או למטא-נתונים של הפרויקט.
  • גישה פרטית ל-Google: אם אתם משתמשים בגישה פרטית ל-Google עם תו כללי לחיפוש ב-DNS בשביל *.googleapis.com, יכול להיות שנקודת הקצה של הקונסולה הטורית (REGION-ssh-serialport.googleapis.com) לא תתפענח כמו שצריך. חשוב לוודא שהתנועה הזו מנותבת דרך האינטרנט הציבורי.

טיפים וטריקים

  • אם אתם לא מצליחים להתחבר באמצעות לקוח SSH רגיל, אבל gcloud compute connect-to-serial-port מתחבר בהצלחה, יכול להיות שכדאי להריץ את gcloud compute connect-to-serial-port עם האפשרות --dry-run בשורת הפקודה כדי לראות את פקודת ה-SSH שהייתה מופעלת בשמכם, ולהשוות את האפשרויות לפקודה שבה אתם משתמשים.

  • אם אתם משתמשים במכונה של Windows שמופעל בה OS Login ונתקלים בשגיאה UNAUTHENTICATED, ודאו שמפתחות ה-SSH הציבוריים פורסמו במטא-נתונים של הפרויקט או המכונה. מידע נוסף זמין במאמר ניהול מפתחות SSH במטא-נתונים.

  • הגדרת קצב העברת הנתונים, שנקרא גם קצב באוד, מאפשרת לכם להגדיר כל קצב העברת נתונים שתרצו, כמו stty 9600, אבל התכונה בדרך כלל מאלצת את הקצב בפועל להיות 115,200bps (בערך 11.5kB לשנייה). הסיבה לכך היא שהרבה תמונות ציבוריות מוגדרות כברירת מחדל לקצבי העברת נתונים איטיים, כמו 9,600 בקונסולה הטורית, וההפעלה שלהן תהיה איטית.

  • בחלק מקובצי האימג' של מערכת ההפעלה יש ברירות מחדל לא נוחות ביציאה הטורית. לדוגמה, ב-CentOS 7, ברירת המחדל של stty icrnl למקש Enter במסוף היא לשלוח CR, שנקרא גם ^M. יכול להיות שמעטפת ה-bash תסתיר את זה עד שתנסו להגדיר סיסמה, ואז אולי תתהו למה נראה שהיא תקועה בהנחיה password:.

  • בחלק מהתמונות הציבוריות יש מקשי בקרת משימות שמושבתים כברירת מחדל אם מחברים מעטפת ליציאה בדרכים מסוימות. דוגמאות למפתחות כאלה: ^Z ו-^C. יכול להיות שהפקודה setsid תפתור את הבעיה. אחרת, אם מופיעה ההודעה job control is disabled in this shell, היזהרו לא להריץ פקודות שצריך להפסיק.

  • כדאי להגדיר למערכת את גודל החלון שבו אתם משתמשים, כדי ש-bash והעורכים יוכלו לנהל אותו כמו שצריך. אחרת, יכול להיות שתיתקלו בהתנהגות תצוגה מוזרה כי bash או כלי עריכה מנסים לשנות את התצוגה על סמך הנחות שגויות לגבי מספר השורות והעמודות הזמינות. כדי לראות מהי ההגדרה, משתמשים בפקודה stty rows Y cols X ובדגל stty -a. לדוגמה: stty rows 60 cols 120 (אם החלון הוא בגודל 120 תווים על 60 שורות).

  • לדוגמה, אם אתם מתחברים באמצעות SSH ממכונה א' למכונה ב', ואז למכונה ג', ויוצרים סשן SSH בתצוגת עץ, ואתם רוצים להשתמש בפקודות טילדה (~) כדי להתנתק או לשלוח אות הפסקה טורי, אתם צריכים להוסיף מספיק תווי טילדה לפקודה כדי להגיע ללקוח ה-SSH הנכון. פקודה אחרי תו טילדה אחד מפורשת על ידי לקוח ה-SSH במכונה א'. פקודה אחרי שני תווי טילדה רצופים (Enter~~) מפורשת על ידי הלקוח במכונה ב', וכן הלאה. צריך ללחוץ על Enter רק פעם אחת, כי הפקודה מועברת עד ליעד ה-SSH הפנימי ביותר. זה נכון לכל שימוש בלקוחות SSH שמספקים את תכונת תו הבריחה (escape) של הטילדה.

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

אפשרויות מתקדמות

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

שליטה במספר החיבורים המקסימלי

אפשר להגדיר את המאפיין max-connections כדי לקבוע כמה חיבורים בו-זמניים אפשר לבצע ליציאה הטורית הזו בכל פעם. מספר החיבורים המקסימלי וברירת המחדל הוא 5. לדוגמה:

gcloud compute connect-to-serial-port instance-name \
    --port port-number \
    --extra-args max-connections=3
ssh -i private-ssh-key-file -p 9600 project-id.zone.instance-name.username.max-connections=3@ssh-serialport.googleapis.com

הגדרת אפשרויות להפעלה מחדש

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

  • ‫replay-lines=N: מגדירים את N למספר השורות שרוצים להפעיל מחדש. לדוגמה, אם הערך של N הוא 50, ייכללו 50 השורות האחרונות של פלט המסוף.
  • ‫replay-bytes=N: הפעלה מחדש של N הבייטים האחרונים. אפשר גם להגדיר את N לערך new, שמפעיל מחדש את כל הפלט שעדיין לא נשלח לאף לקוח.
  • ‫replay-from=N: הפעלה מחדש של הפלט החל מאינדקס בייטים מוחלט שאתם מספקים. כדי לקבל את אינדקס הבייטים הנוכחי של הפלט של הקונסולה הטורית, שולחים בקשת getSerialPortOutput. אם מגדירים את replay-from, המערכת מתעלמת מכל שאר האפשרויות להפעלה מחדש.

ב-Google Cloud CLI, מוסיפים את הפרטים הבאים לפקודה connect-to-serial-port, כאשר N הוא מספר השורות שצוין (או מספר הבייטים או אינדקס הבייטים המוחלט, בהתאם לאפשרות ההפעלה מחדש שבחרתם):

--extra-args replay-lines=N

אם אתם משתמשים בלקוח SSH של צד שלישי, ציינו את האפשרות הזו בפקודת ה-SSH:

ssh -i private-ssh-key-file -p 9600 myproject.us-central1-f.example-instance.jane.port=3.replay-lines=N@ssh-serialport.googleapis.com

אפשר גם להשתמש בשילוב של האפשרויות האלה. לדוגמה:

replay-lines=N וגם replay-bytes=new
הפעלה מחדש של מספר השורות שצוין או של כל הפלט שלא נשלח בעבר לאף לקוח, לפי הגדול מביניהם. הלקוח הראשון שמתחבר עם שילוב הדגלים הזה רואה את כל הפלט שנשלח ליציאה הטורית, ולקוחות שמתחברים לאחר מכן רואים רק את N השורות האחרונות. דוגמאות:
gcloud compute connect-to-serial-port instance-name--port port-number --extra-args replay-lines=N,replay-bytes=new
ssh -i private-ssh-key-file -p 9600 project-id.zone.instance-name.username.replay-lines=N.replay-bytes=new@ssh-serialport.googleapis.com
replay-lines=N וגם replay-bytes=M
הפעלה מחדש של שורות עד למספר השורות או הבייטים שמתוארים בדגלים האלה, או פחות, לפי הנמוך מביניהם. האפשרות הזו לא מפעילה מחדש יותר מ-N או M בייטים.
gcloud compute connect-to-serial-port instance-name--port port-number --extra-args replay-lines=N,replay-bytes=M
ssh -i private-ssh-key-file -p 9600 project-id.zone.instance-name.username.replay-lines=N.replay-bytes=M@ssh-serialport.googleapis.com

טיפול בפלט שנמחק

הפלט האחרון של 1MiB לכל יציאה טורית תמיד זמין, ובדרך כלל לקוח ה-SSH לא אמור לפספס פלט מהיציאה הטורית. אם מסיבה כלשהי לקוח ה-SSH מפסיק לקבל פלט למשך פרק זמן מסוים אבל לא מתנתק, ונוצרים יותר מ-‎1MiB של נתונים חדשים, יכול להיות שלקוח ה-SSH יפספס חלק מהפלט. אם לקוח ה-SSH לא מקבל נתונים מספיק מהר כדי לעמוד בקצב הפלט ביציאת הקונסולה הטורית, אפשר להגדיר את המאפיין on-dropped-output כדי לקבוע את אופן הפעולה של הקונסולה.

אפשר להגדיר את האפשרויות הרלוונטיות הבאות במאפיין הזה:

  • ‫insert-stderr-note: הוספת הערה ב-stderr של לקוח ה-SSH שמציינת שהפלט נמחק. זו האפשרות שמוגדרת כברירת המחדל.
  • ‫ignore: הפלט נמחק בלי הודעה ולא קורה כלום.
  • ‫disconnect: הפסקת החיבור.

לדוגמה:

gcloud compute connect-to-serial-port instance-name \
    --port port-number \
    --extra-args on-dropped-output=ignore
ssh -i private-ssh-key-file -p 9600 project-id.zone.instance-name.username.on-dropped-output=ignore@ssh-serialport.googleapis.com

הפעלת הניתוק באמצעות פקודות יציאה או התנתקות

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

ב-Google Cloud CLI, מוסיפים את הדגל הבא לפקודה connect-to-serial-port:

--extra-args on-dtr-low=disconnect

אם אתם משתמשים בלקוח SSH של צד שלישי, ציינו את האפשרות הזו בפקודת ה-SSH:

ssh -i private-ssh-key-file -p 9600 myproject.us-central1-f.example-instance.jane.port=3.on-dtr-low=disconnect@ssh-serialport.googleapis.com

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

הגדרת ברירת המחדל של האפשרות on-dtr-low היא none. אם משתמשים בהגדרת ברירת המחדל none, אפשר להפעיל מחדש את המכונה בלי להתנתק מהקונסולה הטורית, אבל הקונסולה לא מתנתקת באמצעים רגילים כמו הפקודות exit או logout, או שילובי מקשים רגילים כמו Ctrl+D.

המאמרים הבאים