本文說明如何使用中繼資料伺服器排解 OS 登入問題。如需設定 OS 登入的資訊或逐步操作說明,請參閱設定 OS 登入。
您可以從虛擬機器 (VM) 執行個體內查詢中繼資料伺服器。詳情請參閱儲存和擷取執行個體中繼資料。
事前準備
-
如果尚未設定驗證,請先完成設定。
「驗證」是指驗證身分的程序,確認您有權存取 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.
執行
gcloud compute os-login describe-profile
指令,查看 OS Login 設定檔:gcloud compute os-login describe-profile
輸出看起來類似以下內容:
name: '00000000000000' posixAccounts: ... sshPublicKeys: ...: fingerprint: ... key: | ssh-rsa AAAAB3NzaC1yc2... name: ... ...
查看輸出內容,找出未使用的 SSH 金鑰。
使用
gcloud compute os-login ssh-keys remove
指令,從輸出內容中移除所有未使用的金鑰:gcloud compute os-login ssh-keys remove --key=KEY
將
KEY
替換為金鑰指紋或金鑰字串。查詢使用者設定檔,取得
name
欄位的值:curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?username=user_example_com" -H "Metadata-Flavor: Google"
記下輸出內容中的
name
。使用
name
的值執行下列login
指令:curl "http://metadata.google.internal/computeMetadata/v1/oslogin/authorize?policy=login&email=LOGIN_NAME" -H "Metadata-Flavor: Google"
- 進一步瞭解 OS Login。
- 瞭解如何使用 SSH 連線至 Compute Engine 的 Linux VM。
- 如需逐步操作說明,請參閱下列其中一項:
- 查看管理機構中 OS Login
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 驗證說明文件中的「Authenticate for using REST」。
常見錯誤訊息
以下是使用 OS 登入時可能會遇到的常見錯誤範例。
找不到群組名稱
對於某些使用 OS Login 的 VM,您可能會在建立連線後收到以下錯誤訊息:
/usr/bin/id: cannot find name for group ID 123456789
忽略這則錯誤訊息。這個錯誤不會影響您的 VM。
無法取得群組
建立 VM 時,您可能會看到類似下列的記錄:
Dec 10 22:31:05 instance-1 google_oslogin_nss_cache[381]: oslogin_cache_refresh[381]: Refreshing group entry cache Dec 10 22:31:05 instance-1 google_oslogin_nss_cache[381]: oslogin_cache_refresh[381]: Failure getting groups, quitting
這些記錄表示貴機構尚未設定 OS 登入 Linux 群組。請忽略這些訊息。
不符合先決條件
使用 SSH 連線至 VM 時,您可能會看到類似下列內容的錯誤:
ERROR: (gcloud.compute.ssh) FAILED_PRECONDITION: The specified username or UID is not unique within given system ID.
如果 OS Login 嘗試產生的使用者名稱已存在於機構中,就會發生這個錯誤。如果使用者帳戶遭刪除,且隨後建立的新使用者帳戶使用相同電子郵件地址,就可能發生這種情況。刪除使用者帳戶後,系統最多需要 48 小時才能移除使用者的 POSIX 資訊。
如要解決這個問題,請按照下列其中一種做法進行:
引數無效
使用 SSH 連線至 VM 或使用 SCP 傳輸檔案時,您可能會看到類似下列的錯誤:
ERROR: (gcloud.compute.ssh) INVALID_ARGUMENT: Login profile size exceeds 32 KiB. Delete profile values to make additional space.
ERROR: (gcloud.compute.scp) INVALID_ARGUMENT: Login profile size exceeds 32 KiB. Delete profile values to make additional space.
如要解決這些錯誤,請按照下列步驟操作:
為避免日後發生這個問題,請為安全殼層金鑰新增到期時間。過期的金鑰會在到期後 48 小時內,或是在您將新金鑰新增至登入設定檔時,自動從設定檔中移除。
HTTP 回應代碼:429
嘗試使用 SSH 連線至 VM 時,可能會看到下列錯誤訊息:
Failed to validate organization user USERNAME has login permission, got HTTP response code: 429
這個問題是由於每個虛擬機器執行個體每秒 100 次查詢的中繼資料伺服器速率限制所致。這項限制無法調整。如要解決這個問題,請等待幾秒,然後重試連線。
為避免日後發生類似問題,請嘗試下列做法:
預設 OS 登入中繼資料項目
Compute Engine 定義了一組預設中繼資料項目,可提供 OS Login 資訊。預設中繼資料一律由伺服器定義及設定。預設中繼資料鍵會區分大小寫。
下表說明可查詢的項目。
相對於 http://metadata.google.internal/computeMetadata/v1/
中繼資料項目 說明 project/attributes/enable-oslogin
檢查目前 Google Cloud 專案是否已啟用 OS 登入功能。 instance/attributes/enable-oslogin
檢查目前 VM 是否已啟用 OS 登入。 oslogin/users/
擷取 OS 登入使用者的個人資料資訊。 您可以傳遞查詢參數,例如 username
、uid
、pagesize
和pagetoken
。oslogin/authorize/
擷取 OS 登入使用者的登入或管理層級權限設定。
如要檢查權限,您必須指定
policy
查詢參數。 政策參數的值必須設為login
(檢查登入權限) 或adminLogin
(檢查 sudo 存取權)。檢查是否已設定 OS 登入
使用 Google Cloud 控制台或 Google Cloud CLI 查詢中繼資料,判斷是否已啟用 OS 登入。在專案或執行個體中繼資料中,將
enable-oslogin
中繼資料鍵設為TRUE
,即可啟用 OS 登入功能。如果同時設定執行個體和專案中繼資料,系統會優先採用執行個體中繼資料中設定的值。查看 OS 登入使用者
如要查看多位使用者的設定檔資訊,您需要指定
pagesize
和pagetoken
參數。將pagesize
和pagetoken
替換為所需數值。curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?pagesize=PAGE_SIZE& pagetoken=PAGE_TOKEN" -H "Metadata-Flavor: Google"
舉例來說,如要將
pagesize
設為1
,並將pagetoken
設為0
,請執行下列指令:curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?pagesize=1&pagetoken=0" -H "Metadata-Flavor: Google"
在大多數發行版中,您也可以執行 Unix 指令
getent passwd
,擷取機構使用者的密碼項目。查看特定 OS 登入使用者
如要查看 VM 上特定使用者的設定檔資訊,請執行下列指令:
curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?username=USERNAME" -H "Metadata-Flavor: Google"
將
USERNAME
替換為要查詢的使用者名稱。舉例來說,您可以執行要求來查詢使用者
user_example_com
。下列指令和輸出內容顯示新增的格式,可提升可讀性。curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?username=user_example_com" -H "Metadata-Flavor: Google"
輸出結果會與下列內容相似:
{ "loginProfiles": [{ "name": "12345678912345", "posixAccounts": [{ "primary": true, "username": "user_example_com", "uid": "123451", "gid": "123451", "homeDirectory": "/home/user_example_com", "operatingSystemType": "LINUX" }], "sshPublicKeys": { "204c4b4fb...": { "key": "ssh-rsa AAAAB3Nz...", "fingerprint": "204c4b4fb..." } } }] }
在大多數發行版本中,您也可以執行 Unix 指令 (例如
getent passwd username
或getent passwd uid
) 來擷取設定檔資訊。如要擷取使用者的 SSH 金鑰,您也可以執行
/usr/bin/google_authorized_keys USERNAME
。如果沒有傳回任何金鑰,表示使用者可能沒有登入 VM 的必要權限。正在檢查登入權限
如要查看登入和管理層級權限,您必須提供
policy=login&email=LOGIN_NAME
查詢參數。舉例來說,您可以查詢前一節中檢視的使用者
user_example_com
的登入權限:curl "http://metadata.google.internal/computeMetadata/v1/oslogin/authorize?policy=login&email=12345678912345" -H "Metadata-Flavor: Google"
指令輸出內容會指出使用者已獲得授權,可登入 VM:
{"success":true}
檢查 VM 是否有服務帳戶
您可以查詢中繼資料伺服器,找出與 VM 相關聯的服務帳戶。在 VM 上執行下列指令:
curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/" -H "Metadata-Flavor: Google"
輸出結果會與下列內容相似:
12345-sa@developer.gserviceaccount.com/ default/
如果找不到服務帳戶,輸出內容會留空。
後續步驟
除非另有註明,否則本頁面中的內容是採用創用 CC 姓名標示 4.0 授權,程式碼範例則為阿帕契 2.0 授權。詳情請參閱《Google Developers 網站政策》。Java 是 Oracle 和/或其關聯企業的註冊商標。
上次更新時間:2025-07-10 (世界標準時間)。
-