使用防禦主機連線至 Linux VM


本文說明如何使用bastion 主機 VM,透過虛擬機器 (VM) 執行個體的內部 IP 位址連線。防禦主機提供外部進入點,可進入包含沒有外部 IP 位址的 VM 的虛擬私人雲端 (VPC) 網路。使用防禦主機時,請先連線至防禦主機,然後再連線至目標 VM。

如果 VM 沒有外部 IP 位址,使用內部 IP 位址連線至 VM 就很有用。如果 VM 確實有外部 IP 位址,請使用外部 IP 位址連線至 VM。如果您需要連線至沒有外部 IP 位址的 VM,但無法使用防禦主機,請參閱僅限內部 VM 的連線選項一節中列出的其他方法。

支援的作業系統

這些連線方法適用於 Compute Engine 提供的所有公開 Linux 映像檔。針對 Fedora CoreOS 映像檔,您必須先設定 SSH 存取權,才能使用這些方法。

建立防禦主機 VM

在私人叢集內部網路中建立 Compute Engine VM,做為可管理叢集的防禦主機。

主控台

請按照下列步驟建立防禦主機 VM:

  1. 前往 Google Cloud 控制台的「Create an instance」(建立執行個體) 頁面。

    前往「Create an instance」(建立執行個體)

    1. 指定下列 VM 詳細資料:
    • 名稱:VM 名稱。
    • 機器類型:機器類型。選擇小型機器類型,例如 e2-micro
    • 開機磁碟 作業系統:任何 Linux 作業系統。
  2. 展開「進階選項」部分,然後執行下列操作:

    1. 在「Network interfaces」部分中,選取與目標 VM 相同的虛擬私有雲網路和子網路。

    2. 在「外部 IPv4 位址」部分,選取「臨時」

  3. 如要建立並啟動 VM,請按一下 [Create] (建立)

gcloud

使用 gcloud compute instances create 指令建立防禦主機 VM:

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. 執行下列指令,建立防禦主機 VM:

    gcloud compute instances create VM_NAME \
      --zone=ZONE \
      --machine-type=e2-micro \
      --image-family=IMAGE_FAMILY \
      --image-project=IMAGE_PROJECT \
      --network-interface=subnet=SUBNET,address=""
    

    更改下列內容:

    • VM_NAME:VM 名稱。
    • ZONE:VM 的可用區。
    • IMAGE_FAMILY:Linux 映像檔系列
    • IMAGE_PROJECT:包含圖片的圖片專案
    • SUBNET:與目標 VM 相同的虛擬私有雲子網路。如果您使用預設虛擬私有雲,SUBNET 就是 default

連線至 VM

如要連線至 VM,請按照下列任一分頁中的步驟操作。

gcloud

執行 gcloud compute ssh 指令,透過防禦主機使用 SSH 連線至 VM:

  1. 請執行下列指令,連線至防禦主機 VM:

    gcloud compute ssh BASTION_NAME

    BASTION_NAME 替換為堡壘主機 VM 的名稱。

  2. 從防禦主機 VM 使用 --internal-ip 旗標,透過主 VM 的內部 IP 位址連線:

    gcloud compute ssh VM_NAME \
        --internal-ip

    VM_NAME 替換為您要連線的 VM 名稱。

OpenSSH 用戶端

如要透過 OpenSSH 用戶端連線至防禦主機的 VM,請按照下列步驟操作:

  1. 如果尚未將 SSH 金鑰新增至 VM,請先完成這項操作。
  2. 在 Google Cloud 控制台中,前往「VM Instances」(VM 執行個體) 頁面,然後找出堡壘主機 VM 的外部 IP 位址。

    前往 VM 執行個體

  3. 在工作站上開啟終端機。
  4. 請執行下列指令,連線至防禦主機 VM:

    ssh -A -i PATH_TO_PRIVATE_KEY USERNAME@EXTERNAL_IP

    更改下列內容:

    • PATH_TO_PRIVATE_KEY:私密安全殼層金鑰檔案的路徑,對應您新增至 VM 的公開金鑰。
    • USERNAME: 您的使用者名稱。如果您在中繼資料中管理安全殼層金鑰, 使用者名稱就是您在建立安全殼層金鑰時指定的名稱。 對於 OS 登入帳戶,使用者名稱是在 Google 個人資料中定義的名稱。例如 cloudysanfrancisco_example_comcloudysanfrancisco
    • EXTERNAL_IP:VM 的外部 IP 位址。
  5. 從防禦主機 VM 使用下列指令,透過 VM 的內部 IP 位址建立連線:

    ssh USERNAME@INTERNAL_IP

    更改下列內容:

    • USERNAME: 您的使用者名稱。如果您在中繼資料中管理安全殼層金鑰, 使用者名稱就是您在建立安全殼層金鑰時指定的名稱。 對於 OS 登入帳戶,使用者名稱是在 Google 個人資料中定義的名稱。例如 cloudysanfrancisco_example_comcloudysanfrancisco
    • INTERNAL_IP:VM 的內部 IP 位址。

PuTTY 應用程式

如要透過防禦主機使用 PuTTY 連線至 VM,請執行下列步驟:

  1. 如果您尚未在防禦主機 VM 中新增安全殼層金鑰,請先完成這項操作。
  2. 如果工作站尚未安裝 PuTTY 應用程式,請下載 PuTTY 套件檔案
  3. 在 Google Cloud 控制台中,前往「VM Instances」(VM 執行個體) 頁面,找出要連線的 VM 內部 IP 位址。

    前往 VM 執行個體

  4. 開啟 PuTTY 應用程式。連線設定視窗隨即開啟。
  5. Host Name 欄位中,輸入安全殼層金鑰的相關使用者名稱,以及您要連線的 VM 外部 IP 位址。請使用下列格式:

    USERNAME@EXTERNAL_IP

    更改下列內容:

    • USERNAME: 您的使用者名稱。如果您是在中繼資料中管理安全殼層金鑰, 使用者名稱就是您在建立安全殼層金鑰時指定的名稱。 如果是 OS 登入帳戶,使用者名稱會在您的 Google 個人資料中定義。例如 cloudysanfrancisco_example_comcloudysanfrancisco
    • EXTERNAL_IP:VM 的外部 IP 位址。
  6. 在「Category」選單中,依序前往「Connection」>「SSH」>「Auth」
  7. 在「Private key file for authentication」欄位中,選取與您新增至 VM 的公開金鑰相對應的私密安全殼層金鑰檔案。
  8. 在「Authentication Parameters」部分中,選取「Allow agent forwarding」
  9. 按一下「Open」,即可連線至防禦主機 VM。
  10. 從防禦主機 VM 使用下列指令,透過 VM 的內部 IP 位址建立連線:

    ssh USERNAME@INTERNAL_IP

    更改下列內容:

    • USERNAME: 您的使用者名稱。如果您在中繼資料中管理安全殼層金鑰, 使用者名稱就是您在建立安全殼層金鑰時指定的名稱。 對於 OS 登入帳戶,使用者名稱是在 Google 個人資料中定義的名稱。例如 cloudysanfrancisco_example_comcloudysanfrancisco
    • INTERNAL_IP:VM 的內部 IP 位址。

疑難排解

如要瞭解如何診斷及解決 SSH 連線失敗的問題,請參閱「SSH 疑難排解」一文。

後續步驟