הוספת מפתחות SSH למכונות וירטואליות

במסמך הזה מתואר איך להוסיף מפתחות SSH למכונות וירטואליות (VM).

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

איך מוסיפים מפתחות SSH למכונות וירטואליות שמשתמשות במפתחות SSH שמבוססים על מטא-נתונים

במכונות וירטואליות , מפתחות SSH נשמרים במטא-נתונים של הפרויקט והמכונה ב-Compute Engine. אם השירות OS Login מופעל במכונה וירטואלית, סוכן האורח של המכונה הווירטואלית מתעלם מהמפתחות ששמורים במטא-נתונים.

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

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

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

הוספת מפתחות SSH למטא-נתונים של הפרויקט

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

המסוף

כדי להוסיף מפתח ציבורי SSH למטא-נתונים של פרויקט באמצעות מסוףCloud de Confiance , מבצעים את הפעולות הבאות:

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

    מעבר אל Metadata

  2. לוחצים על הכרטיסייה מפתחות SSH.

  3. לוחצים על Edit.

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

  5. בשדה מפתח SSH שנפתח, מוסיפים את מפתח ה-SSH הציבורי. המפתח צריך להיות באחד מהפורמטים הבאים:

    • הפורמט של מפתח ללא תוקף:

      KEY_VALUE USERNAME
    • הפורמט של מפתח עם זמן תפוגה:

      KEY_VALUE google-ssh {"userName":"USERNAME","expireOn":"EXPIRE_TIME"}

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

    • KEY_VALUE: הערך של מפתח ה-SSH הציבורי
    • USERNAME: שם המשתמש שלכם. לדוגמה: cloudysanfrancisco או cloudysanfrancisco_gmail_com.

      במכונות וירטואליות של Linux, הערך של USERNAME לא יכול להיות root, אלא אם מגדירים את המכונה הווירטואלית כך שתאפשר התחברות של משתמש ה-Root. מידע נוסף זמין במאמר איך מתחברים למכונות וירטואליות של Linux בתור משתמש Root.

      במכונות וירטואליות של Windows שמשתמשות ב-Active Directory ‏ (AD), צריך להוסיף לפני שם המשתמש את דומיין ה-AD, בפורמט DOMAIN\. לדוגמה, למשתמש cloudysanfrancisco ב-AD‏ ad.example.com יש USERNAME עם הערך example\cloudysanfrancisco.

    • EXPIRE_TIME: השעה שבה תוקף המפתח יפוג, בפורמט ISO 8601. לדוגמה: 2021-12-04T20:12:00+0000
  6. לוחצים על Save.

gcloud

במסוף Cloud de Confiance , מפעילים את Cloud Shell.

הפעלת Cloud Shell

בחלק התחתון של Cloud de Confiance המסוף יתחיל סשן של Cloud Shell ותופיע הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.

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

    כדי להוסיף מפתח ציבורי של SSH למטא-נתונים של פרויקט באמצעות ה-CLI של gcloud:

    1. אם בפרויקט כבר יש מפתחות SSH ציבוריים ברמת הפרויקט, צריך לאחזר אותם מהמטא-נתונים ולהוסיף אותם לקובץ חדש:

      1. מריצים את הפקודה gcloud compute project-info describe כדי לקבל את מפתחות ה-SSH של הפרויקט:

        gcloud compute project-info describe \
         --format="value(commonInstanceMetadata[items][ssh-keys])"
        

        הפלט אמור להיראות כך:

        username:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF... username:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ...
        
      2. מעתיקים את ערך המטא-נתונים ssh-keys.

      3. יוצרים ופותחים קובץ טקסט חדש בתחנת העבודה.

      4. בקובץ, מדביקים את רשימת המפתחות שהעתקתם.

      5. מוסיפים את המפתח החדש בסוף הרשימה, באחת מהפורמטים הבאים:

        • הפורמט של מפתח ללא תוקף:

          USERNAME:KEY_VALUE
        • הפורמט של מפתח עם זמן תפוגה:

          USERNAME:KEY_VALUE google-ssh {"userName":"USERNAME","expireOn":"EXPIRE_TIME"}

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

        • KEY_VALUE: הערך של מפתח ה-SSH הציבורי
        • USERNAME: שם המשתמש שלכם. לדוגמה, cloudysanfrancisco או cloudysanfrancisco_gmail_com.

          במכונות וירטואליות של Linux, הערך של USERNAME לא יכול להיות root, אלא אם מגדירים את המכונה הווירטואלית כך שתאפשר התחברות של משתמש ה-Root. מידע נוסף זמין במאמר איך מתחברים למופעים כמשתמש Root.

          במכונות וירטואליות של Windows שמשתמשות ב-Active Directory ‏ (AD), צריך להוסיף לפני שם המשתמש את דומיין ה-AD, בפורמט DOMAIN\. לדוגמה, למשתמש cloudysanfrancisco ב-AD‏ ad.example.com יש USERNAME עם הערך example\cloudysanfrancisco.

        • EXPIRE_TIME: השעה שבה תוקף המפתח יפוג, בפורמט ISO 8601. לדוגמה: 2021-12-04T20:12:00+0000
      6. שומרים את הקובץ וסוגרים אותו.

    2. מריצים את הפקודה gcloud compute project-info add-metadata כדי להגדיר את הערך ssh-keys ברמת הפרויקט:

      gcloud compute project-info add-metadata --metadata-from-file=ssh-keys=KEY_FILE
      

      מחליפים את KEY_FILE באחד מהערכים הבאים:

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

