בדף הזה מוסבר איך להפעיל גישה אינטראקטיבית לקונסולה הטורית של מכונה כדי לנפות באגים בבעיות של הפעלה ורשת, לפתור בעיות במכונות שלא פועלות, לבצע פעולות ב-GRand Unified Bootloader (GRUB) ולבצע משימות אחרות לפתרון בעיות.
למכונה של Compute Engine יש ארבע יציאות טוריות וירטואליות. האינטראקציה עם יציאה טורית דומה לשימוש בחלון הטרמינל, בכך שהקלט והפלט הם במצב טקסט בלבד ואין ממשק גרפי או תמיכה בעכבר. מערכת ההפעלה של המכונה, ה-BIOS וישויות אחרות ברמת המערכת כותבים לעיתים קרובות פלט ליציאות הטוריות, ויכולים לקבל קלט כמו פקודות או תשובות להנחיות. בדרך כלל, הישויות האלה ברמת המערכת משתמשות ביציאה הטורית הראשונה (יציאה 1), ולעיתים קרובות היציאה הטורית הראשונה נקראת "הקונסולה הטורית".
אם אתם רק צריכים לראות את הפלט של היציאה הטורית בלי לשלוח פקודות לקונסולה הטורית, אתם יכולים להפעיל את ה-method getSerialPortOutput או להשתמש ב-Cloud Logging כדי לקרוא את המידע שהמכונה כתבה ליציאה הטורית שלה. מידע נוסף זמין במאמר הצגת יומנים של יציאה טורית.
עם זאת, אם נתקלתם בבעיות בגישה למכונה באמצעות SSH או אם אתם צריכים לפתור בעיות במכונה שלא הופעלה באופן מלא, אתם יכולים להפעיל גישה אינטראקטיבית לקונסולה הטורית, שמאפשרת לכם להתחבר לכל אחת מהיציאות הטוריות של המכונה ולקיים איתה אינטראקציה. לדוגמה, אתם יכולים להריץ פקודות ישירות ולהגיב להנחיות ביציאה הטורית.
כשמפעילים או משביתים את היציאה הטורית, אפשר להשתמש בכל ערך בוליאני ששרת המטא-נתונים מקבל. מידע נוסף זמין במאמר ערכים בוליאניים.
לפני שמתחילים
-
אם עדיין לא עשיתם את זה, תצטרכו להגדיר אימות.
אימות הוא התהליך שבו מאמתים את הזהות שלכם כדי לקבל גישה לממשקי API ולשירותים של Google Cloud . כדי להריץ קוד או דוגמאות מסביבת פיתוח מקומית, אפשר לבצע אימות ל-Compute Engine באחת מהדרכים האלה:
צריך לבחור את הכרטיסייה הרלוונטית לאופן שבו תכננתם להשתמש בדוגמאות בדף הזה:
המסוף
כשמשתמשים במסוף Google Cloud כדי לגשת לשירותים ולממשקי ה-API של Google Cloud , לא צריך להגדיר אימות.
gcloud
-
התקינו את ה-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. בכל מקרה, כל הגדרה ברמת המכונה מבטלת את ההגדרה ברמת הפרויקט או את הגדרת ברירת המחדל.
המסוף
- נכנסים לדף Metadata במסוף Google Cloud .
- לוחצים על עריכה כדי לערוך את רשומות המטא-נתונים.
- מוסיפים רשומה חדשה שמשתמשת במפתח serial-port-enable ובערך TRUE.
- שומרים את השינויים.
gcloud
ב-Google Cloud CLI, מזינים את הפקודה project-info add-metadata באופן הבא:
gcloud compute project-info add-metadata \
--metadata serial-port-enable=TRUEREST
ב-API, שולחים בקשה ל-method projects().setCommonInstanceMetadata ומספקים את המפתח serial-port-enable עם הערך TRUE:
{
"fingerprint": "FikclA7UBC0=",
"items": [
{
"key": "serial-port-enable",
"value": "TRUE"
}
]
}הפעלת גישה למכונה
להפעיל גישה אינטראקטיבית לקונסולה טורית במכונה ספציפית. הגדרה ברמת המכונה, אם היא קיימת, מבטלת כל הגדרה ברמת הפרויקט. אפשר גם להשבית את הגישה למכונה ספציפית, גם אם הגישה מופעלת ברמת הפרויקט, על ידי הגדרת serial-port-enable ל-FALSE במקום ל-TRUE. באופן דומה, אפשר להפעיל את הגישה למכונה אחת או יותר גם אם היא מושבתת בפרויקט, באופן מפורש או כברירת מחדל.
המסוף
- נכנסים לדף VM instances במסוף Google Cloud .
- לוחצים על המכונה שרוצים לאפשר גישה אליה.
- לוחצים על Edit.
- בקטע Remote access, מסמנים את התיבה Enable connecting to serial ports.
- שומרים את השינויים.
gcloud
ב-Google Cloud CLI, מזינים את הפקודה instances add-metadata ומחליפים את instance-name בשם של המכונה.
gcloud compute instances add-metadata instance-name \
--metadata serial-port-enable=TRUEREST
ב-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 כדי להתחבר, האימות של מפתח המארח מתבצע באופן אוטומטי בשבילכם.
המסוף
כדי להתחבר לקונסולה טורית אזורית של מכונה:
- נכנסים לדף VM instances במסוף Google Cloud .
- לוחצים על המכונה שאליה רוצים להתחבר.
- בקטע Details, לוחצים על Connect to serial console כדי להתחבר לקונסולה הטורית ביציאת ברירת המחדל (יציאה 1).
- כדי להתחבר ליציאה טורית אחרת, לוחצים על החץ למטה לצד הלחצן Connect to serial console ומשנים את מספר היציאה בהתאם.
- במכונות של 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, מבצעים את השלבים הבאים:
מורידים את מפתח המארח של SSH לקונסולה הטורית שבה משתמשים:
בחיבורים אזוריים, מפתח המארח של SSH לאזור נמצא בכתובת
https://www.gstatic.com/vm_serial_port_public_keys/REGION/REGION.pubלחיבורים גלובליים, מורידים את מפתח המארח של Google ליציאה טורית של SSH
פותחים את קובץ המארחים המוכרים, שבדרך כלל נמצא ב-
~/.ssh/known_hosts.מוסיפים את התוכן של מפתח המארח של ה-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 , מתנתקים מהקונסולה הטורית:
- סוגרים את החלון או הכרטיסייה בדפדפן שמכילים את החיבור לקונסולה הטורית.
gcloud
כדי להתנתק מהקונסולה הטורית ב-Google Cloud CLI:
- לוחצים על המקש
ENTER. - מקלידים
~.(טילדה ואחריה נקודה).
לקוחות SSH אחרים
בלקוחות SSH אחרים, מתנתקים מהקונסולה הטורית באופן הבא:
- לוחצים על המקש
ENTER. - מקלידים
~.(טילדה ואחריה נקודה).
ב-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
נכנסים לדף VM instances במסוף Google Cloud .
בעמודה Name, לוחצים על השם של המכונה שרוצים להוסיף לה סיסמה מקומית.
דף הפרטים של המכונה ייפתח.
לוחצים על עריכה.
ייפתח הדף לעריכת הפרטים של המכונה.
בקטע Metadata > Automation, מבצעים את הפעולות הבאות:
אם למכונה יש סקריפט קיים לטעינה בזמן ההפעלה, צריך להסיר אותו ולשמור את הסקריפט במקום בטוח.
מוסיפים את הסקריפט הבא לטעינה בזמן ההפעלה:
#!/bin/bash useradd USERNAME echo 'USERNAME:PASSWORD' | chpasswd usermod -aG google-sudoers USERNAMEמחליפים את מה שכתוב בשדות הבאים:
USERNAME: שם המשתמש שרוצים להוסיף.
PASSWORD: הסיסמה של שם המשתמש. בחלק ממערכות ההפעלה יש דרישות מינימליות לאורך ולמורכבות של הסיסמה, לכן צריך לציין סיסמה באופן הבא:הסיסמה צריכה להכיל לפחות 12 תווים.
השתמשו בשילוב של אותיות רישיות וקטנות, מספרים וסמלים.
לוחצים על Save.
דף הפרטים של המכונה ייפתח.
לוחצים על איפוס.
כשמופיעה בקשה, מזינים את פרטי ההתחברות.
Windows
נכנסים לדף VM instances במסוף Google Cloud .
בעמודה Name, לוחצים על השם של המכונה שרוצים להוסיף לה סיסמה מקומית.
דף הפרטים של המכונה ייפתח.
לוחצים על עריכה.
ייפתח הדף לעריכת הפרטים של המכונה.
בקטע Metadata:
אם למכונה יש סקריפט קיים לטעינה בזמן ההפעלה, שומרים את הסקריפט במקום בטוח, ואז לוחצים על Delete item כדי למחוק את הסקריפט.
לוחצים על Add item.
בשדה Key, מזינים
windows-startup-script-cmd.בשדה ערך, מזינים את הסקריפט הבא:
net user USERNAME PASSWORD /ADD /Y net localgroup administrators USERNAME /ADDמחליפים את מה שכתוב בשדות הבאים:
USERNAME: שם המשתמש שרוצים להוסיף.
PASSWORD: הסיסמה של שם המשתמש. בחלק ממערכות ההפעלה יש דרישות מינימליות לאורך ולמורכבות של הסיסמה, לכן צריך לציין סיסמה באופן הבא:הסיסמה צריכה להכיל לפחות 12 תווים.
השתמשו בשילוב של אותיות רישיות וקטנות, מספרים וסמלים.
לוחצים על Save.
דף הפרטים של המכונה ייפתח.
לוחצים על איפוס.
כשמופיעה בקשה, מזינים את פרטי ההתחברות.
אחרי שיוצרים את המשתמש, מחליפים את הסקריפט לטעינה בזמן ההפעלה בסקריפט ששמרתם בקטע הזה.
הגדרת סיסמה מקומית באמצעות passwd במכונה
בהוראות הבאות מוסבר איך להגדיר סיסמה מקומית למשתמש במכונה, כדי שהמשתמש יוכל להתחבר לקונסולה הטורית של המכונה באמצעות הסיסמה שצוינה.
מתחברים למכונה. מחליפים את
INSTANCE_NAMEבשם המכונה.gcloud compute ssh INSTANCE_NAME
במכונה, יוצרים סיסמה מקומית באמצעות הפקודה הבאה. הפעולה הזו מגדירה סיסמה למשתמש שאתם מחוברים אליו.
sudo passwd $(whoami)
פועלים לפי ההנחיות כדי ליצור סיסמה.
לאחר מכן, צאו מהמכונה והתחברו לקונסולה הטורית.
מזינים את פרטי ההתחברות כשמוצגת בקשה לעשות זאת.
הגדרת התחברות ביציאות טוריות אחרות
הנחיות ההתחברות מופעלות ביציאה 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 באמצעות הדמיה של הפסקת חיבור טורי:
- לוחצים על המקש
ENTER. - מקלידים
~B(טילדה, ואחריהBבאותיות רישיות). - מקלידים את הפקודה Magic SysRq.
צפייה ביומני הביקורת של הקונסולה הטורית
ב-Compute Engine יש יומני ביקורת שמאפשרים לעקוב אחרי מי שהתחבר לקונסולה הטורית של המכונה ומי שהתנתק ממנה. כדי לצפות ביומנים, אתם צריכים הרשאות למציג היומנים או הרשאת צפייה או עריכה בפרויקט.
- נכנסים לדף Logs Explorer במסוף Google Cloud .
- מרחיבים את התפריט הנפתח ובוחרים באפשרות GCE VM Instance.
- בשורת החיפוש, מקלידים
ssh-serialport.googleapis.comולוחצים על Enter. - מופיעה רשימה של יומני ביקורת. היומנים מתארים חיבורים וניתוקים מקונסולה טורית. מרחיבים את הרשומות כדי לקבל מידע נוסף.
בכל אחד מיומני הביקורת, אתם יכולים:
- מרחיבים את הנכס
protoPayload. - חפשו את
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=3ssh -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=ignoressh -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.