本頁面說明如何啟用對執行個體序列主控台的互動式存取權以偵錯啟動與網路問題、疑難排解發生異常的執行個體、與 GRand Unified Bootloader (GRUB) 互動,及執行其他疑難排解工作。
虛擬機器 (VM) 執行個體有四個虛擬序列埠。與序列埠的互動和使用終端機視窗類似,因為輸入與輸出完全位於文字模式下,且沒有圖形介面或滑鼠支援。執行個體的作業系統、BIOS 及其他系統層級實體通常會將輸出內容寫入序列埠,且可接受例如指令或提示的回答等輸入。這些系統層級實體一般會使用第一個序列埠 (通訊埠 1) 且序列埠 1 通常稱為序列主控台。
如果您只想查看序列埠輸出內容,不對序列主控台發出任何指令,則可呼叫 getSerialPortOutput
方法或使用 Cloud Logging 讀取執行個體寫入其序列埠的資訊;詳情請參閱「查看序列埠記錄」。不過,如果您透過安全殼層存取執行個體時遇到問題,或需要排解執行個體未完全啟動的問題,可以啟用對序列主控台的互動式存取權,這項權限可讓您連線至執行個體的任何序列埠並與之互動。例如,您可以在序列埠中直接執行指令並回應提示。
啟用或停用序列埠時,您可以使用中繼資料伺服器接受的任何布林值。詳情請參閱「布林值」。
事前準備
-
如果尚未設定,請��設定驗證機制。「驗證」是指驗證身分,以便存取 Google Cloud 服務和 API 的程序。如要從本機開發環境執行程式碼或範例,請選取下列任一選項,以便對 Compute Engine 進行驗證:
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
-
After installing the Google Cloud CLI, initialize it by running the following command:
gcloud init
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
- Set a default region and zone.
REST
如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 gcloud CLI 的憑證。
After installing the Google Cloud CLI, initialize it by running the following command:
gcloud init
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
詳情請參閱 Google Cloud 驗證說明文件中的「驗證以使用 REST」。
-
啟用對序列主控台的互動式存取權
請針對個別 VM 執行個體或整個專案啟用互動式序列主控台存取權。
針對專案啟用存取權
如果您針對專案啟用互動式序列主控台存取權,就會一併針對屬於該專案的所有 VM 執行個體啟用存取權。
根據預設,互動式序列埠存取權為停用。您也可以將 serial-port-enable
金鑰設為 FALSE
來明確停用這項存取權。在這兩種情況下,任何個別執行個體設定都會覆寫專案層級設定或預設設定。
主控台
- 在 Google Cloud 控制台中,前往「Metadata」頁面。
- 按一下 [Edit] (編輯),編輯中繼資料項目。
- 新增使用鍵 serial-port-enable 和值 TRUE 的項目。
- 儲存變更。
gcloud
使用 Google Cloud CLI 輸入 project-info add-metadata
指令,如下所示:
gcloud compute project-info add-metadata \ --metadata serial-port-enable=TRUE
REST
透過 API 向 projects().setCommonInstanceMetadata
方法發出要求,鍵與值分別為 serial-port-enable
、TRUE
:
{ "fingerprint": "FikclA7UBC0=", "items": [ { "key": "serial-port-enable", "value": "TRUE" } ] }
針對 VM 執行個體啟用存取權
您可以針對特定執行個體啟用互動式序列主控台存取權。如果有個別執行個體設定,該設定會覆寫任何專案層級的設定。即使專案層級已啟用此存取權,您也可將 serial-port-enable
設定為 FALSE
(而非 TRUE
),針對特定執行個體停用存取權。同樣地,即使專案已由您明確停用或預設停用存取權,您也還是可以針對一或多個執行個體啟用存取權。
主控台
- 前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面。
- 按一下您要為其啟用存取權的執行個體。
- 按一下 [編輯]。
- 在「遠端存取」專區下,勾選「啟用序列埠連線」核取方塊。
- 儲存變更。
gcloud
使用 Google Cloud CLI 輸入 instances add-metadata
指令,並將 instance-name
替換為執行個體的名稱。
gcloud compute instances add-metadata instance-name \ --metadata serial-port-enable=TRUE
REST
透過 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 執行個體設定序列主控台
對於裸機執行個體,請將序列主控台的位元率 (也稱為傳輸速率) 提高至 115,200 bps (~11.5kB/sec)。使用較慢的速度會導致控制台輸出內容出現亂碼或遺失。
不同作業系統和 OS 版本的啟動載入程式設定各不相同。如需操作說明,請參閱 OS 發布商的說明文件。
如果要在目前工作階段的指令列上修改位元率,請使用類似下列的指令:
console=ttyS0,115200
如果要修改 GRUB 設定,請使用類似下列的指令:
serial --speed=115200
請務必更新實際的啟動載入程式設定。您可以使用 update-grub
、grub2-mkconfig
或類似指令執行這項操作。
連線至序列主控台
Compute Engine 會為每個 Google Cloud區域提供區域序列主控台閘道。啟用虛擬機器序列主控台的互動存取權後,即可連線至區域序列主控台。
序列主控台會使用安全殼層金鑰驗證使用者的身分。具體而言,您必須將公開安全殼層金鑰新增至專案或執行個體中繼資料,並將私密金鑰儲存在您想連線的來源本機電腦中。gcloud CLI 和 Google Cloud 主控台會自動為您將安全殼層金鑰新增至專案。如果您使用第三方用戶端,可能需要手動新增安全殼層金鑰。
如果您使用第三方用戶端,還可以使用序列主控台的主機金鑰驗證連線。使用 Google Cloud CLI 連線時,系統會自動為您完成主機金鑰驗證。
主控台
如要連線至 VM 的區域序列主控台,請執行下列步驟:
- 前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面。
- 按一下您要連線的目標執行個體。
- 按一下「Details」下方的「Connect to serial console」,連線至預設通訊埠 (通訊埠 1)。
- 如果您想連線至其他序列埠,請按一下 [Connect to serial console] (連線至序列主控台) 按鈕旁的向下箭頭,變更通訊埠編號。
- 若使用 Windows 執行個體,請開啟按鈕旁的下拉式選單,並連線至「Port 2」(通訊埠 2),存取序列主控台。
gcloud
如要連線至 VM 的區域序列主控台,請使用 gcloud compute connect-to-serial-port
指令:
gcloud compute connect-to-serial-port VM_NAME
--port=PORT_NUMBER
更改下列內容:
VM_NAME
:要連線的 VM 序列控制台名稱。PORT_NUMBER
:要連線的通訊埠號碼。針對 Linux VM,請使用1
,針對 Windows VM,請使用2
。如要進一步瞭解通訊埠編號,請參閱「瞭解序列埠編號」。
其他安全殼層用戶端
只要用戶端允許您連線至 TCP 通訊埠 9600,您就可以使用其他第三方安全殼層用戶端連線至執行個體的序列主控台。在連線前,您可以選擇使用序列控制台的主機金鑰驗證連線。
如要連線至 VM 的區域序列主控台,請根據 VM 的作業系統執行下列其中一項指令:
如要連線至 Linux VM,請按照下列步驟操作:
ssh -i PRIVATE_SSH_KEY_FILE -p 9600 PROJECT_ID.ZONE.VM_NAME.USERNAME.OPTIONS@REGION-ssh-serialport.googleapis.com
如要連線至 Windows VM,請按照下列步驟操作:
ssh -i PRIVATE_SSH_KEY_FILE -p 9600 PROJECT_ID.ZONE.VM_NAME.USERNAME.OPTIONS.port=2@REGION-ssh-serialport.googleapis.com
更改下列內容:
PRIVATE_SSH_KEY_FILE
:執行個體的私密安全殼層金鑰。PROJECT_ID
:這個 VM 執行個體的專案 ID。ZONE
:VM 執行個體的區域。REGION
:VM 執行個體的地區。VM_NAME
:VM 執行個體的名稱。USERNAME
:用於連線至執行個體的使用者名稱。通常是本機電腦上的使用者名稱。OPTIONS
:您可以為這個連線指定的其他選項。例如,您可以指定特定序列埠並指定任何進階選項。通訊埠編號可以是 1 到 4 (包括 1 和 4)。如要進一步瞭解通訊埠編號,請參閱「瞭解序列埠編號」。若省略,則會連線至序列埠 1。
如果您在使用第三方安全殼層用戶端連線時遇到問題,可以使用 --dry-run
指令列選項執行 gcloud compute connect-to-serial-port
指令,以查看代表您執行的安全殼層指令。然後,您可以將這些選項與目前使用的指令進行比較。
驗證第三方安全殼層用戶端連線
使用非 Google Cloud CLI 的第三方 SSH 用戶端時,您可以檢查 Google 的序列埠 SSH 主機金鑰,確保您不會受到冒用身分或中間人攻擊。如要設定系統以檢查 SSH 主機金鑰,請完成下列步驟:
請為要使用的序列控制台下載安全殼層主機金鑰:
如要連線至區域,請前往
https://www.gstatic.com/vm_serial_port_public_keys/REGION/REGION.pub
查看該區域的 SSH 主機金鑰如要進行全球連線,請下載 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 有時可能會變更 Google 序列埠 SSH 主機金鑰。如果您的用戶端無法驗證伺服器金鑰,請立即放棄連線嘗試,並完成前述步驟,下載新的 Google 序列埠 SSH 主機金鑰。
如果在更新主機金鑰之後,您繼續從用戶端收到主機驗證錯誤,請停止嘗試連線至序列埠並與 Google 支援團隊聯絡。請勿在主機驗證失敗的情況下,透過連線提供任何憑證。
中斷與序列主控台的連線
如要中斷與序列主控台的連線,請按照您用來連線的方法操作說明。
主控台
在 Google Cloud 主控台中,按照下列步驟中斷與序列主控台的連線:
- 關閉含有序列主控台連線的瀏覽器視窗或分頁。
gcloud
在 Google Cloud CLI 中,執行下列操作,中斷與序列主控台的連線:
- 按下
ENTER
鍵。 - 輸入
~.
(波浪號後面加上句號)。
其他安全殼層用戶端
在其他 SSH 用戶端中,請按照下列步驟中斷與序列主控台的連線:
- 按下
ENTER
鍵。 - 輸入
~.
(波浪號後面加上句號)。
在 Google Cloud CLI 或 SSH 中,您可以輸入 ~?
來查看其他指令。您也可以使用下列指令,檢查 SSH 的手冊:
man ssh
請勿嘗試使用下列任何方法中斷連線:
CTRL+ALT+DELETE
按鍵組合或其他類似組合。這麼做無法運作,因為序列主控台無法辨識 PC 鍵盤組合。不能使用
exit
或logout
指令,因為訪客不認得任何網路或數據機連線。若使用這個指令,主控台會關閉再重新開啟,而您的工作階段仍然保持連線。如果要針對工作階段啟用exit
和logout
指令,設定on-dtr-low
選項即可。
使用登入提示連線至序列主控台
如果您要嘗試疑難排解已完全啟動之 VM 的問題,或嘗試疑難排解在 VM 已啟動通過單一使用者模式之後發生的問題,系統可能會在您嘗試存取序列主控台時提示您輸入登入資訊。
根據預設,不會將 Google 提供的 Linux 系統映像檔設定為允許本機使用者的密碼式登入。不過,Google 提供的 Windows 映像檔會設為允許本機使用者以密碼登入。
如果 VM 執行的映像檔已預先設定序列埠登入功能,您必須在 VM 上設定本機密碼,以便在系統提示時登入序列主控台。您可以在連線至 VM 後或使用啟動指令碼時設定本機密碼。
使用開機指令碼設定本機密碼
您可以使用開機指令碼設定本機密碼,這樣在 VM 建立期間或之後,您就能連線至序列控制台。
如要在現有 VM 中設定本機密碼,請選取下列任一選項:
Linux
前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面。
在「Name」欄中,按一下要新增本機密碼的 VM 名稱。
虛擬機器的詳細資料頁面隨即開啟。
按一下「Edit」(編輯)
。編輯 VM 詳細資料的頁面隨即開啟。
在「Metadata」>「Automation」專區中,執行下列操作:
如果 VM 已有開機指令碼,請將其移除,並將指令碼儲存在安全的位置。
新增下列開機指令碼:
#!/bin/bash useradd USERNAME echo 'USERNAME:PASSWORD' | chpasswd usermod -aG google-sudoers USERNAME
更改下列內容:
USERNAME
:要新增的使用者名稱。PASSWORD
:使用者名稱的密碼。由於部分作業系統規定密碼長度和複雜度下限,請按照下列方式指定密碼:至少要有 12 個半形字元。
混合使用大寫與小寫英文字母、數字和符號。
按一下 [儲存]。
虛擬機器的詳細資料頁面隨即開啟。
按一下「重設」。
按照系統提示輸入登入資訊。
Windows
前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面。
在「Name」欄中,按一下要新增本機密碼的 VM 名稱。
虛擬機器的詳細資料頁面隨即開啟。
按一下「Edit」(編輯)
。編輯 VM 詳細資料的頁面隨即開啟。
在「Metadata」專區中,執行下列操作:
如果 VM 已有開機指令碼,請將指令碼儲存在安全的地方,然後按一下
「Delete item」刪除指令碼。按一下 [新增項目]。
在「Key」欄位中輸入
windows-startup-script-cmd
。在「Value」欄位中輸入下列指令碼:
net user USERNAME PASSWORD /ADD /Y net localgroup administrators USERNAME /ADD
更改下列內容:
USERNAME
:要新增的使用者名稱。PASSWORD
:使用者名稱的密碼。由於部分作業系統規定密碼長度和複雜度下限,請按照下列方式指定密碼:至少要有 12 個半形字元。
混合使用大寫與小寫英文字母、數字和符號。
按一下 [儲存]。
虛擬機器的詳細資料頁面隨即開啟。
按一下「重設」。
按照系統提示輸入登入資訊。
建立使用者後,請將啟動指令碼換成您儲存在本節中的啟動指令碼。
在 VM 上使用 passwd
設定本機密碼
以下操作說明如何在 VM 上為使用者設定本機密碼,以便使用者可以使用指定密碼登入該 VM 的序列主控台。
連線至 VM。將
instance-name
換成您的執行個體名稱。gcloud compute ssh instance-name
在 VM 上,使用下列指令建立本機密碼。這樣會按照您目前登入使用的身分設定使用者密碼。
sudo passwd $(whoami)
依照提示建立密碼。
接下來,登出執行個體並連線至序列主控台。
在提示時輸入登入資訊。
在其他序列埠中設定登入
根據預設,大部分 Linux 作業系統的通訊埠 1 上都會啟用登入提示。 但是,通訊埠 1 通常會被記錄資料及輸出至通訊埠的其他資訊癱瘓。您可以選擇在其他通訊埠上啟用登入提示,例如通訊埠 2 (ttyS1),方法是在您的 VM 上執行下列其中一個指令。如要查看 VM 的可用通訊埠清單,請參閱「瞭解序列埠編號」。
下表列出已使用序列主控台登入預先設定的映像檔,以及預設通訊埠。
作業系統 | 預設會顯示登入提示的通訊埠 | 服務管理 |
---|---|---|
CentOS 6 | 1 | upstart |
CentOS 7 | 1 | systemd |
CoreOS | 1 | systemd |
COS | 1 | systemd |
Debian 8 | 1 | systemd |
Debian 9 | 1 | systemd |
OpenSUSE 13 | 1 | systemd |
OpenSUSE Leap | 1 | systemd |
RHEL 6 | 1 | upstart |
RHEL 7 | 1 | systemd |
SLES 11 | 1 | sysvinit |
SLES 12 | 1 | systemd |
Ubuntu 14.04 | 1 | upstart |
Ubuntu 16.04 | 1 | systemd |
Ubuntu 17.04 | 1 | systemd |
Ubuntu 17.10 | 1 | systemd |
Windows | COM2 | 不適用 |
如要在其他序列埠上啟用登入提示,請完成下列操作說明。
systemd
針對使用 systemd
的 Linux 作業系統:
暫時啟用服務,直到下次重新啟動為止:
sudo systemctl start serial-getty@ttyS1.service
從下一次重新啟動開始,永久啟用服務:
sudo systemctl enable serial-getty@ttyS1.service
upstart
針對使用 upstart
的 Linux 作業系統:
複製現有的
ttyS0.conf
檔案並修改這個檔案,從而建立新的/etc/init/ttyS1.conf
檔案,以反映ttyS1
。例如:在 Ubuntu 14.04 上:
sudo sh -c "sed -e s/ttyS0/ttyS1/g < /etc/init/ttyS0.conf > /etc/init/ttyS1.conf"
在 RHEL 6.8 與 CentOS 6.8 上
sudo sh -c "sed -ne '/^# # ttyS0/,/^# exec/p' < /etc/init/serial.conf | sed -e 's/ttyS0/ttyS1/g' -e 's/^# *//' > /etc/init/ttyS1.conf"
在
ttyS1
上啟動登入提示,而不重新啟動:sudo start ttyS1
sysvinit
針對使用 sysvinit
的 Linux 作業系統,請執行下列指令:
sudo sed -i~ -e 's/^#T([01])/T\1/' /etc/inittab sudo telinit q
瞭解序列埠編號
每個虛擬機器執行個體都有四個序列埠。為了與 getSerialPortOutput
API 一致,各通訊埠分別有 1 到 4 的編號。Linux 及其他類似系統會將序列埠編號為 0 到 3。例如,在許多作業系統映像檔中,對應裝置為 /dev/ttyS0
到 /dev/ttyS3
。Windows 會將序列埠稱為 COM1
到 COM4
。如要連線至 Windows 視為 COM3
且 Linux 視為 ttyS2
的項目,您應該指定通訊埠 3。請使用下表協助您瞭解要連線的通訊埠。
虛擬機器執行個體序列埠 | 標準 Linux 序列埠 | Windows COM 通訊埠 |
---|---|---|
1 |
/dev/ttyS0 |
COM1 |
2 |
/dev/ttyS1 |
COM2 |
3 |
/dev/ttyS2 |
COM3 |
4 |
/dev/ttyS3 |
COM4 |
請注意,許多 Linux 映像檔都使用通訊埠 1 (/dev/ttyS0
) 記錄來自核心與系統程式的訊息。
傳送序列中斷
無論系統狀態為何,Magic SysRq 組合鍵功能都可讓您執行低層級工作。例如,您可以使用 Magic SysRq 組合鍵功能,同步處理檔案系統、重新啟動執行個體、結束程序,以及卸載檔案系統。
如要使用模擬序列中斷傳送 Magic SysRq 指令:
- 按下
ENTER
鍵。 - 輸入
~B
(波浪號後面加上大寫的B
)。 - 輸入 Magic SysRq 指令。
查看序列主控台稽核記錄
Compute Engine 會提供稽核記錄,讓您追蹤誰已與執行個體的序列主控台連線及中斷連線。如要查看記錄,您必須擁有記錄檢視器的權限,或者必須為專案檢視者或編輯者。
- 前往 Google Cloud 控制台的「Logs Explorer」頁面。
- 展開下拉式選單並選取 GCE VM Instance。
- 在搜尋列中輸入
ssh-serialport.googleapis.com
,然後按下 Enter 鍵。 - 畫面上會顯示稽核記錄清單。記錄會說明序列主控台的連線和中斷連線。展開任何項目即可查看詳細資訊。
針對任何稽核記錄,您可以:
- 展開
protoPayload
屬性。 - 尋找
methodName
,查看這個記錄適用的目標活動 (連線或中斷連線要求)。例如,如果這個記錄會追蹤與序列主控台中斷連線的情況,方法名稱會顯示"google.ssh-serialport.v1.disconnect"
。同樣地,連線記錄會顯示"google.ssh-serialport.v1.connect"
。序列主控台的每個工作階段開始與結束時,都會記錄稽核記錄項目。
不同記錄類型的稽核記錄屬性各不相同。舉例來說,與連線相關的稽核記錄會具有連線記錄專屬的屬性,而斷線稽核記錄則有自己的屬性集。兩種記錄類型之間也會共用特定稽核記錄屬性。
所有序列主控台記錄
下表列出所有序列主控台記錄的稽核記錄屬性和值:
屬性 | 值 |
---|---|
requestMetadata.callerIp |
為連線來源的 IP 位址與通訊埠編號。 |
serviceName |
ssh-serialport.googleapis.com |
resourceName |
包含專案 ID、區域、執行個體名稱與序列埠編號以指示相關序列主控台的字串。例如,projects/myproject/zones/us-east1-a/instances/example-instance/SerialPort/2 是指執行個體 example-instance 的通訊埠編號 2,也稱為 COM2 或 /dev/ttyS1。 |
resource.labels |
識別執行個體 ID、區域與專案 ID 的屬性。 |
timestamp |
指示工作階段開始或結束時間的時間戳記。 |
severity |
NOTICE |
operation.id |
唯一識別工作階段的 ID 字串;您可以使用它來將中斷連線項目與對應的連線項目建立關聯。 |
operation.producer |
ssh-serialport.googleapis.com |
連線記錄
下表列出稽核記錄屬性及其連線記錄專屬值:
屬性 | 值 |
---|---|
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 表示作業順利完成,且未出現任何錯誤。由於這個屬性的列舉值為 0 ,因此不會顯示 status.code 屬性。但是,檢查 status.code 的值是否為 google.rpc.Code.OK 的所有程式碼均會正常運作。 |
中斷連線記錄
下表列出斷線記錄專用的稽核記錄屬性及其值:
屬性 | 值 |
---|---|
methodName |
google.ssh-serialport.v1.disconnect |
response.duration |
工作階段持續的時間長度 (以秒為單位)。 |
response.@type |
type.googleapis.com/google.compute.SerialConsoleSessionEnd |
operation.last |
TRUE |
失敗連線記錄
當連線失敗時,Compute Engine 會建立稽核記錄項目。失敗連線記錄與成功連線項目看起來非常相似,但會有下列屬性以指示失敗連線。
屬性 | 值 |
---|---|
severity |
ERROR |
status.code |
最適合說明錯誤的標準 Google API 錯誤代碼。下面是可能會出現的可能錯誤代碼:
|
status.message |
此項目適用的使用者可理解訊息。 |
停用互動式序列主控台存取權
您可以變更特定執行個體或專案中的中繼資料來停用互動式序列主控台存取權,也可以設定機構政策來停用屬於機構一部分的一或多個專案所有 VM 執行個體的互動式序列主控台存取權。
在特定執行個體或專案中停用互動式序列主控台
專案擁有者與編輯者,以及已授予 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
替換為您的機構 ID。例如:1759840282
。
gcloud resource-manager org-policies enable-enforce \ --organization organization-id compute.disableSerialPortAccess
REST
如要在 API 中設定政策,請向下列網址提出 POST
要求。將 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
改成您的專案 ID。
gcloud resource-manager org-policies disable-enforce \ --project project-id compute.disableSerialPortAccess
您可以使用具有相同值的 enable-enforce
指令,來開啟這個政策的強制執行功能。
REST
在 API 中,向下列網址提出 POST
要求,以啟用專案的互動式序列主控台存取權,並將 project-id
替換成專案 ID:
POST https://cloudresourcemanager.googleapis.com/v1/projects/project-id:setOrgPolicy
要求主體應包含具有下列限制的 policy
物件:
"constraint": "constraints/compute.disableSerialPortAccess"
例如:
{ "policy": { "booleanPolicy": { "enforced": FALSE }, "constraint": "constraints/compute.disableSerialPortAccess" } }
提示與秘訣
如果您在使用標準安全殼層用戶端連線時遇到問題,但
gcloud compute connect-to-serial-port
連線成功,則建議使用--dry-run
指令列選項執行gcloud compute connect-to-serial-port
,以利查看代表您執行的安全殼層指令,並且比較選項與您使用的指令。如果您使用的是已啟用 OS 登入功能的 Windows VM,且遇到
UNAUTHENTICATED
錯誤,請確認公開安全殼層金鑰已發布至專案或執行個體中繼資料。詳情請參閱「管理中繼資料中的安全殼層金鑰」。設定位元率 (也稱為傳輸速率):您可以隨意設定任何位元率 (例如
stty 9600
),但功能通常會將有效速率強制設為 115,200 bps (~11.5kB/sec)。這是因為許多公開映像檔會在序列主控台中預設採用較慢的位元率 (例如 9,600),且會緩慢啟動。某些 OS 映像檔的序列埠預設行為使用起來較不方便。以 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 個字元 x 60 列)。舉例來說,如果您使用 SSH 從機器 A 連線至機器 B,然後再連線至機器 C,並建立巢狀 SSH 工作階段,如果您想使用波浪號 (~) 指令來中斷連線或傳送序列中斷信號,就必須在指令中加入足夠的額外波浪號字元,才能取得正確的 SSH 用戶端。A 機器上的安全殼層用戶端會解譯單一 tilde 後的指令;B 機器上的用戶端則負責解譯兩個連續 tilde (Enter~~) 後的指令,依此類推。您只需要按 Enter 一次,就會一直執行到最內層的安全殼層目的地。使用任何提供 tilde 逸出功能的安全殼層用戶端均是如此。
如果您不記得需要多少個波浪號字元,請按下 Enter 鍵,然後一次輸入一個波浪號字元,直到執行個體回應波浪號為止。這項回音表示您已到達鏈尾。現在您知道如要傳送 tilde 指令至最深層的巢狀安全殼層用戶端,您需要輸入的 tilde 要比剛才輸入的數量少一個。
進階選項
您也可以在序列埠中使用下列進階選項。
控制連線數上限
您可以設定 max-connections
屬性來控制這個序列埠一次可擁有的並行連線數。連線數的預設值與上限為 5。例如:
gcloud compute connect-to-serial-port instance-name \ --port port-number \ --extra-args max-connections=3
ssh -i private-ssh-key-file -p 9600 project-id.zone.instance-name.username.max-connections=3@ssh-serialport.googleapis.com
設定重播選項
根據預設,您每次連線至序列主控台時,都會收到最後 10 行資料的重播,無論其他安全殼層用戶端是否已看到最後 10 行都是如此。您可以變更這個設定,並透過設定下列選項控制傳回的行數與行內容:
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 -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
- 重播最多但不超過這些旗標描述行數或位元組數 (以其中較小者為準) 的行。這個選項不會重播超過
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
處理捨棄的輸出
每個序列埠最新 1 MiB 的輸出一律可用,且您的安全殼層用戶端通常不應遺失序列埠中的任何輸出。如果基於某種原因,您的安全殼層用戶端在一段時間內停止接受輸出,但連線未中斷,且產生超過 1 MiB 的新資料,則您的安全殼層用戶端可能會遺失部分輸出。當您的安全殼層用戶端接受資料的速度不夠快,無法與序列主控台通訊埠中的輸出保持同步時,可設定 on-dropped-output
屬性來決定主控台的行為。
使用這個屬性設定下列任何適用選項:
insert-stderr-note
:插入安全殼層用戶端stderr
的附註,註明已捨棄輸出。這是預設選項。ignore
:以無訊息的方式捨棄輸出,且不執行任何操作。disconnect
:停止連線。
例如:
gcloud compute connect-to-serial-port instance-name \ --port port-number \ --extra-args on-dropped-output=ignore
ssh -i private-ssh-key-file -p 9600 project-id.zone.instance-name.username.on-dropped-output=ignore@ssh-serialport.googleapis.com
使用 exit 或 logout 指令啟用中斷連線
當您連線至序列主控台時,可以將 on-dtr-low
屬性設定為 disconnect
,透過 exit 或 logout 指令啟用中斷連線。
在 Google Cloud CLI 中,將下列旗標附加至 connect-to-serial-port
指令:
--extra-args on-dtr-low=disconnect
如果您使用第三方安全殼層用戶端,請在安全殼層指令中提供這個選項:
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) 來中斷連線。
後續步驟
- 進一步瞭解
getSerialPortOutput
API。 - 瞭解如何取得及查看 序列埠輸出 (即使在刪除 VM 執行個體之後)。
- 參閱更多疑難排解提示。
- 進一步瞭解套用中繼資料。
- 瞭解安全殼層金鑰。