Dokumen ini menjelaskan cara memecahkan masalah Login OS menggunakan server metadata. Untuk informasi tentang cara menyiapkan Login OS atau untuk mendapatkan petunjuk langkah demi langkah, lihat Menyiapkan Login OS.
Anda dapat membuat kueri server metadata dari dalam instance virtual machine (VM). Untuk mengetahui informasi selengkapnya, baca Menyimpan dan mengambil metadata instance.
Sebelum memulai
-
Jika Anda belum melakukannya, siapkan autentikasi.
Autentikasi adalah
proses verifikasi identitas Anda untuk mengakses layanan dan API Google Cloud.
Untuk menjalankan kode atau contoh dari lingkungan pengembangan lokal, Anda dapat mengautentikasi ke Compute Engine dengan memilih salah satu opsi berikut:
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
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
- Pulihkan akun yang dihapus.
- Hapus informasi POSIX akun sebelum menghapus akun.
Lihat profil Login OS Anda dengan menjalankan perintah
gcloud compute os-login describe-profile
:gcloud compute os-login describe-profile
Outputnya terlihat mirip dengan yang berikut ini:
name: '00000000000000' posixAccounts: ... sshPublicKeys: ...: fingerprint: ... key: | ssh-rsa AAAAB3NzaC1yc2... name: ... ...
Tinjau output untuk mengidentifikasi kunci SSH yang tidak digunakan.
Hapus kunci yang tidak digunakan dari output menggunakan perintah
gcloud compute os-login ssh-keys remove
:gcloud compute os-login ssh-keys remove --key=KEY
Ganti
KEY
dengan sidik jari kunci atau string kunci.- Terapkan mekanisme percobaan ulang dalam kode aplikasi. Untuk informasi selengkapnya, lihat:
- Menggunakan kembali koneksi SSH yang ada.
- Kirim perintah secara massal untuk mengurangi koneksi SSH dan kueri metadata Login OS.
Buat kueri profil pengguna untuk mendapatkan nilai kolom
name
:curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?username=user_example_com" -H "Metadata-Flavor: Google"
Dalam output, catat
name
.Jalankan perintah
login
berikut menggunakan nilainame
:curl "http://metadata.google.internal/computeMetadata/v1/oslogin/authorize?policy=login&email=LOGIN_NAME" -H "Metadata-Flavor: Google"
- Status VM: Memeriksa apakah VM berjalan dan memiliki resource yang memadai (CPU, memori, disk).
- Izin: Memastikan Anda memiliki izin IAM yang tepat untuk mengonfigurasi kunci SSH.
- Setelan VM: Memverifikasi bahwa kunci SSH dan metadata lainnya dikonfigurasi dengan benar.
- Aturan Jaringan: Meninjau aturan firewall untuk mengonfirmasi bahwa traffic SSH diizinkan.
- OS Tamu: Mencari masalah OS internal yang mungkin memblokir SSH.
- Selesaikan, lalu salin perintah berikut.
- Buka konsol Google Cloud dan aktifkan Cloud Shell. Buka Cloud Console
- Tempel perintah yang disalin.
- Jalankan perintah
gcpdiag
, yang mendownload image dockergcpdiag
, lalu melakukan pemeriksaan diagnostik. Jika berlaku, ikuti petunjuk output untuk memperbaiki pemeriksaan yang gagal. - Salin dan jalankan perintah berikut di workstation lokal Anda.
curl https://gcpdiag.dev/gcpdiag.sh >gcpdiag && chmod +x gcpdiag
- Jalankan perintah
gcpdiag
../gcpdiag runbook gce/ssh \ --parameter project_id=PROJECT_ID \ --parameter name=VM_NAME \ --parameter zone=ZONE \ --parameter principal=PRINCIPAL \ --parameter tunnel_through_iap=IAP_ENABLED \ --parameter local_user=LOCAL_USER \ --parameter check_os_login=CHECK_OS_LOGIN \ --parameter check_ssh_in_browser=CHECK_SSH_IN_BROWSER
- PROJECT_ID: ID project yang berisi resource
- VM_NAME: Nama VM target dalam project Anda.
- ZONE: Zona tempat VM target Anda berada.
- PRINCIPAL: Akun utama pengguna atau akun layanan yang memulai koneksi SSH. Untuk autentikasi berbasis kunci, gunakan pengguna yang diautentikasi oleh alat command line Cloud Shell atau login ke konsol Google Cloud. Untuk peniruan akun layanan, email tersebut harus berupa email akun layanan.
- IAP_ENABLED: Nilai boolean (true atau false)
yang menunjukkan apakah Identity-Aware Proxy digunakan untuk membuat koneksi SSH.
Default:
true
- LOCAL_USER:Pengguna Posix di VM.
- CHECK_OS_LOGIN: Nilai boolean (true atau false) yang menunjukkan apakah Login OS harus digunakan untuk autentikasi SSH.
- CHECK_SSH_IN_BROWSER:Nilai boolean untuk memeriksa apakah SSH di Browser dapat dilakukan.
--universe-domain
: Jika berlaku, domain Trusted Partner Sovereign Cloud yang menghosting resource--parameter
atau-p
: Parameter runbook- Pelajari Login OS lebih lanjut.
- Pelajari cara kerja koneksi SSH ke VM Linux di Compute Engine.
- Untuk petunjuk langkah demi langkah, tinjau salah satu hal berikut:
- Tinjau Mengelola Login OS dalam organisasi
REST
Untuk menggunakan contoh REST API di halaman ini dalam lingkungan pengembangan lokal, gunakan kredensial yang Anda berikan ke gcloud CLI.
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
Untuk informasi selengkapnya, lihat Melakukan autentikasi untuk menggunakan REST dalam dokumentasi autentikasi Google Cloud.
Pesan error umum
Berikut adalah contoh error umum yang mungkin Anda alami saat menggunakan Login OS.
Tidak dapat menemukan nama untuk grup
Pada beberapa VM yang menggunakan Login OS, Anda mungkin menerima pesan error berikut setelah koneksi dibuat:
/usr/bin/id: cannot find name for group ID 123456789
Abaikan pesan error ini. Error ini tidak memengaruhi VM Anda.
Gagal mendapatkan grup
Anda mungkin melihat log yang mirip dengan yang berikut ini saat membuat 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
Log ini menunjukkan bahwa organisasi Anda belum mengonfigurasi grup Linux Login OS. Abaikan pesan ini.
Prasyarat yang gagal
Anda mungkin melihat error yang mirip dengan berikut ini saat terhubung ke VM menggunakan SSH:
ERROR: (gcloud.compute.ssh) FAILED_PRECONDITION: The specified username or UID is not unique within given system ID.
Error ini terjadi saat Login OS mencoba membuat nama pengguna yang sudah ada di dalam organisasi. Hal ini biasa terjadi ketika akun pengguna dihapus dan pengguna baru dengan alamat email yang sama dibuat tidak lama setelahnya. Setelah akun pengguna dihapus, diperlukan waktu hingga 48 jam untuk menghapus informasi POSIX pengguna.
Untuk menyelesaikan masalah ini, lakukan salah satu tindakan berikut:
Argumen tidak valid
Anda mungkin melihat error yang mirip dengan berikut ini saat terhubung ke VM menggunakan SSH atau menggunakan SCP untuk mentransfer file:
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.
Untuk mengatasi error ini, lakukan tindakan berikut:
Untuk mencegah masalah ini terjadi di masa mendatang, tambahkan waktu habis masa berlaku untuk kunci SSH. Kunci yang sudah tidak berlaku akan otomatis dihapus dari profil login Anda 48 jam setelah masa berlakunya habis, atau saat Anda menambahkan kunci baru ke profil Anda.
Kode respons HTTP: 503
Anda mungkin melihat error berikut saat mencoba terhubung ke VM menggunakan SSH:
Failed to validate organization user USERNAME has login permission, got HTTP response code: 503
Masalah ini disebabkan oleh batas kapasitas server metadata sebesar 100 kueri per detik per instance virtual machine. Batas ini tidak dapat disesuaikan. Untuk mengatasi masalah ini, tunggu beberapa detik, lalu coba hubungkan lagi.
Untuk mencegah masalah ini di masa mendatang, coba langkah berikut:
Entri metadata Login OS default
Compute Engine menentukan kumpulan entri metadata default yang menyajikan informasi Login OS. Metadata default selalu ditentukan dan disetel oleh server. Kunci metadata default peka huruf besar/kecil.
Tabel berikut menjelaskan entri yang dapat Anda kueri.
Relatif terhadap http://metadata.google.internal/computeMetadata/v1/
Entri metadata Deskripsi project/attributes/enable-oslogin
Memeriksa apakah Login OS diaktifkan pada project Google Cloud saat ini. instance/attributes/enable-oslogin
Memeriksa apakah Login OS diaktifkan pada VM saat ini. oslogin/users/
Mengambil informasi profil untuk pengguna Login OS. Anda dapat meneruskan parameter kueri seperti username
,uid
,pagesize
, danpagetoken
.oslogin/authorize/
Mengambil setelan izin level login atau administratif untuk pengguna Login OS.
Untuk memeriksa izin, Anda harus menentukan parameter kueri
policy
. Nilai parameter kebijakan harus ditetapkan kelogin
(untuk memeriksa izin login) atauadminLogin
(untuk memeriksa akses sudo).Memeriksa apakah Login OS dikonfigurasi
Gunakan konsol Google Cloud atau Google Cloud CLI untuk membuat kueri metadata guna menentukan apakah Login OS diaktifkan atau tidak. Login OS diaktifkan jika kunci metadata
enable-oslogin
ditetapkan keTRUE
dalam metadata project atau instance. Jika instance dan metadata project ditetapkan, nilai yang ditetapkan dalam metadata instance akan lebih diutamakan.Melihat pengguna Login OS
Untuk melihat informasi profil beberapa pengguna, Anda harus menentukan parameter
pagesize
danpagetoken
. Gantipagesize
danpagetoken
dengan nilai numerik yang diperlukan.curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?pagesize=PAGE_SIZE& pagetoken=PAGE_TOKEN" -H "Metadata-Flavor: Google"
Misalnya, untuk menetapkan
pagesize
menjadi1
danpagetoken
menjadi0
, jalankan perintah berikut:curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?pagesize=1&pagetoken=0" -H "Metadata-Flavor: Google"
Di sebagian besar distribusi, Anda juga dapat menjalankan perintah Unix
getent passwd
untuk mengambil entri sandi bagi pengguna organisasi.Melihat pengguna Login OS tertentu
Untuk melihat informasi profil bagi pengguna tertentu di VM Anda, jalankan perintah berikut:
curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?username=USERNAME" -H "Metadata-Flavor: Google"
Ganti
USERNAME
dengan nama pengguna yang ingin Anda kueri.Misalnya, Anda dapat melakukan permintaan untuk mencari
user_example_com
pengguna. Perintah dan output berikut menunjukkan pemformatan tambahan agar lebih mudah dibaca.curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?username=user_example_com" -H "Metadata-Flavor: Google"
Outputnya mirip dengan yang berikut ini:
{ "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..." } } }] }
Di sebagian besar distribusi, Anda juga dapat menjalankan perintah Unix seperti
getent passwd username
ataugetent passwd uid
untuk mengambil informasi profil.Untuk mengambil kunci SSH bagi pengguna, Anda juga dapat menjalankan
/usr/bin/google_authorized_keys USERNAME
. Jika tidak ada kunci yang ditampilkan, pengguna mungkin tidak memiliki izin yang diperlukan untuk login ke VM.Memeriksa izin login
Untuk melihat izin level login dan administratif, Anda harus memberikan parameter kueri
policy=login&email=LOGIN_NAME
.Misalnya, Anda dapat membuat kueri izin login untuk
user_example_com
pengguna yang dilihat di bagian sebelumnya:curl "http://metadata.google.internal/computeMetadata/v1/oslogin/authorize?policy=login&email=12345678912345" -H "Metadata-Flavor: Google"
Output perintah menunjukkan bahwa pengguna diberi otorisasi untuk login ke VM:
{"success":true}
Memeriksa apakah VM Anda memiliki akun layanan atau tidak
Anda dapat membuat kueri server metadata untuk menemukan akun layanan yang terkait dengan VM Anda. Di VM Anda, jalankan perintah berikut:
curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/" -H "Metadata-Flavor: Google"
Outputnya mirip dengan yang berikut ini:
12345-sa@developer.gserviceaccount.com/ default/
Jika tidak ada akun layanan yang ditemukan, outputnya akan kosong.
Men-debug masalah Login OS dengan gcpdiag
gcpdiag
adalah alat open source. Ini bukan produk Google Cloud yang didukung secara resmi. Anda dapat menggunakan alatgcpdiag
untuk membantu mengidentifikasi dan memperbaiki masalah project Google Cloud. Untuk mengetahui informasi selengkapnya, lihat project gcpdiag di GitHub.Runbook gcpdiag ini menyelidiki potensi penyebab masalah akses SSH di VM Windows dan Linux di Google Cloud. Laporan ini berfokus pada:Konsol Google Cloud
gcpdiag runbook gce/ssh \ --parameter project_id=PROJECT_ID \ --parameter name=VM_NAME \ --parameter zone=ZONE \ --parameter principal=PRINCIPAL \ --parameter tunnel_through_iap=IAP_ENABLED \ --parameter local_user=LOCAL_USER \ --parameter check_os_login=CHECK_OS_LOGIN \ --parameter check_ssh_in_browser=CHECK_SSH_IN_BROWSER
Docker
Anda dapat menjalankan
gcpdiag
menggunakan wrapper yang memulaigcpdiag
dalam penampung Docker. Docker atau Podman harus diinstal.Lihat parameter yang tersedia untuk runbook ini.
Ganti kode berikut:
Flag yang berguna:
Untuk mengetahui daftar dan deskripsi semua flag alat
gcpdiag
, lihat petunjuk penggunaangcpdiag
.Langkah selanjutnya
Kecuali dinyatakan lain, konten di halaman ini dilisensikan berdasarkan Lisensi Creative Commons Attribution 4.0, sedangkan contoh kode dilisensikan berdasarkan Lisensi Apache 2.0. Untuk mengetahui informasi selengkapnya, lihat Kebijakan Situs Google Developers. Java adalah merek dagang terdaftar dari Oracle dan/atau afiliasinya.
Terakhir diperbarui pada 2024-12-22 UTC.
-