בדף הזה מוסבר איך להפעיל גישה אינטראקטיבית למסוף הטורי של מופע כדי לנפות באגים בבעיות אתחול ורשת, לפתור בעיות במופעים שלא פועלים, ליצור אינטראקציה עם GRand Unified Bootloader (GRUB) ולבצע משימות אחרות לפתרון בעיות.
למכונה של Compute Engine יש ארבע יציאות טוריות וירטואליות. האינטראקציה עם יציאה טורית דומה לשימוש בחלון מסוף, בכך שהקלט והפלט הם במצב טקסט בלבד ואין ממשק גרפי או תמיכה בעכבר. מערכת ההפעלה, ה-BIOS וישויות אחרות ברמת המערכת של המופע כותבות לעיתים קרובות פלט ליציאות הטוריות, ויכולות לקבל קלט כמו פקודות או תשובות להנחיות. בדרך כלל, ישויות ברמת המערכת משתמשות ביציאה הטורית הראשונה (יציאה 1), ויציאה טורית 1 נקראת לעיתים קרובות מסוף טור.
אם אתם צריכים רק להציג את הפלט של היציאה הטורית בלי להנפיק פקודות למסוף הטורי, אתם יכולים לקרוא לשיטה getSerialPortOutput או להשתמש ב-Cloud Logging כדי לקרוא מידע שהמופע כתב ליציאה הטורית שלו. מידע נוסף זמין במאמר הצגת יומנים של יציאות טוריות.
עם זאת, אם נתקלתם בבעיות בגישה למופע דרך SSH או שאתם צריכים לפתור בעיות במופע שלא הופעל באופן מלא, אתם יכולים להפעיל גישה אינטראקטיבית למסוף הטורי, שמאפשרת לכם להתחבר לכל אחת מהיציאות הטוריות של המופע ולבצע פעולות אינטראקטיביות. לדוגמה, אפשר להריץ פקודות ישירות ולהשיב להנחיות ביציאה הטורית.
כשמפעילים או משביתים את היציאה הטורית, אפשר להשתמש בכל ערך בוליאני שהשרת למטא-נתונים מקבל. מידע נוסף זמין במאמר בנושא ערכים בוליאניים.
לפני שמתחילים
-
אם עדיין לא עשיתם את זה, תצטרכו להגדיר אימות.
אימות הוא תהליך שבו מאמתים את הזהות שלכם כדי לקבל גישה לממשקי API ולשירותים של Google Cloud . כדי להריץ קוד או דוגמאות מסביבת פיתוח מקומית, אפשר לבצע אימות ל-Compute Engine באחת מהדרכים הבאות:
צריך לבחור את הכרטיסייה הרלוונטית לאופן שבו תכננתם להשתמש בדוגמאות בדף הזה:
המסוף
כשמשתמשים במסוף Google Cloud כדי לגשת לשירותים ולממשקי ה-API, לא צריך להגדיר אימות. Google Cloud
gcloud
-
התקינו את ה-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. בכל מקרה, כל הגדרה ספציפית לאירוע מבטלת את ההגדרה ברמת הפרויקט או את הגדרת ברירת המחדל.
המסוף
- נכנסים לדף 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, שולחים בקשה לשיטה 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.
- בקטע גישה מרחוק, מעבירים את מצב הסימון של התיבה הפעלת חיבור ליציאות טוריות.
- שומרים את השינויים.
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
במקרים של מופעי 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:
- נכנסים לדף VM instances במסוף Google Cloud .
- לוחצים על המופע שאליו רוצים להתחבר.
- בקטע פרטים, לוחצים על חיבור למסוף טור כדי להתחבר ליציאה שמוגדרת כברירת מחדל (יציאה 1).
- אם רוצים להתחבר ליציאה טורית אחרת, לוחצים על החץ למטה לצד הלחצן Connect to serial console ומשנים את מספר היציאה בהתאם.
- במקרים של מכונות וירטואליות עם 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, מבצעים את השלבים הבאים:
מורידים את מפתח המארח של ה-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 תשנה מדי פעם את מפתח המארח של SSH של יציאה טורית של Google. אם הלקוח לא מצליח לאמת את מפתח השרת, צריך להפסיק מיד את ניסיון החיבור ולבצע את השלבים הקודמים כדי להוריד מפתח מארח SSH חדש של יציאה טורית של Google.
אם אחרי עדכון מפתח המארח אתם ממשיכים לקבל שגיאה באימות המארח מהלקוח, תפסיקו את הניסיונות להתחבר ליציאה הטורית ותפנו לתמיכה של Google. אל תספקו פרטי כניסה בחיבור שבו אימות המארח נכשל.
ניתוק מהמסוף הטורי
כדי להתנתק מהמסוף הטורי, פועלים לפי ההוראות של השיטה שבה השתמשתם כדי להתחבר.
המסוף
במסוף Google Cloud , מתנתקים מהמסוף הטורי באופן הבא:
- סוגרים את חלון הדפדפן או את הכרטיסייה שמכילים את החיבור למסוף הטורי.
gcloud
ב-Google Cloud CLI, מתנתקים מהמסוף הטורי באופן הבא:
- מקישים על המקש
ENTER. - מקלידים
~.(טילדה, ואז נקודה).
לקוחות SSH אחרים
בלקוחות SSH אחרים, מתנתקים מהמסוף הטורי באופן הבא:
- מקישים על המקש
ENTER. - מקלידים
~.(טילדה, ואז נקודה).
ב-Google Cloud CLI או באמצעות SSH, אפשר להקליד ~? כדי לגלות פקודות אחרות. אפשר גם לבדוק את דף ה-man של SSH באמצעות הפקודה הבאה:
man ssh
אל תנסו לבטל את הקישור באמצעות אחת מהשיטות הבאות:
שילוב המקשים
CTRL+ALT+DELETEאו שילובים דומים אחרים. הפעולה הזו לא עובדת כי המסוף הטורי לא מזהה שילובים של מקלדת למחשב.הפקודה
exitאוlogoutלא פועלת כי האורח לא מודע לחיבורים לרשת או למודם. השימוש בפקודה הזו גורם לסגירה של המסוף ואז לפתיחה שלו מחדש, ואתם נשארים מחוברים לסשן. אם רוצים להפעיל את הפקודותexitו-logoutבסשן, אפשר להגדיר את האפשרותon-dtr-low.
התחברות למסוף טור עם הנחיה להתחברות
אם אתם מנסים לפתור בעיה שקשורה למופע של מחשוב שהופעל באופן מלא, או בעיה שמתרחשת אחרי שהמופע של מחשוב הופעל אחרי מצב משתמש יחיד, יכול להיות שתתבקשו להזין פרטי כניסה כשאתם מנסים לגשת למסוף הטורי.
כברירת מחדל, תמונות מערכת של Linux שסופקו על ידי Google לא מוגדרות כך שיאפשרו כניסות של משתמשים מקומיים שמבוססות על סיסמאות. עם זאת, תמונות Windows שסופקו על ידי Google מוגדרות כך שהן מאפשרות למשתמשים מקומיים להתחבר באמצעות סיסמה.
אם מכונת החישוב מריצה תמונה שהוגדרה מראש עם התחברויות ליציאה טורית, צריך להגדיר סיסמה מקומית במכונת החישוב כדי שתוכלו להיכנס למסוף הטורי, אם תתבקשו. אפשר להגדיר סיסמה מקומית אחרי שמתחברים למופע של Compute או באמצעות סקריפט הפעלה.
הגדרה של סיסמה מקומית באמצעות סקריפט לטעינה בזמן ההפעלה
אתם יכולים להשתמש בסקריפט לטעינה בזמן ההפעלה כדי להגדיר סיסמה מקומית שתאפשר לכם להתחבר למסוף הטורי במהלך יצירת המכונה או אחריה.
כדי להגדיר סיסמה מקומית במופע קיים של מחשוב, בוחרים באחת מהאפשרויות הבאות:
Linux
נכנסים לדף VM instances במסוף Google Cloud .
בעמודה Name, לוחצים על השם של מכונת החישוב שרוצים להוסיף לה סיסמה מקומית.
ייפתח דף הפרטים של מופע Compute.
לוחצים על עריכה.
ייפתח הדף לעריכת הפרטים של מופע המחשוב.
בקטע מטא-נתונים > אוטומציה, מבצעים את הפעולות הבאות:
אם למכונת החישוב יש סקריפט הפעלה קיים, צריך להסיר אותו ולאחסן את הסקריפט במקום בטוח.
מוסיפים את הסקריפט הבא להפעלה:
#!/bin/bash useradd USERNAME echo 'USERNAME:PASSWORD' | chpasswd usermod -aG google-sudoers USERNAMEמחליפים את מה שכתוב בשדות הבאים:
USERNAME: שם המשתמש שרוצים להוסיף.
PASSWORD: הסיסמה של שם המשתמש. מכיוון שמערכות הפעלה מסוימות דורשות אורך ורמת מורכבות מינימליים לסיסמה, צריך לציין סיסמה באופן הבא:צריך להשתמש ב-12 תווים לפחות.
מומלץ להשתמש בשילוב של אותיות קטנות ורישיות, מספרים וסמלים.
לוחצים על Save.
ייפתח דף הפרטים של מופע Compute.
לוחצים על איפוס.
כשמתבקשים, מזינים את פרטי הכניסה.
Windows
נכנסים לדף VM instances במסוף Google Cloud .
בעמודה Name, לוחצים על השם של מכונת החישוב שרוצים להוסיף לה סיסמה מקומית.
ייפתח דף הפרטים של מופע Compute.
לוחצים על עריכה.
ייפתח הדף לעריכת הפרטים של מופע המחשוב.
בקטע Metadata:
אם למופע של המחשוב יש סקריפט לטעינה בזמן ההפעלה קיים, מאחסנים את הסקריפט במקום בטוח, ואז לוחצים על מחיקת פריט כדי למחוק את הסקריפט.
לוחצים על Add item.
בשדה מפתח, מזינים
windows-startup-script-cmd.בשדה ערך, מזינים את הסקריפט הבא:
net user USERNAME PASSWORD /ADD /Y net localgroup administrators USERNAME /ADDמחליפים את מה שכתוב בשדות הבאים:
USERNAME: שם המשתמש שרוצים להוסיף.
PASSWORD: הסיסמה של שם המשתמש. מכיוון שמערכות הפעלה מסוימות דורשות אורך ורמת מורכבות מינימליים לסיסמה, צריך לציין סיסמה באופן הבא:צריך להשתמש ב-12 תווים לפחות.
מומלץ להשתמש בשילוב של אותיות קטנות ורישיות, מספרים וסמלים.
לוחצים על Save.
ייפתח דף הפרטים של מופע Compute.
לוחצים על איפוס.
כשמתבקשים, מזינים את פרטי הכניסה.
אחרי שיוצרים את המשתמש, מחליפים את הסקריפט לטעינה בזמן ההפעלה בסקריפט לטעינה בזמן ההפעלה ששמרתם בקטע הזה.
הגדרת סיסמה מקומית באמצעות passwd במכונת החישוב
בשלבים הבאים מוסבר איך להגדיר סיסמה מקומית למשתמש במופע של Compute Engine, כדי שהמשתמש יוכל להתחבר למסוף הטורי של המופע באמצעות הסיסמה שצוינה.
מתחברים למופע של Compute. מחליפים את
INSTANCE_NAMEבשם המכונה.gcloud compute ssh INSTANCE_NAME
במכונת ה-Compute, יוצרים סיסמה מקומית באמצעות הפקודה הבאה. הפעולה הזו מגדירה סיסמה למשתמש שאיתו אתם מחוברים.
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
הפעלה מחדש של מכונת ה-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 באמצעות הפסקה טורית מדומה:
- מקישים על המקש
ENTER. - מקלידים
~B(טילדה, ואז האותBבאותיות רישיות). - מקלידים את פקודת Magic SysRq.
צפייה ביומני ביקורת של מסוף סדרתי
Compute Engine מספק יומני ביקורת כדי לעקוב אחרי מי התחבר למסוף הטורי של מכונה ומי התנתק ממנו. כדי להציג יומנים, צריכות להיות לכם הרשאות ל-Logs Viewer או הרשאת צפייה או עריכה בפרויקט.
- נכנסים לדף Logs Explorer במסוף Google Cloud .
- מרחיבים את התפריט הנפתח ובוחרים באפשרות GCE VM Instance (מופע של מכונה וירטואלית ב-GCE).
- בסרגל החיפוש, מקלידים
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 |
אם הבקשות לחיבור מצליחות, הערך 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=3ssh -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=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 כשמתחברים למסוף הטורי.
ב-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.
המאמרים הבאים
- מידע נוסף על API של
getSerialPortOutput - כאן מוסבר איך לשמור ולראות את הפלט של יציאה טורית גם אחרי שמחקתם את מופע המחשוב.
- טיפים נוספים לפתרון בעיות
- מידע נוסף על מטא-נתונים
- מידע נוסף על מפתחות SSH