התחברות למכונות וירטואליות של Linux באמצעות שרת proxy לאימות זהויות (IAP)

במסמך הזה מוסבר איך להתחבר למכונה וירטואלית (VM) באמצעות כתובת ה-IP הפנימית שלה, באמצעות העברת TCP של שרת Proxy לאימות זהויות (IAP).

העברת TCP ב-IAP מאפשרת ליצור מנהרה מוצפנת שדרכה אפשר להעביר חיבורי SSH למכונות וירטואליות. כשמתחברים למכונה וירטואלית שמשתמשת ב-IAP, חיבור ה-SSH נארז ב-HTTPS לפני שהחיבור מועבר למכונה הווירטואלית. לאחר מכן, IAP בודק אם יש לכם את הרשאות ה-IAM הנדרשות, ואם כן, מעניק גישה ל-VM.

אם אתם צריכים להתחבר למכונה וירטואלית שאין לה כתובות IP חיצוניות ואתם לא יכולים להשתמש ב-IAP, עיינו בשיטות האחרות שמפורטות במאמר אפשרויות חיבור למכונות וירטואליות פנימיות בלבד.

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

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

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

    המסוף

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

    gcloud

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

      gcloud init

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

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

מערכות הפעלה נתמכות

שיטות החיבור האלה נתמכות בכל התמונות הציבוריות של Linux שזמינות ב-Compute Engine. בתמונות של Fedora CoreOS, צריך להגדיר גישת SSH לפני שמשתמשים בשיטות האלה.

התחברות למכונות וירטואליות

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

המסוף

כדי להעביר חיבורי SSH דרך כתובת IP פנימית של מכונה וירטואלית באמצעות SSH-in-Browser:

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

    כניסה לדף VM instances

  2. ברשימת המכונות הווירטואליות, לוחצים על SSH בשורה של המכונה שרוצים להתחבר אליה.

gcloud

כדי להעביר חיבורי SSH דרך כתובת ה-IP הפנימית של המכונה הווירטואלית, משתמשים בפקודה gcloud compute ssh עם הדגל --tunnel-through-iap:

    מפעילים את Cloud Shell במסוף Google Cloud .

    הפעלת Cloud Shell

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

  1. מריצים את הפקודה הבאה כדי להתחבר למכונה הווירטואלית:

    gcloud compute ssh INSTANCE_NAME \
        --project=PROJECT_ID \
        --zone=ZONE \
        --tunnel-through-iap

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

    • ‫INSTANCE_NAME: השם של המכונה הווירטואלית שאליה רוצים להתחבר.
    • ‫PROJECT_ID: מזהה הפרויקט שמכיל את המכונה הווירטואלית.
    • ‫ZONE: שם האזור שבו נמצאת המכונה הווירטואלית.

IAP Desktop

כדי להתחבר למכונה וירטואלית באמצעות IAP Desktop:

  1. מתקינים את IAP Desktop בתחנת העבודה, אם עדיין לא עשיתם את זה.

  2. פותחים את IAP Desktop. נפתח החלון Add projects.

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

  4. בחלון Add projects, מזינים את מזהה הפרויקט או את שם הפרויקט שמכיל את המכונות הווירטואליות שאליהן רוצים להתחבר.

  5. בחלון Project Explorer, לוחצים שוב לחיצה ימנית על שם ה-VM ובוחרים באפשרות Connect כדי להתחבר ל-VM.

לקוחות OpenSSH