Terraform

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

resource "google_compute_project_metadata" "default" {
  metadata = {
    ssh-keys = <<EOF
      dev:ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILg6UtHDNyMNAh0GjaytsJdrUxjtLy3APXqZfNZhvCeT dev
      test:ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILg6UtHDNyMNAh0GjaytsJdrUxjtLy3APXqZfNZhvCeT test
    EOF
  }
}

כדי ללמוד איך להחיל הגדרות ב-Terraform או להסיר אותן, ראו פקודות בסיסיות ב-Terraform.

REST

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

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

  1. מקבלים את הערכים fingerprint ו-ssh-keys ממטא-נתונים באמצעות השיטה projects.get

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID
    

    מחליפים את PROJECT_ID במזהה הפרויקט.

    התגובה אמורה להיראות כך:

    ...
    "fingerprint": "utgYE_XWtE8=",
    "items": [
    {
     "key": "ssh-keys",
     "value": "cloudysanfrancisco:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF...\nbaklavainthebalkans:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQDx3FNVC8... google-ssh {"userName":"baklavainthebalkans","expireOn":"2021-06-14T16:59:03+0000"}"
    }
    ]
    ...
    
  2. מוסיפים את הערך החדש ssh-keys באמצעות השיטה projects.setCommonInstanceMetadata.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/setCommonInstanceMetadata
    
    {
    "items": [
     {
      "key": "ssh-keys",
      "value": "EXISTING_SSH_KEYS\nNEW_SSH_KEY"
     }
    ]
    "fingerprint": "FINGERPRINT"
    }
    

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

    • PROJECT_ID: מזהה הפרויקט
    • EXISTING_SSH_KEYS: הערך של מפתח ssh-keys מהתגובה לבקשת projects.get
    • FINGERPRINT: הערך של fingerprint מהתגובה לבקשת projects.get
    • NEW_SSH_KEY: מפתח ה-SSH החדש, באחד מהפורמטים הבאים:

      • הפורמט של מפתח ללא תוקף:

        USERNAME:KEY_VALUE
      • הפורמט של מפתח עם זמן תפוגה:

        USERNAME:KEY_VALUE google-ssh {"userName":"USERNAME","expireOn":"EXPIRE_TIME"}

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

      • KEY_VALUE: הערך של מפתח ה-SSH הציבורי
      • USERNAME: שם המשתמש שלכם. לדוגמה, cloudysanfrancisco או cloudysanfrancisco_gmail_com.

        במכונות וירטואליות של Linux, הערך של USERNAME לא יכול להיות root, אלא אם מגדירים את המכונה הווירטואלית כך שתאפשר התחברות של משתמש ה-Root. מידע נוסף זמין במאמר איך מתחברים למופעים כמשתמש Root.

        במכונות וירטואליות של Windows שמשתמשות ב-Active Directory ‏ (AD), צריך להוסיף לפני שם המשתמש את דומיין ה-AD, בפורמט DOMAIN\. לדוגמה, למשתמש cloudysanfrancisco ב-AD‏ ad.example.com יש USERNAME עם הערך example\cloudysanfrancisco.

      • EXPIRE_TIME: השעה שבה תוקף המפתח יפוג, בפורמט ISO 8601. לדוגמה: 2021-12-04T20:12:00+0000

