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

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

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

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

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

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

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

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

    המסוף

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

    gcloud

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

      gcloud init

      אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

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

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

      התקינו את ה-CLI של Google Cloud.

      אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

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

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

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

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

הפעלת גישה אינטראקטיבית למסוף הטורי בפרויקט מאפשרת גישה לכל מכונות ה-Compute שמהוות חלק מהפרויקט הזה.

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

המסוף

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

    מעבר אל Metadata

  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, שולחים בקשה לשיטה 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. בקטע גישה מרחוק, מעבירים את מצב הסימון של התיבה הפעלת חיבור ליציאות טוריות.
  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

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

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

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

console=ttyS0,115200

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

serial --speed=115200

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

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

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

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

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

המסוף

כדי להתחבר למסוף הטורי האזורי של מופע Compute:

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

    כניסה לדף VM instances

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

gcloud

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

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

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

  • INSTANCE_NAME: השם של מופע Compute שאליו רוצים להתחבר דרך המסוף הטורי.
  • 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 פרטי למופע Compute.
  • PROJECT_ID: מזהה הפרויקט של מופע Compute הזה.
  • ZONE: האזור של מכונת ה-Compute.
  • REGION: האזור של מכונת החישוב.
  • INSTANCE_NAME: השם של מכונת ה-Compute.
  • USERNAME: שם המשתמש שבו אתם משתמשים כדי להתחבר למופע. בדרך כלל זה שם המשתמש במכונה המקומית.
  • OPTIONS: אפשרויות נוספות שאפשר לציין לחיבור הזה. לדוגמה, אפשר לציין יציאה טורית מסוימת ולציין אפשרות מתקדמת כלשהי. מספר היציאה יכול להיות בין 1 ל-4, כולל. למידע נוסף על ניוד מספרים, ראו הסבר על מספור יציאות טוריות. אם לא מציינים יציאה טורית, מתחברים ליציאה טורית 1.

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

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

כשמשתמשים בלקוח SSH של צד שלישי שאינו Google Cloud CLI, מומלץ לוודא שאתם מוגנים מפני התחזות או מתקפות מסוג 'אדם באמצע' על ידי בדיקת מפתח המארח של Google ב-SSH של היציאה הטורית. כדי להגדיר את המערכת כך שתבדוק את מפתח המארח של 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 תשנה מדי פעם את מפתח המארח של SSH של יציאה טורית של Google. אם הלקוח לא מצליח לאמת את מפתח השרת, צריך להפסיק מיד את ניסיון החיבור ולבצע את השלבים הקודמים כדי להוריד מפתח מארח SSH חדש של יציאה טורית של Google.

אם אחרי עדכון מפתח המארח אתם ממשיכים לקבל שגיאה באימות המארח מהלקוח, תפסיקו את הניסיונות להתחבר ליציאה הטורית ותפנו לתמיכה של 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 או שילובים דומים אחרים. הפעולה הזו לא עובדת כי המסוף הטורי לא מזהה שילובים של מקלדת למחשב.

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

התחברות למסוף טור עם הנחיה להתחברות

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

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

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

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

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

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

Linux

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

    כניסה לדף VM instances

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

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

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

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

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

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

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

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

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

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

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

        • צריך להשתמש ב-12 תווים לפחות.

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

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

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

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

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

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

Windows

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

    כניסה לדף VM instances

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

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

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

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

  4. בקטע Metadata:

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

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

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

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

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

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

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

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

        • צריך להשתמש ב-12 תווים לפחות.

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

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

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

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

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

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

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

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

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

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

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

    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
  • הפעלה מחדש של מכונת ה-Compute

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

לכל מופע של מכונה וירטואלית יש ארבע יציאות טוריות. כדי לשמור על עקביות עם ה-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) לרישום הודעות מתוכניות הליבה והמערכת.

שליחת הפסקה בסדרה

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

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

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

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

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

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

    כניסה לדף Logs Explorer

  2. מרחיבים את התפריט הנפתח ובוחרים באפשרות GCE VM Instance (מופע של מכונה וירטואלית ב-GCE).
  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 אם הבקשות לחיבור מצליחות, הערך status.code של google.rpc.Code.OK מציין שהפעולה הושלמה בהצלחה ללא שגיאות. ערך ה-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 בפרויקט אחד או יותר ששייכים לארגון.

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

בעלי פרויקטים ועורכים, וגם משתמשים שקיבלו את התפקיד 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 נכשל' או שאתם מועברים לדף שגיאה כללי של SSH כשאתם משתמשים בלחצן התחברות למסוף הטורי, כדאי לבדוק את הדברים הבאים:

  • VPC Service Controls: אם הפרויקט שלכם מוגן על ידי VPC Service Controls, אתם לא יכולים להשתמש במסוף הטורי שמבוסס על דפדפן. במקום זאת, משתמשים בפקודה gcloud compute connect-to-serial-port.
  • הרשאות IAM: מוודאים שיש לכם את התפקיד iam.serviceAccountUser בחשבון השירות של המופע. כדי לאמת את החיבור שלכם, צריך להקצות את התפקיד הזה לשער של מסוף סדרתי.
  • OS Login: אם המופע משתמש ב-OS Login, מוודאים שדחפתם את מפתחות ה-SSH לפרופיל שלכם ב-OS Login או למטא-נתונים של הפרויקט.
  • גישה פרטית ל-Google: אם אתם משתמשים בגישה פרטית ל-Google עם תבנית wildcard של 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,200 bps (בערך 11.5kB/sec). הסיבה לכך היא שקצב העברת הנתונים של הרבה תמונות ציבוריות מוגדר כברירת מחדל לערכים נמוכים, כמו 9,600 במסוף הטורי, ולכן הן נטענות לאט.

  • חלק מתמונות מערכת ההפעלה כוללות הגדרות ברירת מחדל לא נוחות ביציאה הטורית. לדוגמה, ב-CentOS 7, ברירת המחדל של המקש Enter במסוף היא לשלוח stty icrnl, שנקרא גם 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 שמספקים את תכונת הבריחה עם סימן הטילדה.

    אם אתם לא זוכרים כמה תווים של טילדה צריך להזין, מקישים על מקש 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 השורות האחרונות של הנתונים, בלי קשר לשאלה אם 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
Replay lines up to, but not more than, the number of lines or bytes described by these flags, whichever is less. האפשרות הזו לא תפעיל מחדש יותר מ-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 כשמתחברים למסוף הטורי.

ב-CLI של Google Cloud, מוסיפים את הדגל הבא לפקודה 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.

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