Memecahkan masalah error SSH


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.

Luncurkan alat pemecahan masalah SSH.

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:

  1. Tinjau hasil pengujian untuk memahami alasan koneksi SSH VM tidak berfungsi.
  2. Selesaikan koneksi SSH dengan melakukan langkah-langkah perbaikan yang disediakan oleh alat ini.
  3. 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:

  1. Pastikan bahwa Google Cloud telah diaktifkan untuk organisasi.

    Jika Google Cloud dinonaktifkan, aktifkan, lalu coba hubungkan lagi.

  2. 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:

  1. Catat traffic jaringan dalam file HTTP Archive Format (HAR) yang dimulai dari saat Anda memulai koneksi SSH SSH-in-Browser.

  2. 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 ...

Tidak dapat terhubung, mencoba kembali

Untuk menyelesaikan masalah ini, lakukan tindakan berikut:

  1. 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.

  2. 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
    
  3. 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.

  4. 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.

  5. Pastikan ada aturan firewall yang mengizinkan akses SSH dengan menjalankan perintah berikut:

    gcloud compute firewall-rules list | grep "tcp:22"
    
  6. Pastikan ada rute default ke Internet (atau ke bastion host). Untuk mengetahui informasi selengkapnya, lihat Memeriksa rute.

  7. Pastikan volume root tidak kehabisan kapasitas disk. Untuk mengetahui informasi lebih lanjut, lihat Memecahkan masalah kapasitas disk yang penuh dan pengubahan ukuran disk.

  8. 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:

  • 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:

  • 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:

  • 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.
  • 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:

    1. Mulai ulang VM.
    2. 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.
    3. 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 atau 0750 atau 0755 *
      $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 dan chown.

    • 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.
  • 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 atau 0750 atau 0755 *
    $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 dan chown.

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 mengonfigurasi sshd 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 tempat sshd 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.

      1. 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.
      2. Berikan izin untuk menggunakan penerusan TCP IAP, jika Anda belum melakukannya.
    • Jika tidak menggunakan IAP, perbarui aturan firewall kustom untuk mengizinkan traffic SSH masuk.

      1. 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:

    1. Pasang disk ke VM lain.
    2. Update file grub.cfg untuk menggunakan kernel versi sebelumnya.
    3. Sertakan disk ke VM yang tidak responsif.
    4. Pastikan bahwa status VM adalah RUNNING dengan menggunakan perintah gcloud compute instances describe.
    5. Instal ulang kernel.
    6. 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 atau 0750 atau 0755 *
      $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 dan chown.

    • 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:

    1. 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.

    2. Mulai ulang VM.

    3. 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 atau 0750 atau 0755 *
      $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 dan chown.

    • 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:

    1. Sertakan disk ke VM Linux lain.
    2. Hubungkan ke VM yang memiliki disk yang terpasang.
    3. Pasang disk di dalam OS ke direktori MOUNT_DIR di dalam VM.
    4. 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.
    5. Lepaskan disk dari OS menggunakan perintah umount:

      cd ~/
      umount /mnt
      
    6. Lepaskan disk dari VM.

    7. Sertakan disk ke VM asli.

    8. 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:

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 menjadi TRUE 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:

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:

  1. 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.

  2. 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 sebelumnya
    • PORT_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 sebelumnya
    • PORT_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 sendiri
  • VM_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:

  1. Aktifkan akses interaktif ke konsol serial VM.

  2. Untuk VM Linux, ubah sandi root, lalu tambahkan skrip startup berikut ke VM Anda:

    echo root:PASSWORD | chpasswd

    Ganti PASSWORD dengan sandi pilihan Anda.

  3. Gunakan konsol serial untuk terhubung ke VM.

  4. 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:

  1. Cadangkan boot disk Anda dengan membuat snapshot disk.
  2. Buat persistent disk reguler dari snapshot tersebut.
  3. Buat instance sementara.
  4. 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.

  1. 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.

  2. Tambahkan aturan firewall untuk mengizinkan koneksi SSH ke jaringan:

    gcloud compute firewall-rules create debug-network-allow-ssh \
       --network debug-network \
       --allow tcp:22
    
  3. Buat snapshot boot disk.

    gcloud compute disks snapshot BOOT_DISK_NAME \
       --snapshot-names debug-disk-snapshot
    

    Ganti BOOT_DISK_NAME dengan nama boot disk.

  4. Buat disk baru dengan snapshot yang baru saja Anda buat:

    gcloud compute disks create example-disk-debugging \
       --source-snapshot debug-disk-snapshot
    
  5. Buat instance proses debug baru tanpa alamat IP eksternal:

    gcloud compute instances create debugger \
       --network debug-network \
       --no-address
    
  6. Sertakan disk proses debug ke instance:

    gcloud compute instances attach-disk debugger \
       --disk example-disk-debugging
    
  7. Ikuti petunjuk untuk Terhubung ke VM menggunakan bastion host.

  8. 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:

  1. 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.

  2. 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 buat
    • BOOT_DISK_NAME adalah nama boot disk dari VM yang tidak dapat Anda hubungkan
    • URL adalah URL Cloud Storage ke skrip, baik dalam format gs://BUCKET/FILE maupun https://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.

  1. 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.

  2. Buat VM baru dengan boot disk VM lama. Tentukan nama boot disk VM yang baru saja Anda hapus.

  3. 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.

  1. Tetapkan kunci metadata enable-windows-ssh menjadi FALSE. Untuk mengetahui informasi mengenai cara menetapkan metadata, lihat Menetapkan metadata kustom.

    Tunggu beberapa detik hingga perubahan diterapkan.

  2. Mengaktifkan kembali SSH untuk Windows

  3. Hubungkan kembali ke VM.

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.

Runbook gcpdiag ini menyelidiki kemungkinan penyebab masalah koneksi SSH di VM Windows dan Linux di Google Cloud dengan memeriksa area berikut:
  • 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

  1. Selesaikan, lalu salin perintah berikut.
  2. 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
  3. Buka konsol Google Cloud dan aktifkan Cloud Shell.
  4. Buka Cloud Console
  5. Tempel perintah yang disalin.
  6. Jalankan perintah gcpdiag, yang mendownload image docker gcpdiag, lalu melakukan pemeriksaan diagnostik. Jika berlaku, ikuti petunjuk output untuk memperbaiki pemeriksaan yang gagal.

Docker

Anda dapat menjalankan gcpdiag menggunakan wrapper yang memulai gcpdiag dalam penampung Docker. Docker atau Podman harus diinstal.

  1. Salin dan jalankan perintah berikut di workstation lokal Anda.
    curl https://gcpdiag.dev/gcpdiag.sh >gcpdiag && chmod +x gcpdiag
  2. 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 identitas 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:

Untuk mengetahui daftar dan deskripsi semua flag alat gcpdiag, lihat petunjuk penggunaan gcpdiag.

Apa Langkah Selanjutnya?