הוספת מפתחות SSH למטא-נתונים של מכונה

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

הוספת מפתחות SSH למטא-נתונים של מופע במהלך יצירת מכונה וירטואלית

אפשר להוסיף מפתחות SSH למטא-נתונים של מופע במהלך יצירת מכונה וירטואלית, באמצעות מסוףCloud de Confiance , ה-CLI של gcloud או Compute Engine API.

המסוף

כדי ליצור מכונה וירטואלית ולהוסיף מפתח SSH ציבורי למטא-נתונים של המכונה הווירטואלית בו-זמנית באמצעות מסוף Cloud de Confiance , מבצעים את הפעולות הבאות:

  1. נכנסים לדף Create an instance במסוף Cloud de Confiance .

    כניסה לדף Create an instance

  2. כדי להוסיף מפתח ציבורי SSH למטא-נתונים של מופע:

    1. בתפריט הניווט, לוחצים על אבטחה.

    2. מרחיבים את הקטע Manage access.

    3. כדי להשבית את OS Login, מבטלים את הסימון בתיבה Control VM access through IAM permissions.

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

    5. בקטע Add manually generated SSH keys (הוספת מפתחות SSH שנוצרו באופן ידני), לוחצים על Add item (הוספת פריט).

    6. מוסיפים את המפתח הציבורי בשדה הטקסט. המפתח צריך להיות באחד מהפורמטים הבאים:

      • הפורמט של מפתח ללא תוקף:

        KEY_VALUE USERNAME
      • הפורמט של מפתח עם זמן תפוגה:

        KEY_VALUE google-ssh {"userName":"USERNAME","expireOn":"EXPIRE_TIME"}

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

      • KEY_VALUE: הערך של מפתח ה-SSH הציבורי
      • USERNAME: שם המשתמש שלכם. לדוגמה: cloudysanfrancisco או cloudysanfrancisco_gmail_com.

        במכונות וירטואליות של Linux, הערך של USERNAME לא יכול להיות root, אלא אם מגדירים את המכונה הווירטואלית כך שתאפשר התחברות של משתמש ה-Root. מידע נוסף זמין במאמר איך מתחברים למכונות וירטואליות של Linux בתור משתמש Root.

        במכונות וירטואליות של Windows שמשתמשות ב-Active Directory ‏ (AD), צריך להוסיף לפני שם המשתמש את דומיין ה-AD, בפורמט DOMAIN\. לדוגמה, למשתמש cloudysanfrancisco ב-AD‏ ad.example.com יש USERNAME עם הערך example\cloudysanfrancisco.

      • EXPIRE_TIME: השעה שבה תוקף המפתח יפוג, בפורמט ISO 8601. לדוגמה: 2021-12-04T20:12:00+0000
  3. אופציונלי: מציינים אפשרויות הגדרה אחרות. מידע נוסף מופיע במאמר אפשרויות הגדרה במהלך יצירת מכונה.

  4. כדי ליצור את המכונה ולהפעיל אותה, לוחצים על Create.

gcloud

  1. במסוף Cloud de Confiance , מפעילים את Cloud Shell.

    הפעלת Cloud Shell

    בחלק התחתון של Cloud de Confiance המסוף יתחיל סשן של Cloud Shell ותופיע הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.

  2. כדי ליצור מכונה וירטואלית ולהוסיף מפתח SSH ציבורי למטא-נתונים של המכונה בו-זמנית באמצעות ה-CLI של gcloud, משתמשים בפקודה gcloud compute instances create:

    gcloud compute instances create VM_NAME \
       --metadata=ssh-keys=PUBLIC_KEY
    

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

    • VM_NAME: השם של מכונת ה-VM החדשה
    • PUBLIC_KEY: מפתח ה-SSH הציבורי, באחד מהפורמטים הבאים:

      • הפורמט של מפתח ללא תוקף:

        USERNAME:KEY_VALUE
      • הפורמט של מפתח עם זמן תפוגה:

        USERNAME:KEY_VALUE google-ssh {"userName":"USERNAME","expireOn":"EXPIRE_TIME"}

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

      • KEY_VALUE: הערך של מפתח ה-SSH הציבורי
      • USERNAME: שם המשתמש שלכם. לדוגמה, cloudysanfrancisco או cloudysanfrancisco_gmail_com.

        במכונות וירטואליות של Linux, הערך של USERNAME לא יכול להיות root, אלא אם מגדירים את המכונה הווירטואלית כך שתאפשר התחברות של משתמש ה-Root. מידע נוסף זמין במאמר איך מתחברים למופעים כמשתמש Root.

        במכונות וירטואליות של Windows שמשתמשות ב-Active Directory ‏ (AD), צריך להוסיף לפני שם המשתמש את דומיין ה-AD, בפורמט DOMAIN\. לדוגמה, למשתמש cloudysanfrancisco ב-AD‏ ad.example.com יש USERNAME עם הערך example\cloudysanfrancisco.

      • EXPIRE_TIME: השעה שבה תוקף המפתח יפוג, בפורמט ISO 8601. לדוגמה: 2021-12-04T20:12:00+0000

    אפשר להוסיף כמה מפתחות SSH באמצעות הדגל --metadata-from-file=ssh-keys=FILE_PATH. מוסיפים לקובץ רשימה של שמות משתמשים ומפתחות ציבוריים של SSH באחד מהפורמטים שצוינו למעלה.

