本文說明如何使用中繼資料伺服器排解 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
-
安裝 Google Cloud CLI。 安裝完成後,執行下列指令初始化 Google Cloud CLI:
gcloud init
如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。
- Set a default region and zone.
REST
如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 gcloud CLI 的憑證。
安裝 Google Cloud CLI。 安裝完成後,執行下列指令初始化 Google Cloud CLI:
gcloud init
如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。
詳情請參閱 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.
如要解決這些錯誤,請按照下列步驟操作:
執行
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
替換為金鑰指紋或金鑰字串。
為避免日後發生這個問題,請為安全殼層金鑰新增到期時間。過期的金鑰會在到期後 48 小時內,或是在您為設定檔新增金鑰時,自動從登入設定檔中移除。
HTTP 回應代碼:429
嘗試使用 SSH 連線至 VM 時,可能會看到下列錯誤訊息:
Failed to validate organization user USERNAME has login permission, got HTTP response code: 429
這個問題是由於每個虛擬機器執行個體每秒 100 次查詢的中繼資料伺服器速率限制所致。這項限制無法調整。如要解決這個問題,請稍候幾秒鐘,然後重試連線。
為避免日後發生類似問題,請嘗試下列做法:
預設 OS 登入中繼資料項目
Compute Engine 定義了一組預設中繼資料項目,可提供 OS 登入資訊。預設中繼資料一律由伺服器定義及設定。預設中繼資料鍵會區分大小寫。
下表說明可查詢的項目。
相對於 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..." } } }] }
在大多數發行版本中,您也可以執行
getent passwd username
或getent passwd uid
等 Unix 指令,擷取設定檔資訊。如要擷取使用者的 SSH 金鑰,您也可以執行
/usr/bin/google_authorized_keys USERNAME
。如果沒有傳回任何金鑰,表示使用者可能沒有登入 VM 的必要權限。正在檢查登入權限
如要查看登入和管理層級權限,您必須提供
policy=login&email=LOGIN_NAME
查詢參數。查詢使用者設定檔,取得
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"
舉例來說,您可以查詢前一節中檢視的使用者
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/
如果找不到服務帳戶,輸出內容會留空。
後續步驟
- 進一步瞭解 OS Login。
- 瞭解如何使用 SSH 連線至 Compute Engine 的 Linux VM。
- 如需逐步操作說明,請參閱下列其中一項:
- 查看管理機構中 OS Login
除非另有註明,否則本頁面中的內容是採用創用 CC 姓名標示 4.0 授權,程式碼範例則為阿帕契 2.0 授權。詳情請參閱《Google Developers 網站政策》。Java 是 Oracle 和/或其關聯企業的註冊商標。
上次更新時間:2025-09-04 (世界標準時間)。
-