להתחבר למכונה וירטואלית שאין לה כתובת IP חיצונית באמצעות SSH דרך מנהרת IAP. אתם יכולים לכתוב קובץ תצורה משלכם ל-SSH‏ (~/.ssh/config) כדי שכלים כמו VS Code או לקוח OpenSSH יוכלו להתחבר ישירות.

  1. כדי ליצור ולהפיץ את מפתחות ה-SSH, מתחברים למכונה הווירטואלית לפחות פעם אחת באמצעות הפקודה gcloud compute ssh:

    gcloud compute ssh INSTANCE_NAME \
        --project=PROJECT_ID \
        --zone=ZONE \
        --tunnel-through-iap

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

    • ‫INSTANCE_NAME: השם של המכונה הווירטואלית שאליה רוצים להתחבר.
    • ‫PROJECT_ID: מזהה הפרויקט שמכיל את המכונה הווירטואלית.
    • ‫ZONE: האזור שבו נמצאת המכונה הווירטואלית.

    אחרי שהחיבור מצליח, יוצאים מסשן ה-SSH.

  2. פותחים או יוצרים את קובץ התצורה של SSH בתחנת העבודה המקומית. הקובץ הזה נמצא בדרך כלל ב-~/.ssh/config ב-Linux וב-macOS, או ב-%USERPROFILE%\.ssh\config ב-Windows.

  3. מוסיפים רשומת הגדרה ל-VM על ידי הוספת הבלוק הבא לקובץ ההגדרות של SSH:

    Host INSTANCE_NAME
        HostName INSTANCE_NAME
        IdentityFile PATH_TO_PRIVATE_KEY
        ProxyCommand gcloud compute start-iap-tunnel %h %p --listen-on-stdin --project=PROJECT_ID --zone=ZONE --verbosity=warning
        User USERNAME

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

    • ‫INSTANCE_NAME: השם של המכונה הווירטואלית שאליה רוצים להתחבר.
    • ‫PATH_TO_PRIVATE_KEY: הנתיב לקובץ המפתח הפרטי, בדרך כלל ~/.ssh/google_compute_engine.
    • ‫PROJECT_ID: מזהה הפרויקט שמכיל את המכונה הווירטואלית.
    • ‫ZONE: האזור שבו נמצאת המכונה הווירטואלית.
    • ‫USERNAME: שם המשתמש ב-VM, כמו שם המשתמש שלכם ב- Google Cloud OS Login או שם המשתמש במטא-נתונים.
  4. מתחברים למכונה הווירטואלית מהטרמינל המקומי או מלקוח SSH, באמצעות הפקודה הבאה:

    ssh INSTANCE_NAME

אפליקציית PuTTY

כדי להעביר חיבורי SSH דרך כתובת IP פנימית של מכונה וירטואלית באמצעות PuTTY:

  1. אם עדיין לא הוספתם מפתח SSH, הוסיפו מפתח SSH למכונה הווירטואלית.
  2. אם אפליקציית PuTTY לא מותקנת בתחנת העבודה, הורידו את קובצי החבילה של PuTTY.
  3. נכנסים לדף VM instances במסוף Google Cloud ומחפשים את שם המכונה הווירטואלית שאליה רוצים להתחבר.

    כניסה לדף VM instances

  4. פותחים את אפליקציית PuTTY. נפתח חלון להגדרת החיבור.
  5. בשדה שם מארח (או כתובת IP), מזינים את שם המשתמש שמשויך למפתח ה-SSH ואת שם ה-VM שאליו רוצים להתחבר. צריך להשתמש בפורמט הבא:

    USERNAME@INSTANCE_NAME

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

    • ‫USERNAME: שם המשתמש שלכם ב- . אם אתם מנהלים את מפתחות ה-SSH במטא-נתונים, שם המשתמש הוא מה שציינתם כשיצרתם את מפתח ה-SSH. אם אתם משתמשים בחשבונות של OS Login, שם המשתמש מוגדר בפרופיל שלכם ב-Google, למשל cloudysanfrancisco_example_com או cloudysanfrancisco.
    • ‫INSTANCE_NAME: שם המכונה הווירטואלית.
  6. בתפריט Category, עוברים אל Connection > SSH > Auth > Credentials (או אל Connection > SSH > Auth בגרסאות PuTTY שקודמות ל-0.78).
  7. בשדה Private key file for authentication, לוחצים על Browse ובוחרים את קובץ מפתח ה-SSH הפרטי (.ppk) שתואם למפתח הציבורי שהוספתם למכונה הווירטואלית.
  8. בתפריט Category, עוברים אל Connection > Proxy.
  9. בקטע Proxy type, בוחרים באפשרות Local.
  10. בשדה Telnet command, or local proxy command, מזינים את הפקודה הבאה:

    gcloud.cmd compute start-iap-tunnel INSTANCE_NAME PORT_NUMBER --listen-on-stdin --project=PROJECT_ID --zone=ZONE

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

    • ‫INSTANCE_NAME: השם של המכונה הווירטואלית שאליה רוצים להתחבר.
    • ‫PORT_NUMBER: היציאה שבה פועל ה-daemon של sshd. ערך ברירת המחדל של PORT_NUMBER הוא 22.
    • ‫PROJECT_ID: הפרויקט שמארח את ה-VM שאליו רוצים להתחבר.
    • ‫ZONE: האזור שבו נמצאת המכונה הווירטואלית.
  11. לוחצים על Open כדי להתחבר למכונה הווירטואלית.

פתרון בעיות

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

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