Terraform

כדי להוסיף מפתח ציבורי SSH למטא-נתונים של המופע, משתמשים במשאב google_compute_instance.

resource "google_compute_instance" "default" {
  name         = "my-vm"
  machine_type = "n1-standard-1"
  zone         = "us-central1-a"

  boot_disk {
    initialize_params {
      image = "ubuntu-1404-trusty-v20160627"
    }
  }

  # Local SSD disk
  scratch_disk {
    interface = "SCSI"
  }

  network_interface {
    network = "default"
    access_config {}
  }
  metadata = {
    "ssh-keys" = <<EOT
      dev:ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILg6UtHDNyMNAh0GjaytsJdrUxjtLy3APXqZfNZhvCeT dev
      test:ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILg6UtHDNyMNAh0GjaytsJdrUxjtLy3APXqZfNZhvCeT test
     EOT
  }
}

כדי ללמוד איך להחיל הגדרות ב-Terraform או להסיר אותן, ראו פקודות בסיסיות ב-Terraform.

REST

כדי ליצור מכונה וירטואלית ולהוסיף מפתח SSH ציבורי למטא-נתונים של המכונה בו-זמנית באמצעות Compute Engine, צריך ליצור בקשת POST לשיטה instances.insert:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

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

  • PROJECT_ID: מזהה הפרויקט
  • ZONE: האזור של המכונה הווירטואלית

בגוף הבקשה, מציינים את שמות המשתמשים ואת מפתחות ה-SSH הציבוריים במאפיין items:

...
{
 "items": [
    {
     "key": "ssh-keys",
     "value": "PUBLIC_KEY"
    }
   ]
}
...

מחליפים את PUBLIC_KEY במפתח הציבורי שלכם, באחד מהפורמטים הבאים:

  • הפורמט של מפתח ללא תאריך תפוגה:

    USERNAME:KEY_VALUE
  • הפורמט של מפתח עם זמן תפוגה:

    USERNAME:KEY_VALUE google-ssh {"userName":"USERNAME","expireOn":"EXPIRE_TIME"}

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

  • KEY_VALUE: הערך של מפתח ה-SSH הציבורי
  • USERNAME: שם המשתמש שלכם. לדוגמה, cloudysanfrancisco או cloudysanfrancisco_gmail_com.

    במכונות וירטואליות של Linux, הערך של USERNAME לא יכול להיות root, אלא אם מגדירים את המכונה הווירטואלית כך שתאפשר התחברות של משתמש ה-Root. מידע נוסף זמין במאמר איך מתחברים למופעים כמשתמש Root.

    במכונות וירטואליות של Windows שמשתמשות ב-Active Directory ‏ (AD), צריך להוסיף לפני שם המשתמש את דומיין ה-AD, בפורמט DOMAIN\. לדוגמה, למשתמש cloudysanfrancisco ב-AD‏ ad.example.com יש USERNAME עם הערך example\cloudysanfrancisco.

  • EXPIRE_TIME: השעה שבה תוקף המפתח יפוג, בפורמט ISO 8601. לדוגמה: 2021-12-04T20:12:00+0000

אפשר להוסיף כמה מפתחות SSH על ידי הוספת \n בין המפתחות.

הוספת מפתחות SSH למטא-נתונים של מופע אחרי יצירת המכונה הווירטואלית

אפשר להוסיף מפתחות SSH למטא-נתונים של מופע אחרי יצירת מכונה וירטואלית, באמצעות מסוףCloud de Confiance , ה-CLI של gcloud או Compute Engine API.

