תמיכה ב-SSH

בדף הזה מוסבר איך להשתמש ב-gcloud CLI כדי להתחבר לתחנת העבודה ממחשב מקומי באמצעות SSH (או כל פרוטוקול TCP אחר).

‫Cloud Workstations משתמשת במנהרה כדי להעביר תנועת TCP בין יציאה במחשב המקומי לבין יציאה בתחנת העבודה, בלי לחשוף את תחנת העבודה לאינטרנט. האימות של החיבורים מתבצע באמצעות אישורים מ-gcloud CLI, וההרשאה מתבצעת בהתאם למדיניות IAM של תחנת העבודה היעד.

אחרי שמקימים את מנהרת ה-TCP בין היציאה המקומית לבין תחנת העבודה, אפשר להשתמש בה כדי להעביר תנועה מלקוח SSH, מ-curl או מכל אפליקציה אחרת שמשתמשת ב-TCP.

כדי להקל על השימוש, Cloud Workstations מספקת את הפקודה gcloud workstations ssh, שמקימה את מנהרת ה-TCP ומריצה לקוח SSH עם פקודת CLI אחת של gcloud.

בכל שאר תרחישי השימוש, משתמשים בפקודה gcloud workstations start-tcp-tunnel כדי ליצור את מנהרת ה-TCP ולהפעיל את האפליקציה שתשתמש במנהרה (לדוגמה, curl) במסוף נפרד.

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

  1. אם עדיין אין לכם תחנת עבודה להתחבר אליה, אתם צריכים להגדיר תחנת עבודה.

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

    gcloud init

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

  3. מוודאים שיש לכם את תפקיד ה-IAM‏ Cloud Workstations User בתחנת העבודה שאליה אתם מתחברים.

    כניסה לדף IAM

התחברות לתחנת העבודה באמצעות SSH

כדי ליצור חיבור SSH מאובטח לתחנת העבודה, משתמשים בפקודה gcloud workstations ssh, שמתחילה מנהרת TCP ומריצה לקוח SSH.

מריצים את הפקודה הבאה בחלון מסוף מקומי:

gcloud workstations ssh \
    --project=PROJECT_ID \
    --region=REGION \
    --cluster=CLUSTER_NAME \
    --config=CONFIG_NAME  \
    --port=WORKSTATION_PORT  \
    --local-host-port=localhost:LOCAL_PORT  \
    WORKSTATION_NAME

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

  • PROJECT_ID: Google Cloud מזהה הפרויקט של הפרויקט שמכיל את תחנת העבודה. אם לא מציינים פרויקט, המערכת משתמשת בפרויקט הנוכחי.

  • REGION: האזור שבו נמצא האשכול של תחנת העבודה – לדוגמה, us-central1.

  • CLUSTER_NAME: השם של אשכול תחנות העבודה שמכיל את תחנת העבודה.

  • CONFIG_NAME: השם של תצורת תחנת העבודה שמכילה את תחנות העבודה האלה.

  • WORKSTATION_PORT (אופציונלי): היציאה בתחנת העבודה שאליה יש לשלוח את התנועה. אם לא מציינים יציאה, התנועה תישלח ליציאה 22. כל קובצי האימג' של Cloud Workstations שמוגדרים מראש כוללים שרת SSH שפועל ביציאה 22 של תחנת העבודה.

  • LOCAL_PORT (אופציונלי): יציאת ה-localhost שממנה התנועה תישלח. מספרי היציאה החוקיים הם 1024 עד 65535. אם לא מציינים את הדגל --local-host-port או מציינים יציאה של 0, המערכת בוחרת יציאה לא בשימוש באופן אוטומטי.

  • WORKSTATION_NAME: השם של תחנת העבודה.

הגדרת SSH והקובץ .ssh/config

כשמשתמשים ב-gcloud workstations ssh, הפקודה מנתבת את החיבור דרך localhost. כתוצאה מכך, המערכת לא מחילה באופן אוטומטי רשומות Host מהקובץ ~/.ssh/config שמשתמשות בשם תחנת העבודה.

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

אפשרות 1: העברת דגלים בשורת הפקודה

אפשר להעביר אפשרויות SSH ישירות ללקוח ה-SSH הבסיסי על ידי הוספתן אחרי מקף כפול (--):

gcloud workstations ssh \
    --project=PROJECT_ID \
    --region=REGION \
    --cluster=CLUSTER_NAME \
    --config=CONFIG_NAME \
    WORKSTATION_NAME \
    -- -o SSH_OPTION=VALUE

אפשרות 2: שימוש במנהרת TCP קבועה וב-.ssh/config

אם אתם מעדיפים להשתמש בקובץ ~/.ssh/config:

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

    gcloud workstations start-tcp-tunnel \
        --project=PROJECT_ID \
        --region=REGION \
        --cluster=CLUSTER_NAME \
        --config=CONFIG_NAME \
        --local-host-port=localhost:LOCAL_PORT \
        WORKSTATION_NAME \
        22
    
  2. מוסיפים בלוק הגדרות לקובץ ~/.ssh/config במחשב המקומי:

    Host WORKSTATION_NAME
        HostName localhost
        Port LOCAL_PORT
        User user
        # Disable host key checking for ephemeral cloud workstations
        StrictHostKeyChecking no
        UserKnownHostsFile /dev/null
        # Add any other SSH options here
    
  3. מתחברים לתחנת העבודה באמצעות SSH רגיל:

    ssh WORKSTATION_NAME
    

