Dokumen ini menjelaskan error umum yang mungkin Anda alami saat terhubung ke instance virtual machine (VM) menggunakan SSH, cara mengatasi error, dan metode untuk mendiagnosis koneksi SSH yang gagal.
Alat pemecahan masalah SSH
Gunakan alat pemecahan masalah SSH untuk membantu menentukan alasan di balik gagalnya koneksi SSH. Alat pemecahan masalah akan melakukan pengujian berikut untuk memeriksa penyebab gagalnya koneksi SSH:
- Pengujian izin pengguna: Memeriksa apakah Anda memiliki izin IAM yang diperlukan untuk terhubung ke VM menggunakan SSH.
- Pengujian konektivitas jaringan: Memeriksa apakah VM terhubung ke jaringan atau tidak.
- Pengujian status instance VM: Memeriksa status CPU VM untuk mengetahui apakah VM sedang berjalan atau tidak.
- Pengujian setelan VPC: Memeriksa port SSH default.
Menjalankan alat pemecahan masalah
Anda dapat menggunakan konsol Google Cloud atau Google Cloud CLI untuk memeriksa masalah jaringan dan error izin pengguna yang mungkin menyebabkan kegagalan koneksi SSH.
Konsol
Setelah koneksi SSH gagal, Anda memiliki opsi untuk Mencoba kembali koneksi, atau Memecahkan masalah koneksi menggunakan alat pemecahan masalah SSH-in-browser.
Untuk menjalankan alat pemecahan masalah, klik Memecahkan masalah.
gcloud
Jalankan alat pemecahan masalah menggunakan
perintah gcloud compute ssh
:
gcloud compute ssh VM_NAME \ --troubleshoot
Ganti VM_NAME
dengan nama VM yang tidak dapat Anda hubungkan.
Alat ini akan meminta Anda memberikan izin untuk melakukan pengujian pemecahan masalah.
Meninjau hasil
Setelah menjalankan alat pemecahan masalah, lakukan hal berikut:
- Tinjau hasil pengujian untuk memahami alasan koneksi SSH VM tidak berfungsi.
- Selesaikan koneksi SSH dengan melakukan langkah-langkah perbaikan yang disediakan oleh alat ini.
Coba hubungkan kembali ke VM.
Jika koneksi tidak berhasil, coba pemecahan masalah secara manual dengan melakukan hal berikut:
Error SSH umum
Berikut adalah contoh error umum yang mungkin Anda alami saat menggunakan SSH untuk terhubung ke VM Compute Engine.
Error SSH di Browser
Error Tidak Sah 401
Error berikut mungkin terjadi saat Anda terhubung ke VM menggunakan SSH-in-browser dari konsol Google Cloud:
Unauthorized Error 401
Error ini terjadi jika pengguna Anda adalah bagian dari organisasi yang dikelola dari dalam Google Workspace dan ada pembatasan aktif dalam kebijakan Workspace yang mencegah pengguna mengakses SSH-in-browser dan konsol serial di dalam Google Cloud.
Untuk mengatasi masalah ini, minta admin Google Workspace melakukan hal berikut:
Pastikan bahwa Google Cloud telah diaktifkan untuk organisasi.
Jika Google Cloud dinonaktifkan, aktifkan, lalu coba hubungkan lagi.
Pastikan bahwa beberapa layanan yang tidak dikontrol secara individual telah diaktifkan.
Jika layanan ini dinonaktifkan, aktifkan, lalu coba hubungkan lagi.
Jika masalah berlanjut setelah mengaktifkan setelan Google Cloud di Google Workspace, lakukan langkah berikut:
Catat traffic jaringan dalam file HTTP Archive Format (HAR) yang dimulai dari saat Anda memulai koneksi SSH SSH-in-Browser.
Buat kasus Cloud Customer Care dan sertakan file HAR.
Tidak Dapat Terhubung, Mencoba Kembali...
Error berikut mungkin terjadi saat Anda memulai sesi SSH:
Could not connect, retrying ...
Untuk menyelesaikan masalah ini, lakukan tindakan berikut:
Setelah VM selesai melakukan booting, coba lagi koneksi. Jika koneksi tidak berhasil, pastikan bahwa VM tidak melakukan booting dalam mode darurat dengan menjalankan perintah berikut:
gcloud compute instances get-serial-port-output VM_NAME \ | grep "emergency mode"
Jika VM melakukan booting dalam mode darurat, pecahkan masalah proses startup VM untuk mengidentifikasi di mana proses booting gagal.
Pastikan layanan
google-guest-agent.service
sudah berjalan dengan menjalankan perintah berikut di konsol serial.systemctl status google-guest-agent.service
Jika layanan dinonaktifkan, aktifkan dan mulai layanan dengan menjalankan perintah berikut:
systemctl enable google-guest-agent.service systemctl start google-guest-agent.service
Pastikan skrip Agen Google Linux telah diinstal dan berjalan. Untuk mengetahui informasi selengkapnya, lihat Menentukan Status Agen Google. Jika Agen Google Linux tidak diinstal, instal ulang agen tersebut.
Pastikan Anda memiliki peran yang diperlukan untuk terhubung ke VM. Jika VM Anda menggunakan Login OS, lihat Menetapkan peran IAM Login OS. Jika VM tidak menggunakan Login OS, Anda memerlukan peran compute instance admin atau peran pengguna akun layanan (jika VM disiapkan untuk dijalankan sebagai akun layanan). Peran diperlukan untuk memperbarui instance atau metadata kunci SSH project.
Pastikan ada aturan firewall yang mengizinkan akses SSH dengan menjalankan perintah berikut:
gcloud compute firewall-rules list | grep "tcp:22"
Pastikan ada rute default ke Internet (atau ke bastion host). Untuk mengetahui informasi selengkapnya, lihat Memeriksa rute.
Pastikan volume root tidak kehabisan kapasitas disk. Untuk mengetahui informasi lebih lanjut, lihat Memecahkan masalah kapasitas disk yang penuh dan pengubahan ukuran disk.
Pastikan VM tidak kehabisan memori, dengan menjalankan perintah berikut:
gcloud compute instances get-serial-port-output instance-name \ | grep "Out of memory: Kill process" - e "Kill process" -e "Memory cgroup out of memory" -e "oom"
Jika VM kehabisan memori, hubungkan ke konsol serial untuk memecahkan masalah.
Error Linux
Izin ditolak (publickey)
Error berikut mungkin terjadi saat Anda terhubung ke VM:
USERNAME@VM_EXTERNAL_IP: Permission denied (publickey).
Error ini dapat terjadi karena beberapa alasan. Berikut adalah beberapa penyebab paling umum dari error ini:
Anda menggunakan kunci SSH yang disimpan dalam metadata untuk menyambung ke VM yang mengaktifkan Login OS. Jika Login OS diaktifkan di project Anda, VM Anda tidak menerima kunci SSH yang disimpan dalam metadata. Jika Anda tidak yakin apakah Login OS sudah diaktifkan, lihat Memeriksa bahwa Login OS sudah dikonfigurasi.
Untuk mengatasi masalah ini, coba salah satu langkah berikut:
- Hubungkan ke VM Anda menggunakan konsol Google Cloud atau Google Cloud CLI. Untuk mengetahui informasi selengkapnya, lihat Menghubungkan ke VM.
- Tambahkan kunci SSH ke Login OS. Untuk mengetahui informasi selengkapnya, lihat Menambahkan kunci ke VM yang menggunakan Login OS.
- Nonaktifkan Login OS. Untuk mengetahui informasi selengkapnya, lihat Menonaktifkan Login OS.
Anda menggunakan kunci SSH yang disimpan di profil Login OS untuk terhubung ke VM yang tidak mengaktifkan Login OS. Jika Anda menonaktifkan Login OS, VM Anda tidak akan menerima kunci SSH yang disimpan di profil Login OS Anda. Jika Anda tidak yakin apakah Login OS sudah diaktifkan, lihat Memeriksa bahwa Login OS sudah dikonfigurasi.
Untuk mengatasi masalah ini, coba salah satu langkah berikut:
- Hubungkan ke VM Anda menggunakan konsol Google Cloud atau Google Cloud CLI. Untuk mengetahui informasi selengkapnya, lihat Menghubungkan ke VM.
- Aktifkan Login OS. Untuk mengetahui informasi selengkapnya, lihat Mengaktifkan Login OS.
- Tambahkan kunci SSH ke metadata. Untuk mengetahui informasi selengkapnya, lihat Menambahkan kunci SSH ke VM yang menggunakan kunci SSH berbasis metadata.
VM telah mengaktifkan Login OS, tetapi Anda tidak memiliki izin IAM yang memadai untuk menggunakan Login OS. Untuk terhubung ke VM yang mengaktifkan Login OS, Anda harus memiliki izin yang diperlukan untuk Login OS. Jika Anda tidak yakin apakah Login OS sudah diaktifkan, lihat Memeriksa bahwa Login OS sudah dikonfigurasi.
Untuk mengatasi masalah ini, berikan peran IAM Login OS yang diperlukan.
Kunci Anda sudah tidak berlaku dan Compute Engine menghapus file
~/.ssh/authorized_keys
Anda. Jika Anda menambahkan kunci SSH secara manual ke VM, lalu terhubung ke VM menggunakan konsol Google Cloud, Compute Engine akan membuat pasangan kunci baru untuk koneksi Anda. Setelah masa berlaku pasangan kunci baru berakhir, Compute Engine akan menghapus file~/.ssh/authorized_keys
Anda di VM, yang mencakup kunci SSH yang ditambahkan secara manual.Untuk mengatasi masalah ini, coba salah satu langkah berikut:
- Hubungkan ke VM Anda menggunakan konsol Google Cloud atau Google Cloud CLI. Untuk mengetahui informasi selengkapnya, lihat Menghubungkan ke VM.
- Tambahkan kembali kunci SSH ke metadata. Untuk mengetahui informasi selengkapnya, lihat Menambahkan kunci SSH ke VM yang menggunakan kunci SSH berbasis metadata.
Anda terhubung menggunakan alat pihak ketiga dan perintah SSH Anda salah dikonfigurasi. Jika Anda terhubung menggunakan perintah
ssh
, tetapi tidak menentukan jalur ke kunci pribadi atau menentukan jalur yang salah ke kunci pribadi, VM akan menolak koneksi Anda.Untuk mengatasi masalah ini, coba salah satu langkah berikut:
- Jalankan perintah berikut:
ssh -i PATH_TO_PRIVATE_KEY USERNAME@EXTERNAL_IP
Ganti kode berikut:PATH_TO_PRIVATE_KEY
: jalur ke file kunci SSH pribadi Anda.USERNAME
: nama pengguna yang terhubung ke instance. Jika Anda mengelola kunci SSH di metadata, nama pengguna adalah nama yang Anda tentukan saat membuat kunci SSH. Untuk akun Login OS, nama pengguna ditetapkan di profil Google Anda.EXTERNAL_IP
: Alamat IP eksternal untuk VM Anda.
- Hubungkan ke VM Anda menggunakan konsol Google Cloud atau Google Cloud CLI. Saat Anda menggunakan alat ini untuk terhubung, Compute Engine akan mengelola pembuatan kunci untuk Anda. Untuk mengetahui informasi selengkapnya, lihat Menghubungkan ke VM.
- Jalankan perintah berikut:
Lingkungan tamu VM Anda tidak berjalan. Jika ini adalah pertama kalinya Anda terhubung ke VM dan lingkungan tamu tidak berjalan, VM mungkin menolak permintaan koneksi SSH Anda.
Untuk menyelesaikan masalah ini, lakukan tindakan berikut:
- Mulai ulang VM.
- Di konsol Google Cloud, periksa log startup sistem dalam output port serial untuk menentukan apakah lingkungan tamu sedang berjalan atau tidak. Untuk mengetahui informasi selengkapnya, lihat Memvalidasi lingkungan tamu.
- Jika lingkungan tamu tidak berjalan, instal lingkungan tamu secara manual dengan meng-clone boot disk VM dan menggunakan skrip startup.
OpenSSH Daemon (
sshd
) tidak berjalan atau tidak dikonfigurasi dengan benar.sshd
menyediakan akses jarak jauh yang aman ke sistem melalui protokol SSH. Jika konfigurasinya salah atau tidak berjalan, Anda tidak dapat terhubung ke VM melalui SSH.Untuk mengatasi masalah ini, coba satu atau beberapa langkah berikut:
Tinjau panduan pengguna untuk sistem operasi Anda guna memastikan bahwa
sshd_config
telah disiapkan dengan benar.Pastikan Anda memiliki setelan izin dan kepemilikan yang diperlukan untuk hal berikut:
- Direktori
$HOME
dan$HOME/.ssh
- File
$HOME/.ssh/authorized_keys
Kepemilikan
Lingkungan tamu menyimpan kunci publik SSH yang diotorisasi dalam file
$HOME/.ssh/authorized_keys
. Pemilik direktori$HOME
dan$HOME/.ssh
serta file$HOME/.ssh/authorized_keys
harus sama dengan pengguna yang terhubung ke VM.Izin
Lingkungan tamu memerlukan izin Linux berikut:
Jalur Izin /home
0755
$HOME
0700
atau0750
atau0755
*$HOME/.ssh
0700
$HOME/.ssh/authorized_keys
0600
* Untuk mengetahui opsi mana yang merupakan izin default yang benar untuk direktori
$HOME
Anda, lihat dokumentasi resmi untuk distribusi Linux tertentu Anda.
Atau, Anda dapat membuat VM baru berdasarkan image yang sama dan memeriksa izin defaultnya untuk
$HOME
.Untuk mempelajari cara mengubah izin dan kepemilikan, baca artikel tentang
chmod
danchown
.- Direktori
Mulai ulang
sshd
dengan menjalankan perintah berikut:systemctl restart sshd.service
Periksa apakah terdapat error dalam status dengan menjalankan perintah berikut:
systemctl status sshd.service
Output status dapat berisi informasi seperti kode keluar, alasan kegagalan, dll. Anda dapat menggunakan detail ini untuk pemecahan masalah lebih lanjut.
Booting disk VM penuh. Saat koneksi SSH tersambung, lingkungan tamu akan menambahkan kunci SSH publik sesi ke file
~/.ssh/authorized_keys
. Jika disk penuh, koneksi akan gagal.Untuk mengatasi masalah ini, lakukan satu atau beberapa langkah berikut:
- Pastikan boot disk sudah penuh dengan
melakukan proses debug dengan konsol serial untuk mengidentifikasi
no space left errors
. - Ubah ukuran disk.
- Jika Anda mengetahui file mana yang menggunakan kapasitas disk,
buat skrip startup yang menghapus
file yang tidak diperlukan dan mengosongkan ruang penyimpanan. Setelah VM dimulai dan Anda terhubung dengannya, hapus metadata
startup-script
.
- Pastikan boot disk sudah penuh dengan
melakukan proses debug dengan konsol serial untuk mengidentifikasi
Izin atau kepemilikan pada
$HOME
,$HOME/.ssh
, atau$HOME/.ssh/authorized_keys
salah.Kepemilikan
Lingkungan tamu menyimpan kunci publik SSH yang diotorisasi dalam file
$HOME/.ssh/authorized_keys
. Pemilik direktori$HOME
dan$HOME/.ssh
serta file$HOME/.ssh/authorized_keys
harus sama dengan pengguna yang terhubung ke VM.Izin
Lingkungan tamu memerlukan izin Linux berikut:
Jalur Izin /home
0755
$HOME
0700
atau0750
atau0755
*$HOME/.ssh
0700
$HOME/.ssh/authorized_keys
0600
* Untuk mengetahui opsi mana yang merupakan izin default yang benar untuk direktori
$HOME
Anda, lihat dokumentasi resmi untuk distribusi Linux tertentu Anda.
Atau, Anda dapat membuat VM baru berdasarkan image yang sama dan memeriksa izin defaultnya untuk
$HOME
.Untuk mempelajari cara mengubah izin dan kepemilikan, baca artikel tentang
chmod
danchown
.
Sambungan gagal
Error berikut dapat terjadi saat Anda terhubung ke VM dari konsol Google Cloud, gcloud CLI, host bastion, atau klien lokal:
Konsol Google Cloud:
Connection Failed We are unable to connect to the VM on port 22.
gcloud CLI:
ERROR: (gcloud.compute.ssh) [/usr/bin/ssh] exited with return code [255].
Host bastion atau klien lokal:
port 22: Connection timed out.
port 22: Connection refused
Error ini dapat terjadi karena beberapa alasan. Berikut adalah beberapa penyebab paling umum error tersebut:
VM sedang melakukan booting dan
sshd
belum berjalan. Anda tidak dapat terhubung ke VM sebelum VM berjalan.Untuk mengatasi masalah ini, tunggu hingga VM selesai melakukan booting dan coba sambungkan kembali.
sshd
berjalan di port kustom. Jika mengonfigurasisshd
untuk berjalan di port selain port 22, Anda tidak akan dapat terhubung ke VM.Untuk mengatasi masalah ini, buat aturan firewall khusus yang mengizinkan traffic
tcp
di port tempatsshd
Anda berjalan menggunakan perintah berikut:gcloud compute firewall-rules create FIREWALL_NAME \ --allow tcp:PORT_NUMBER
Untuk mengetahui informasi selengkapnya mengenai pembuatan aturan firewall kustom, lihat Membuat aturan firewall.
Aturan firewall SSH tidak ada atau tidak mengizinkan traffic dari IAP atau internet publik. Koneksi SSH ditolak jika aturan firewall tidak mengizinkan koneksi dari IAP atau traffic masuk TCP untuk rentang IP
0.0.0.0/0
.Untuk menyelesaikan masalah ini, lakukan salah satu tindakan berikut:
Jika Anda menggunakan Identity-Aware Proxy (IAP) untuk penerusan TCP, perbarui aturan firewall kustom agar dapat menerima traffic dari IAP, lalu periksa izin IAM Anda.
- Perbarui aturan firewall kustom Anda untuk mengizinkan traffic dari
35.235.240.0/20
, rentang alamat IP yang digunakan IAP untuk penerusan TCP. Untuk mengetahui informasi selengkapnya, lihat Membuat aturan firewall. - Berikan izin untuk menggunakan penerusan TCP IAP, jika Anda belum melakukannya.
- Perbarui aturan firewall kustom Anda untuk mengizinkan traffic dari
Jika tidak menggunakan IAP, perbarui aturan firewall kustom untuk mengizinkan traffic SSH masuk.
- Perbarui aturan firewall kustom Anda untukMengizinkan koneksi ssh masuk ke VM.
Koneksi SSH gagal setelah Anda mengupgrade kernel VM. VM mungkin mengalami kernel panic setelah update kernel, yang menyebabkan VM menjadi tidak dapat diakses.
Untuk menyelesaikan masalah ini, lakukan tindakan berikut:
- Pasang disk ke VM lain.
- Update file
grub.cfg
untuk menggunakan kernel versi sebelumnya. - Sertakan disk ke VM yang tidak responsif.
- Pastikan bahwa status VM adalah
RUNNING
dengan menggunakan perintahgcloud compute instances describe
. - Instal ulang kernel.
- Mulai ulang VM.
Atau, jika Anda membuat snapshot boot disk sebelum mengupgrade VM, gunakan snapshot tersebut untuk membuat VM.
OpenSSH Daemon (
sshd
) tidak berjalan atau tidak dikonfigurasi dengan benar.sshd
menyediakan akses jarak jauh yang aman ke sistem melalui protokol SSH. Jika konfigurasinya salah atau tidak berjalan, Anda tidak dapat terhubung ke VM melalui SSH.Untuk mengatasi masalah ini, coba satu atau beberapa langkah berikut:
Tinjau panduan pengguna untuk sistem operasi Anda guna memastikan bahwa
sshd_config
telah disiapkan dengan benar.Pastikan Anda memiliki setelan izin dan kepemilikan yang diperlukan untuk hal berikut:
- Direktori
$HOME
dan$HOME/.ssh
- File
$HOME/.ssh/authorized_keys
Kepemilikan
Lingkungan tamu menyimpan kunci publik SSH yang diotorisasi dalam file
$HOME/.ssh/authorized_keys
. Pemilik direktori$HOME
dan$HOME/.ssh
serta file$HOME/.ssh/authorized_keys
harus sama dengan pengguna yang terhubung ke VM.Izin
Lingkungan tamu memerlukan izin Linux berikut:
Jalur Izin /home
0755
$HOME
0700
atau0750
atau0755
*$HOME/.ssh
0700
$HOME/.ssh/authorized_keys
0600
* Untuk mengetahui opsi mana yang merupakan izin default yang benar untuk direktori
$HOME
Anda, lihat dokumentasi resmi untuk distribusi Linux tertentu Anda.
Atau, Anda dapat membuat VM baru berdasarkan image yang sama dan memeriksa izin defaultnya untuk
$HOME
.Untuk mempelajari cara mengubah izin dan kepemilikan, baca artikel tentang
chmod
danchown
.- Direktori
Mulai ulang
sshd
dengan menjalankan perintah berikut:systemctl restart sshd.service
Periksa apakah terdapat error dalam status dengan menjalankan perintah berikut:
systemctl status sshd.service
Output status dapat berisi informasi seperti kode keluar, alasan kegagalan, dll. Anda dapat menggunakan detail ini untuk pemecahan masalah lebih lanjut.
VM tidak melakukan booting dan Anda tidak dapat terhubung menggunakan SSH atau konsol serial. Jika VM tidak dapat diakses, OS Anda mungkin rusak. Jika boot disk tidak melakukan booting, Anda dapat mendiagnosis masalah. Jika Anda ingin memulihkan VM yang rusak dan mengambil data, lihat Memulihkan VM yang rusak atau kapasitas boot disk penuh.
VM melakukan booting dalam mode pemeliharaan. Saat melakukan booting dalam mode pemeliharaan, VM tidak menerima koneksi SSH, tetapi Anda dapat terhubung ke konsol serial VM dan login sebagai pengguna root.
Untuk menyelesaikan masalah ini, lakukan tindakan berikut:
Jika Anda belum menetapkan sandi root untuk VM, gunakan skrip startup metadata untuk menjalankan perintah berikut saat melakukan booting:
echo "root:NEW_PASSWORD" | chpasswd
Ganti NEW_PASSWORD` dengan sandi pilihan Anda.
Mulai ulang VM.
Terhubung ke konsol serial VM dan login sebagai pengguna root.
Error tidak terduga
Error berikut mungkin terjadi saat Anda mencoba terhubung ke VM Linux:
Connection Failed You cannot connect to the VM instance because of an unexpected error. Wait a few moments and then try again.
Masalah ini dapat terjadi karena beberapa alasan. Berikut adalah beberapa penyebab umum error tersebut:
-
OpenSSH Daemon (
sshd
) tidak berjalan atau tidak dikonfigurasi dengan benar.sshd
menyediakan akses jarak jauh yang aman ke sistem melalui protokol SSH. Jika konfigurasinya salah atau tidak berjalan, Anda tidak dapat terhubung ke VM melalui SSH.Untuk mengatasi masalah ini, coba satu atau beberapa langkah berikut:
Tinjau panduan pengguna untuk sistem operasi Anda guna memastikan bahwa
sshd_config
telah disiapkan dengan benar.Pastikan Anda memiliki setelan izin dan kepemilikan yang diperlukan untuk hal berikut:
- Direktori
$HOME
dan$HOME/.ssh
- File
$HOME/.ssh/authorized_keys
Kepemilikan
Lingkungan tamu menyimpan kunci publik SSH yang diotorisasi dalam file
$HOME/.ssh/authorized_keys
. Pemilik direktori$HOME
dan$HOME/.ssh
serta file$HOME/.ssh/authorized_keys
harus sama dengan pengguna yang terhubung ke VM.Izin
Lingkungan tamu memerlukan izin Linux berikut:
Jalur Izin /home
0755
$HOME
0700
atau0750
atau0755
*$HOME/.ssh
0700
$HOME/.ssh/authorized_keys
0600
* Untuk mengetahui opsi mana yang merupakan izin default yang benar untuk direktori
$HOME
Anda, lihat dokumentasi resmi untuk distribusi Linux tertentu Anda.
Atau, Anda dapat membuat VM baru berdasarkan image yang sama dan memeriksa izin defaultnya untuk
$HOME
.Untuk mempelajari cara mengubah izin dan kepemilikan, baca artikel tentang
chmod
danchown
.- Direktori
Mulai ulang
sshd
dengan menjalankan perintah berikut:systemctl restart sshd.service
Periksa apakah terdapat error dalam status dengan menjalankan perintah berikut:
systemctl status sshd.service
Output status dapat berisi informasi seperti kode keluar, alasan kegagalan, dll. Anda dapat menggunakan detail ini untuk pemecahan masalah lebih lanjut.
Masalah daemon SSH yang tidak diketahui. Untuk mendiagnosis masalah daemon SSH yang tidak diketahui, periksa log konsol serial untuk menemukan error.
Tergantung pada output log konsol serial, coba selamatkan VM dan perbaiki masalah terkait daemon SSH dengan melakukan tindakan berikut:
- Sertakan disk ke VM Linux lain.
- Hubungkan ke VM yang memiliki disk yang terpasang.
- Pasang disk di dalam OS ke direktori MOUNT_DIR di dalam VM.
- Lihat log terkait SSH,
/var/log/secure
atau/var/log/auth.log
jika ada masalah/error. Jika Anda melihat masalah yang dapat diperbaiki, cobalah untuk memperbaikinya. Jika tidak, buat kasus dukungan dan sertakan log. Lepaskan disk dari OS menggunakan perintah
umount
:cd ~/ umount /mnt
Lepaskan disk dari VM.
Sertakan disk ke VM asli.
Mulai VM.
Gagal terhubung ke backend
Error berikut dapat terjadi saat Anda terhubung ke VM dari konsol Google Cloud atau gcloud CLI:
Konsol Google Cloud:
-- Connection via Cloud Identity-Aware Proxy Failed -- Code: 4003 -- Reason: failed to connect to backend
gcloud CLI:
ERROR: (gcloud.compute.start-iap-tunnel) Error while connecting [4003: 'failed to connect to backend'].
Error ini terjadi saat Anda mencoba menggunakan SSH untuk terhubung ke VM yang tidak memiliki alamat IP publik dan yang belum Anda konfigurasi Identity-Aware Proxy di port 22.
Untuk mengatasi masalah ini, Buat aturan firewall di port 22 yang mengizinkan traffic masuk dari Identity-Aware Proxy.
Kunci host tidak cocok
Error berikut mungkin terjadi saat Anda terhubung ke VM:
Host key for server IP_ADDRESS does not match
Error ini terjadi saat kunci host dalam file ~/.ssh/known_hosts
tidak cocok dengan kunci host VM.
Untuk mengatasi masalah ini, hapus kunci host dari file
~/.ssh/known_hosts
, lalu coba hubungkan lagi.
Nilai metadata terlalu besar
Error berikut mungkin terjadi saat Anda mencoba menambahkan kunci SSH baru ke metadata:
ERROR:"Value for field 'metadata.items[X].value' is too large: maximum size 262144 character(s); actual size NUMBER_OF_CHARACTERS."
Nilai metadata memiliki batas maksimum 256 KB. Untuk mengurangi batasan ini, lakukan salah satu langkah berikut:
- Menghapus kunci SSH yang diduplikasi atau yang sudah tidak berlaku dari metadata project atau instance. Untuk mengetahui informasi selengkapnya, lihat Mengupdate metadata pada VM yang berjalan.
- Gunakan Login OS.
Error Windows
Izin ditolak, coba lagi
Error berikut mungkin terjadi saat Anda terhubung ke VM:
USERNAME@compute.INSTANCE_ID's password: Permission denied, please try again.
Error ini menunjukkan bahwa pengguna yang mencoba terhubung ke VM tidak ada di VM. Berikut adalah beberapa penyebab paling umum dari error ini:
Versi gcloud CLI Anda sudah tidak berlaku
Jika gcloud CLI sudah usang, Anda mungkin mencoba terhubung menggunakan nama pengguna yang belum dikonfigurasi. Untuk mengatasi masalah ini, perbarui gcloud CLI.
Anda mencoba terhubung ke VM Windows yang tidak mengaktifkan SSH.
Untuk mengatasi error ini, tetapkan kunci
enable-windows-ssh
menjadiTRUE
dalam metadata project atau instance. Untuk mengetahui informasi selengkapnya tentang cara menetapkan medata, lihat Menetapkan metadata kustom.
Izin ditolak (publickey,keyboard-interactive)
Error berikut mungkin terjadi saat Anda terhubung ke VM yang tidak mengaktifkan SSH:
Permission denied (publickey,keyboard-interactive).
Untuk mengatasi error ini, tetapkan kunci enable-windows-ssh
menjadi TRUE
dalam metadata project atau instance. Untuk mengetahui informasi selengkapnya tentang cara menetapkan medata, lihat
Menetapkan metadata kustom.
Tidak dapat menjalankan SSH ke instance
Error berikut mungkin terjadi saat Anda terhubung ke VM dari gcloud CLI:
ERROR: (gcloud.compute.ssh) Could not SSH into the instance. It is possible that your SSH key has not propagated to the instance yet. Try running this command again. If you still cannot connect, verify that the firewall and instance are set to accept ssh traffic.
Error ini dapat terjadi karena beberapa alasan. Berikut adalah beberapa penyebab paling umum error tersebut:
Anda mencoba terhubung ke VM Windows yang belum menginstal SSH.
Untuk mengatasi masalah ini, ikuti petunjuk guna Mengaktifkan SSH untuk Windows di VM yang berjalan.
Server OpenSSH (
sshd
) tidak berjalan atau tidak dikonfigurasi dengan benar.sshd
menyediakan akses jarak jauh yang aman ke sistem melalui protokol SSH. Jika konfigurasinya salah atau tidak berjalan, Anda tidak dapat terhubung ke VM melalui SSH.Untuk mengatasi masalah ini, tinjau Konfigurasi Server OpenSSH untuk Windows Server dan Windows untuk memastikan
sshd
disiapkan dengan benar.
Waktu koneksi habis
Koneksi SSH yang kehabisan waktu mungkin disebabkan oleh salah satu hal berikut:
VM belum selesai melakukan booting. Tunggu beberapa saat sampai VM melakukan booting.
Untuk mengatasi masalah ini, tunggu hingga VM selesai melakukan booting dan coba sambungkan kembali.
Paket SSH tidak diinstal. VM Windows mengharuskan Anda menginstal paket
google-compute-engine-ssh
sebelum dapat terhubung menggunakan SSH.Untuk mengatasi masalah ini, instal paket SSH.
Mendiagnosis koneksi SSH yang gagal
Bagian berikut menjelaskan langkah-langkah yang dapat Anda lakukan untuk mendiagnosis penyebab kegagalan koneksi SSH dan langkah-langkah yang dapat dilakukan untuk memperbaiki koneksi Anda.
Sebelum Anda mendiagnosis koneksi SSH yang gagal, selesaikan langkah-langkah berikut:
- Instal Google Cloud CLI atau update ke versi terbaru.
- Jalankan uji konektivitas.
- Jika Anda menggunakan image Linux kustom yang tidak menjalankan lingkungan tamu, Instal lingkungan tamu Linux.
- Jika Anda menggunakan Login OS, lihat Pemecahan Masalah Login OS.
Metode diagnosis untuk VM Linux dan Windows
Menguji konektivitas
Anda mungkin tidak dapat menjalankan SSH ke instance VM karena masalah konektivitas yang tertaut ke firewall, koneksi jaringan, atau akun pengguna. Ikuti langkah-langkah di bagian ini untuk mengidentifikasi masalah konektivitas apa pun.
Periksa aturan firewall Anda
Compute Engine menyediakan setiap project dengan kumpulan aturan firewall default yang mengizinkan traffic SSH. Jika Anda tidak dapat mengakses instance, gunakan alat command line gcloud compute
untuk memeriksa daftar firewall dan memastikan bahwa aturan default-allow-ssh
selalu ada.
Di workstation lokal, jalankan perintah berikut:
gcloud compute firewall-rules list
Jika aturan firewall tidak ada, tambahkan kembali:
gcloud compute firewall-rules create default-allow-ssh \ --allow tcp:22
Untuk melihat semua data yang terkait dengan aturan firewall default-allow-ssh
dalam project Anda, gunakan perintah gcloud compute firewall-rules describe
:
gcloud compute firewall-rules describe default-allow-ssh \ --project=project-id
Untuk mengetahui informasi lebih lanjut tentang aturan firewall, lihat Aturan firewall di Google Cloud.
Menguji koneksi jaringan
Untuk memastikan bahwa koneksi jaringan berfungsi, uji handshake TCP:
Dapatkan
natIP
eksternal untuk VM Anda:gcloud compute instances describe VM_NAME \ --format='get(networkInterfaces[0].accessConfigs[0].natIP)'
Ganti
VM_NAME
dengan nama VM yang tidak dapat Anda hubungkan.Uji koneksi jaringan ke VM dari workstation Anda:
Linux, Windows 2019/2022, dan macOS
curl -vso /dev/null --connect-timeout 5 EXTERNAL_IP:PORT_NUMBER
Ganti kode berikut:
EXTERNAL_IP
: alamat IP eksternal yang Anda peroleh pada langkah sebelumnyaPORT_NUMBER
: nomor port
Jika handshake TCP berhasil, output-nya akan mirip dengan berikut ini:
Expire in 0 ms for 6 (transfer 0x558b3289ffb0) Expire in 5000 ms for 2 (transfer 0x558b3289ffb0) Trying 192.168.0.4... TCP_NODELAY set Expire in 200 ms for 4 (transfer 0x558b3289ffb0) Connected to 192.168.0.4 (192.168.0.4) port 443 (#0) > GET / HTTP/1.1 > Host: 192.168.0.4:443 > User-Agent: curl/7.64.0 > Accept: */* > Empty reply from server Connection #0 to host 192.168.0.4 left intact
Baris
Connected to
menunjukkan handshake TCP berhasil.Windows 2012 dan 2016
PS C:> New-Object System.Net.Sockets.TcpClient('EXTERNAL_IP',PORT_NUMBER)
Ganti kode berikut:
EXTERNAL_IP
: IP eksternal yang Anda peroleh pada langkah sebelumnyaPORT_NUMBER
: nomor port
Jika handshake TCP berhasil, output-nya akan mirip dengan berikut ini:
Available : 0 Client : System.Net.Sockets.Socket Connected : True ExclusiveAddressUse : False ReceiveBufferSize : 131072 SendBufferSize : 131072 ReceiveTimeout : 0 SendTimeout : 0 LingerState : System.Net.Sockets.LingerOption NoDelay : False
Baris
Connected: True
menunjukkan handshake TCP berhasil.
Jika handshake TCP berhasil diselesaikan, maka aturan firewall software tidak akan memblokir koneksi, OS akan meneruskan paket dengan benar, dan server akan memproses di port tujuan. Jika handshake TCP berhasil diselesaikan, tetapi VM tidak menerima koneksi SSH, masalahnya mungkin terletak pada daemon sshd
yang salah dikonfigurasi atau tidak berjalan dengan benar. Tinjau
panduan pengguna untuk sistem operasi Anda guna memastikan bahwa sshd_config
telah disiapkan dengan benar.
Untuk menjalankan uji konektivitas guna menganalisis konfigurasi jalur jaringan VPC antara dua VM dan memeriksa apakah konfigurasi terprogram harus mengizinkan traffic, lihat Memeriksa aturan firewall yang salah dikonfigurasi di Google Cloud.
Terhubung sebagai pengguna yang berbeda
Masalah yang mencegah Anda login mungkin terbatas pada akun
pengguna Anda. Misalnya, izin di file ~/.ssh/authorized_keys
pada instance mungkin tidak ditetapkan dengan benar untuk pengguna.
Coba login sebagai pengguna lain menggunakan gcloud CLI dengan menentukan ANOTHER_USERNAME
dengan permintaan SSH.
Gcloud CLI memperbarui metadata project untuk menambahkan pengguna baru dan mengizinkan akses SSH.
gcloud compute ssh ANOTHER_USERNAME@VM_NAME
Ganti kode berikut:
ANOTHER_USERNAME
adalah nama pengguna selain nama pengguna Anda sendiriVM_NAME
adalah nama VM yang ingin Anda hubungkan
Men-debug masalah menggunakan konsol serial
Sebaiknya Anda meninjau log dari konsol serial untuk mengetahui error koneksi. Anda dapat mengakses konsol serial sebagai pengguna root dari workstation lokal melalui browser. Pendekatan ini berguna ketika Anda tidak dapat login dengan SSH, atau jika instance tidak memiliki koneksi ke jaringan. Konsol serial tetap dapat diakses dalam kedua situasi ini.
Untuk login ke konsol serial VM dan memecahkan masalah terkait VM, ikuti langkah-langkah berikut:
Aktifkan akses interaktif ke konsol serial VM.
Untuk VM Linux, ubah sandi root, lalu tambahkan skrip startup berikut ke VM Anda:
echo root:PASSWORD | chpasswd
Ganti PASSWORD dengan sandi pilihan Anda.
Gunakan konsol serial untuk terhubung ke VM.
Untuk VM Linux, setelah Anda selesai men-debug semua error, nonaktifkan login akun root:
sudo passwd -l root
Metode diagnosis untuk VM Linux
Memeriksa instance VM tanpa menonaktifkannya
Anda mungkin memiliki instance yang tidak dapat dihubungkan, tetapi tetap menyalurkan traffic produksi dengan benar. Dalam hal ini, Anda dapat memeriksa disk tanpa mengganggu instance.
Untuk memeriksa dan memecahkan masalah disk:
- Cadangkan boot disk Anda dengan membuat snapshot disk.
- Buat persistent disk reguler dari snapshot tersebut.
- Buat instance sementara.
- Sertakan dan pasang persistent disk reguler ke instance sementara yang baru.
Prosedur ini akan membuat jaringan terisolasi yang hanya mengizinkan koneksi SSH. Penyiapan ini mencegah konsekuensi yang tidak diinginkan dari instance yang di-clone yang mengganggu layanan produksi Anda.
Buat jaringan VPC baru untuk menghosting instance yang di-clone:
gcloud compute networks create debug-network
Ganti
NETWORK_NAME
dengan nama yang ingin Anda gunakan untuk jaringan baru.Tambahkan aturan firewall untuk mengizinkan koneksi SSH ke jaringan:
gcloud compute firewall-rules create debug-network-allow-ssh \ --network debug-network \ --allow tcp:22
Buat snapshot boot disk.
gcloud compute disks snapshot BOOT_DISK_NAME \ --snapshot-names debug-disk-snapshot
Ganti
BOOT_DISK_NAME
dengan nama boot disk.Buat disk baru dengan snapshot yang baru saja Anda buat:
gcloud compute disks create example-disk-debugging \ --source-snapshot debug-disk-snapshot
Buat instance proses debug baru tanpa alamat IP eksternal:
gcloud compute instances create debugger \ --network debug-network \ --no-address
Sertakan disk proses debug ke instance:
gcloud compute instances attach-disk debugger \ --disk example-disk-debugging
Ikuti petunjuk untuk Terhubung ke VM menggunakan bastion host.
Setelah Anda login ke instance debugger, pecahkan masalah instance tersebut. Misalnya, Anda dapat melihat log instance:
sudo su -
mkdir /mnt/VM_NAME
mount /dev/disk/by-id/scsi-0Google_PersistentDisk_example-disk-debugging /mnt/VM_NAME
cd /mnt/VM_NAME/var/log
# Identify the issue preventing ssh from working ls
Ganti
VM_NAME
dengan nama VM yang tidak dapat Anda hubungkan.
Menggunakan skrip startup
Jika penjelasan sebelumnya tidak ada satu pun yang membantu, Anda dapat membuat skrip startup untuk mengumpulkan informasi tepat setelah instance dimulai. Ikuti petunjuk untuk menjalankan skrip startup.
Setelah itu, Anda juga harus mereset instance sebelum metadata diterapkan menggunakan gcloud compute instances reset
.
Atau, Anda juga dapat membuat ulang instance dengan menjalankan skrip startup diagnostik:
Jalankan
gcloud compute instances delete
dengan flag--keep-disks
.gcloud compute instances delete VM_NAME \ --keep-disks boot
Ganti
VM_NAME
dengan nama VM yang tidak dapat Anda hubungkan.Tambahkan instance baru dengan disk yang sama dan tentukan skrip startup Anda.
gcloud compute instances create NEW_VM_NAME \ --disk name=BOOT_DISK_NAME,boot=yes \ --metadata startup-script-url URL
Ganti kode berikut:
NEW_VM_NAME
adalah nama VM baru yang Anda buatBOOT_DISK_NAME
adalah nama boot disk dari VM yang tidak dapat Anda hubungkanURL
adalah URL Cloud Storage ke skrip, baik dalam formatgs://BUCKET/FILE
maupunhttps://storage.googleapis.com/BUCKET/FILE
.
Menggunakan disk Anda pada instance baru
Jika masih perlu memulihkan data dari persistent boot disk, Anda dapat melepas boot disk, lalu menyertakan disk tersebut sebagai disk sekunder pada instance baru.
Hapus VM yang tidak dapat Anda hubungkan dan pertahankan boot disk-nya:
gcloud compute instances delete VM_NAME \ --keep-disks=boot
Ganti
VM_NAME
dengan nama VM yang tidak dapat Anda hubungkan.Buat VM baru dengan boot disk VM lama. Tentukan nama boot disk VM yang baru saja Anda hapus.
Hubungkan ke VM baru Anda menggunakan SSH:
gcloud compute ssh NEW_VM_NAME
Ganti
NEW_VM_NAME
dengan nama VM baru Anda.
Memeriksa apakah kapasitas boot disk VM penuh atau tidak
VM Anda mungkin tidak dapat diakses jika boot disk-nya penuh. Skenario ini mungkin sulit untuk dipecahkan masalahnya karena indikasinya tidak selalu jelas apakah masalah konektivitas VM disebabkan oleh kapasitas boot disk yang penuh atau tidak. Untuk mengetahui informasi selengkapnya tentang skenario ini, lihat Memecahkan masalah VM yang tidak dapat diakses karena kapasitas boot disk penuh.
Metode diagnosis untuk VM Windows
Mereset metadata SSH
Jika Anda tidak dapat terhubung ke VM Windows menggunakan SSH, coba hapus setelan kunci metadata enable-windows-ssh
dan aktifkan kembali SSH untuk Windows.
Tetapkan kunci metadata
enable-windows-ssh
menjadiFALSE
. Untuk mengetahui informasi mengenai cara menetapkan metadata, lihat Menetapkan metadata kustom.Tunggu beberapa detik hingga perubahan diterapkan.
Menghubungkan ke VM menggunakan RDP
Jika Anda tidak dapat mendiagnosis dan menyelesaikan penyebab kegagalan koneksi SSH ke VM Windows, hubungkan menggunakan RDP.
Setelah Anda membuat koneksi ke VM, tinjau Log OpenSSH.
Men-debug masalah SSH dengan gcpdiag
gcpdiag
adalah alat open source. Ini bukan produk Google Cloud yang didukung secara resmi.
Anda dapat menggunakan alat gcpdiag
untuk membantu mengidentifikasi dan memperbaiki masalah project Google Cloud. Untuk mengetahui informasi selengkapnya, lihat
project gcpdiag di GitHub.
- Status VM: Memeriksa apakah VM berjalan dan memiliki resource yang memadai (CPU, memori, penyimpanan 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.
Konsol Google Cloud
- 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.
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 check_os_login=OS_LOGIN_ENABLED
--parameter local_user=LOCAL_USER \
--parameter check_ssh_in_browser=CHECK_SSH_IN_BROWSER
Docker
Anda dapat
menjalankan gcpdiag
menggunakan wrapper yang memulai gcpdiag
dalam
penampung Docker. Docker atau
Podman harus diinstal.
- 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 check_os_login=OS_LOGIN_ENABLED --parameter local_user=LOCAL_USER \ --parameter check_ssh_in_browser=CHECK_SSH_IN_BROWSER
Lihat parameter yang tersedia untuk runbook ini.
Ganti kode berikut:
- 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
- OS_LOGIN_ENABLED: Nilai boolean (true atau false)
yang menunjukkan apakah Login OS digunakan untuk autentikasi SSH. Default:
true
- LOCAL_USER:Pengguna Posix di VM.
- CHECK_SSH_IN_BROWSER:Nilai boolean untuk memeriksa apakah SSH di Browser dapat dilakukan.
Flag yang berguna:
--universe-domain
: Jika berlaku, domain Trusted Partner Sovereign Cloud yang menghosting resource--parameter
atau-p
: Parameter runbook
Untuk mengetahui daftar dan deskripsi semua flag alat gcpdiag
, lihat
petunjuk penggunaan gcpdiag
.
Apa Langkah Selanjutnya?
- Pelajari cara kerja koneksi SSH ke VM Linux di Compute Engine.