המסוף

כדי להוסיף מפתח ציבורי SSH למטא-נתונים של מכונה באמצעותCloud de Confiance המסוף:

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

    כניסה לדף VM Instances

  2. לוחצים על שם המכונה הווירטואלית שרוצים להוסיף לה מפתח SSH.

  3. לוחצים על Edit.

  4. בקטע SSH Keys (מפתחות SSH), לוחצים על Add item (הוספת פריט).

  5. מוסיפים את המפתח הציבורי בשדה הטקסט. המפתח צריך להיות באחד מהפורמטים הבאים:

    • הפורמט של מפתח ללא תוקף:

      KEY_VALUE USERNAME
    • הפורמט של מפתח עם זמן תפוגה:

      KEY_VALUE google-ssh {"userName":"USERNAME","expireOn":"EXPIRE_TIME"}

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

    • KEY_VALUE: הערך של מפתח ה-SSH הציבורי
    • USERNAME: שם המשתמש שלכם. לדוגמה: cloudysanfrancisco או cloudysanfrancisco_gmail_com.

      במכונות וירטואליות של Linux, הערך של USERNAME לא יכול להיות root, אלא אם מגדירים את המכונה הווירטואלית כך שתאפשר התחברות של משתמש ה-Root. מידע נוסף זמין במאמר איך מתחברים למכונות וירטואליות של Linux בתור משתמש Root.

      במכונות וירטואליות של Windows שמשתמשות ב-Active Directory ‏ (AD), צריך להוסיף לפני שם המשתמש את דומיין ה-AD, בפורמט DOMAIN\. לדוגמה, למשתמש cloudysanfrancisco ב-AD‏ ad.example.com יש USERNAME עם הערך example\cloudysanfrancisco.

    • EXPIRE_TIME: השעה שבה תוקף המפתח יפוג, בפורמט ISO 8601. לדוגמה: 2021-12-04T20:12:00+0000
  6. לוחצים על Save.

gcloud

  1. במסוף Cloud de Confiance , מפעילים את Cloud Shell.

    הפעלת Cloud Shell

    בחלק התחתון של Cloud de Confiance המסוף יתחיל סשן של Cloud Shell ותופיע הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.

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

    כדי להוסיף מפתח ציבורי SSH למטא-נתונים של מכונה וירטואלית באמצעות ה-CLI של gcloud, מבצעים את הפעולות הבאות:

    1. אם למכונה הווירטואלית כבר יש מפתחות SSH ציבוריים ברמת המכונה, צריך לאחזר אותם מהמטא-נתונים ולהוסיף אותם לקובץ חדש:

      1. מריצים את הפקודה gcloud compute instances describe כדי לקבל את המטא-נתונים של מכונת ה-VM:

        gcloud compute instances describe VM_NAME
        

        מחליפים את VM_NAME בשם של המכונה הווירטואלית שרוצים להוסיף או להסיר ממנה מפתחות ציבוריים של SSH.

        הפלט אמור להיראות כך:

        ...
        metadata:
        ...
        - key: ssh-keys
         value: |-
           cloudysanfrancisco:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF...
           baklavainthebalkans:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQDx3FNVC8... google-ssh {"userName":"baklavainthebalkans","expireOn":"2021-06-14T16:59:03+0000"}
        ...
        
      2. מעתיקים את ערך המטא-נתונים ssh-keys.

      3. יוצרים ופותחים קובץ טקסט חדש בתחנת העבודה.

      4. בקובץ, מדביקים את רשימת המפתחות שהעתקתם.

      5. מוסיפים את המפתח החדש בסוף הרשימה, באחת מהפורמטים הבאים:

      • הפורמט של מפתח ללא תוקף:

        USERNAME:KEY_VALUE
      • הפורמט של מפתח עם זמן תפוגה:

        USERNAME:KEY_VALUE google-ssh {"userName":"USERNAME","expireOn":"EXPIRE_TIME"}

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

      • KEY_VALUE: הערך של מפתח ה-SSH הציבורי
      • USERNAME: שם המשתמש שלכם. לדוגמה, cloudysanfrancisco או cloudysanfrancisco_gmail_com.

        במכונות וירטואליות של Linux, הערך של USERNAME לא יכול להיות root, אלא אם מגדירים את המכונה הווירטואלית כך שתאפשר התחברות של משתמש ה-Root. מידע נוסף זמין במאמר איך מתחברים למופעים כמשתמש Root.

        במכונות וירטואליות של Windows שמשתמשות ב-Active Directory ‏ (AD), צריך להוסיף לפני שם המשתמש את דומיין ה-AD, בפורמט DOMAIN\. לדוגמה, למשתמש cloudysanfrancisco ב-AD‏ ad.example.com יש USERNAME עם הערך example\cloudysanfrancisco.

      • EXPIRE_TIME: השעה שבה תוקף המפתח יפוג, בפורמט ISO 8601. לדוגמה: 2021-12-04T20:12:00+0000
      1. שומרים את הקובץ וסוגרים אותו.
    2. מריצים את הפקודה gcloud compute instances add-metadata כדי להגדיר את הערך ssh-keys:

      gcloud compute instances add-metadata VM_NAME --metadata-from-file ssh-keys=KEY_FILE
      

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

      • VM_NAME: המכונה הווירטואלית שרוצים להוסיף לה את מפתח ה-SSH
      • KEY_FILE עם אחת מהאפשרויות הבאות:
      • הנתיב לקובץ שיצרתם בשלב הקודם, אם למכונה הווירטואלית היו מפתחות SSH קיימים
      • הנתיב לקובץ של מפתח ה-SSH הציבורי החדש, אם למכונה הווירטואלית לא היו מפתחות SSH קיימים