שימוש במנהרת TCP כדי להעביר תנועת TCP שרירותית לתחנת העבודה

כדי להתחבר לתחנת עבודה באמצעות אפליקציית TCP שאינה ssh, משתמשים בפקודה gcloud workstations start-tcp-tunnel:

  1. מריצים את הפקודה הבאה ב-CLI של gcloud כדי ליצור מנהרת TCP מאומתת.

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

    gcloud workstations start-tcp-tunnel \
        --project=PROJECT_ID \
        --region=REGION \
        --cluster=CLUSTER_NAME \
        --config=CONFIG_NAME \
        --local-host-port=localhost:LOCAL_PORT \
        WORKSTATION_NAME \
        WORKSTATION_PORT
    

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

    • PROJECT_ID: Google Cloud מזהה הפרויקט של הפרויקט שמכיל את תחנת העבודה. אם לא מציינים פרויקט, המערכת משתמשת בפרויקט הנוכחי.

    • REGION: האזור שבו נמצא האשכול של תחנת העבודה – לדוגמה, us-central1.

    • CLUSTER_NAME: השם של אשכול תחנות העבודה שמכיל את תחנת העבודה.

    • CONFIG_NAME: השם של תצורת תחנת העבודה שמכילה את תחנות העבודה האלה.

    • LOCAL_PORT (אופציונלי): יציאת ה-localhost שממנה התנועה תישלח. מספרי היציאה החוקיים הם 1024 עד 65535. אם לא מציינים את הדגל --local-host-port או מציינים יציאה של 0, המערכת בוחרת יציאה שלא נמצאת בשימוש באופן אוטומטי.

    • WORKSTATION_NAME: השם של תחנת העבודה.

    • WORKSTATION_PORT: היציאה של תחנת העבודה שאליה התנועה צריכה להישלח. קובצי אימג' של Cloud Workstations שמוגדרים מראש כוללים שרת SSH שפועל ביציאה 22 של תחנת העבודה.

  2. הפקודה gcloud CLI מבצעת בדיקת קישוריות עם תחנת העבודה, פותחת מנהרה ואז מציגה מספר יציאה:

    Listening on port [LOCAL_PORT].
    

    כל התעבורה שנשלחת אל localhost:LOCAL_PORT מועברת אל תחנת העבודה. הגישה ליציאה אפשרית רק לאפליקציות שפועלות במחשב המקומי.

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

    לדוגמה, אם אתם מריצים שרת בתחנת העבודה שמשרת את היציאה WORKSTATION_PORT, ובשלב הקודם יצרתם מנהרת TCP שמעבירה תנועה בין היציאה המקומית LOCAL_PORT לבין היציאה WORKSTATION_PORT בתחנת העבודה, תוכלו להריץ את הפקודה curl במחשב המקומי כדי להתחבר לשרת בתחנת העבודה:

    curl localhost:LOCAL_PORT
    Hello, world!
    
  4. בסיום, חוזרים לטרמינל שבו התחלתם את מנהרת ה-TCP ומפריעים ל-CLI של gcloud על ידי הקשה על Control+C.

שימוש בשרתי SSH ביציאות שונות

קובצי אימג' בקונטיינר בהתאמה אישית יכולים גם להשתמש בשרתי SSH בכל יציאה. כדי לתמוך בחיבורים ממנהרת ה-CLI של gcloud, צריך להגדיר שרתי SSH בהתאמה אישית כדי לאפשר אימות באמצעות סיסמה, ולהגדיר את משתמש היעד עם סיסמה ריקה. ‫Cloud Workstations משתמש ב-Cloud IAM כדי לוודא שרק תעבורה מורשית נשלחת לשרת ה-SSH.

שמירה על סשנים מתמשכים של SSH

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

כדי להתקין את tmux בתחנת העבודה:

  1. כדי להשתמש ב-tmux באופן מיידי, אפשר להתקין אותו באופן ידני בסשן הנוכחי:

    sudo apt update
    sudo apt install -y tmux
    
  2. מגדירים את תחנת העבודה כך ש-tmux יותקן בה בעת ההפעלה. יוצרים את הקובץ /home/user/.workstation/customize_environment או מוסיפים לו את הפקודות הבאות:

    #!/bin/bash
    sudo apt update
    sudo apt install -y tmux
    

    מידע נוסף מופיע במאמר בנושא התאמה אישית של תמונת תחנת עבודה קיימת בלי להרחיב אותה.

  3. הופכים את הקובץ לניתן להרצה כדי שהוא יפעל כשהתחנה מתחילה לפעול:

    chmod +x /home/user/.workstation/customize_environment
    

אחרי שמתקינים את tmux:

  1. מתחברים לתחנת העבודה:

    gcloud workstations ssh \
        --project=PROJECT_ID \
        --region=REGION \
        --cluster=CLUSTER_NAME \
        --config=CONFIG_NAME \
        WORKSTATION_NAME
    
  2. מריצים סשן חדש של tmux מתחנת העבודה:

    tmux
    
  3. אם החיבור נכשל, מתחברים מחדש ומצרפים את הפגישה על ידי הפעלת הפקודה הבאה מהטרמינל המקומי:

    gcloud workstations ssh \
        --project=PROJECT_ID \
        --region=REGION \
        --cluster=CLUSTER_NAME \
        --config=CONFIG_NAME \
        WORKSTATION_NAME \
        -- -t tmux attach
    

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