REST

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

כדי להוסיף מפתח ציבורי SSH למטא-נתונים של מופע באמצעות Compute Engine API:

  1. אפשר לקבל את הערכים של fingerprint ושל ssh-keys ממטא-נתונים באמצעות השיטה instances.get.

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
    

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

    • PROJECT_ID: מזהה הפרויקט
    • ZONE: האזור של המכונה הווירטואלית שרוצים להוסיף לה מפתח SSH
    • VM_NAME: המכונה הווירטואלית שאליה מוסיפים מפתח SSH

    התגובה אמורה להיראות כך:

    ...
    "fingerprint": "utgYE_XWtE8=",
    "items": [
    {
     "key": "ssh-keys",
      "value": "cloudysanfrancisco:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF...\nbaklavainthebalkans:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQDx3FNVC8... google-ssh {"userName":"baklavainthebalkans","expireOn":"2021-06-14T16:59:03+0000"}"
    }
    ]
    ...
    
  2. מוסיפים את הערך החדש ssh-keys באמצעות השיטה instances.setMetadata.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setMetadata
    
    {
    "items": [
     {
      "key": "ssh-keys",
      "value": "EXISTING_SSH_KEYS\nNEW_SSH_KEY"
     }
    ]
    "fingerprint": "FINGERPRINT"
    }
    

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

    • PROJECT_ID: מזהה הפרויקט
    • EXISTING_SSH_KEYS: הערך של מפתח ssh-keys מהתגובה לבקשת instances.get
    • FINGERPRINT: הערך fingerprint מהתגובה לבקשת projects.get
    • NEW_SSH_KEY: מפתח ה-SSH החדש, באחד מהפורמטים הבאים:

      • הפורמט של מפתח ללא תוקף:

        USERNAME:KEY_VALUE
      • הפורמט של מפתח עם זמן תפוגה:

        USERNAME:KEY_VALUE google-ssh {"userName":"USERNAME","expireOn":"EXPIRE_TIME"}

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

      • KEY_VALUE: הערך של מפתח ה-SSH הציבורי
      • USERNAME: שם המשתמש שלכם. לדוגמה, cloudysanfrancisco או cloudysanfrancisco_gmail_com.

        במכונות וירטואליות של Linux, הערך של USERNAME לא יכול להיות root, אלא אם מגדירים את המכונה הווירטואלית כך שתאפשר התחברות של משתמש ה-Root. מידע נוסף זמין במאמר איך מתחברים למופעים כמשתמש Root.

        במכונות וירטואליות של Windows שמשתמשות ב-Active Directory ‏ (AD), צריך להוסיף לפני שם המשתמש את דומיין ה-AD, בפורמט DOMAIN\. לדוגמה, למשתמש cloudysanfrancisco ב-AD‏ ad.example.com יש USERNAME עם הערך example\cloudysanfrancisco.

      • EXPIRE_TIME: השעה שבה תוקף המפתח יפוג, בפורמט ISO 8601. לדוגמה: 2021-12-04T20:12:00+0000

מה השלב הבא?