Memecahkan masalah menggunakan konsol serial


Halaman ini menjelaskan cara mengaktifkan akses interaktif ke konsol serial instance untuk men-debug masalah booting dan jaringan, memecahkan masalah instance yang gagal, berinteraksi dengan GRand Unified Bootloader (GRUB), dan melakukan tugas pemecahan masalah lainnya.

Instance virtual machine (VM) memiliki empat port serial virtual. Berinteraksi dengan port serial mirip dengan menggunakan jendela terminal, dalam hal input dan output tersebut sepenuhnya dalam mode teks dan tidak ada antarmuka grafis atau dukungan mouse. Sistem operasi instance, BIOS, dan entity level sistem lainnya sering menulis output ke port serial, dan dapat menerima input seperti perintah atau jawaban atas suatu perintah. Biasanya, entitas tingkat sistem ini menggunakan port serial pertama (port 1) dan port serial 1 sering disebut sebagai konsol serial.

Jika Anda hanya perlu melihat output port serial tanpa mengeluarkan perintah apa pun ke konsol serial, Anda dapat memanggil metode getSerialPortOutput atau menggunakan Cloud Logging untuk membaca informasi yang telah ditulis oleh {i>instance <i} ke porta serialnya; lihat Melihat log port serial. Namun, jika mengalami masalah saat mengakses instance melalui SSH atau perlu memecahkan masalah instance yang tidak di-booting sepenuhnya, Anda dapat mengaktifkan akses interaktif ke konsol serial, yang memungkinkan Anda terhubung ke dan berinteraksi dengan salah satu porta serial instance Anda. Misalnya, Anda dapat langsung menjalankan perintah dan merespons permintaan di port serial.

Saat mengaktifkan atau menonaktifkan port serial, Anda dapat menggunakan nilai Boolean apa pun yang diterima oleh server metadata. Untuk mengetahui informasi selengkapnya, lihat menetapkan nilai boolean.

Sebelum memulai

  • Siapkan autentikasi, jika Anda belum melakukannya. Autentikasi adalah proses verifikasi identitas Anda untuk akses ke layanan dan API Google Cloud. Untuk menjalankan kode atau contoh dari lingkungan pengembangan lokal, Anda dapat melakukan autentikasi ke Compute Engine sebagai berikut.

    Pilih tab untuk melihat bagaimana Anda berencana menggunakan contoh di halaman ini:

    Konsol

    Saat menggunakan Konsol Google Cloud untuk mengakses API dan layanan Google Cloud, Anda tidak perlu menyiapkan autentikasi.

    gcloud

    1. Instal Google Cloud CLI, lalu initialize dengan menjalankan perintah berikut:

      gcloud init
    2. Menetapkan region dan zona default.

    REST

    Untuk menggunakan contoh REST API di halaman ini dalam lingkungan pengembangan lokal, gunakan kredensial yang Anda berikan ke gcloud CLI.

      Instal Google Cloud CLI, lalu initialize dengan menjalankan perintah berikut:

      gcloud init

Mengaktifkan akses interaktif pada konsol serial

Aktifkan akses konsol serial interaktif untuk setiap instance VM atau untuk seluruh project.

Mengaktifkan akses untuk project

Jika akses konsol serial interaktif pada suatu project diaktifkan, akses untuk semua instance VM yang merupakan bagian dari project tersebut akan aktif.

Secara default, akses port serial interaktif dinonaktifkan. Anda juga dapat menonaktifkannya secara eksplisit dengan menyetel kunci serial-port-enable ke FALSE. Dalam keduanya, setelan per instance akan menggantikan setelan level project atau setelan default.

Konsol

  1. Di Konsol Google Cloud, buka halaman Metadata.

    Buka Metadata

  2. Klik Edit untuk mengedit entri metadata.
  3. Tambahkan entri baru yang menggunakan kunci serial-port-enable dan nilai TRUE.
  4. Simpan perubahan Anda.

gcloud

Dengan menggunakan Google Cloud CLI, masukkan perintah project-info add-metadata sebagai berikut:

gcloud compute project-info add-metadata \
    --metadata serial-port-enable=TRUE

REST

Di API, buat permintaan ke metode projects().setCommonInstanceMetadata, yang menyediakan kunci serial-port-enable dengan nilai TRUE:

{
 "fingerprint": "FikclA7UBC0=",
 "items": [
  {
   "key": "serial-port-enable",
   "value": "TRUE"
  }
 ]
}

Mengaktifkan akses untuk instance VM

Mengaktifkan akses konsol serial interaktif untuk instance tertentu. Setelan per instance, jika ada, akan menggantikan setelan tingkat project. Anda juga dapat menonaktifkan akses untuk instance tertentu, meskipun akses diaktifkan pada level project, dengan menetapkan serial-port-enable ke FALSE, bukan TRUE. Demikian pula, Anda dapat mengaktifkan akses untuk satu atau beberapa instance meskipun dinonaktifkan untuk project tersebut, secara eksplisit atau default.

Konsol

  1. Di Konsol Google Cloud, buka halaman VM instances.

    Buka halaman VM instances

  2. Klik instance yang ingin Anda aktifkan aksesnya.
  3. Klik Edit.
  4. Di bagian Remote access, centang kotak Enable connecting to serial ports.
  5. Simpan perubahan Anda.

gcloud

Dengan menggunakan Google Cloud CLI, masukkan perintah instances add-metadata, dan gantilah instance-name dengan nama instance Anda.

gcloud compute instances add-metadata instance-name \
    --metadata serial-port-enable=TRUE

REST

Di API, buat permintaan ke metode instances().setMetadata dengan kunci serial-port-enable dan nilai TRUE:

POST https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/instances/example-instance/setMetadata
{
 "fingerprint": "zhma6O1w2l8=",
 "items": [
  {
   "key": "serial-port-enable",
   "value": "TRUE"
  }
 ]
}

Menghubungkan ke konsol serial

Setelah mengaktifkan akses interaktif untuk konsol seri instance, Anda dapat terhubung ke konsol serial.

Compute Engine menawarkan gateway konsol serial global dan gateway konsol serial regional untuk setiap region Google Cloud. Saat terhubung ke konsol serial menggunakan Google Cloud Console atau Google Cloud CLI, Anda akan otomatis terhubung ke konsol serial regional. Namun, saat menggunakan klien SSH lainnya, Anda dapat memilih antara gateway regional atau global, tetapi kami merekomendasikan gateway regional untuk keandalan yang lebih baik.

Konsol serial mengautentikasi pengguna dengan kunci SSH. Secara khusus, Anda harus menambahkan kunci SSH publik ke metadata project atau instance dan menyimpan kunci pribadi Anda di komputer lokal tempat Anda ingin terhubung. Gcloud CLI dan Google Cloud Console otomatis menambahkan kunci SSH ke project untuk Anda. Jika menggunakan klien pihak ketiga, Anda mungkin perlu menambahkan kunci SSH secara manual.

Konsol

Untuk terhubung ke konsol seri regional VM, lakukan hal berikut:

  1. Di konsol Google Cloud, buka halaman Instance VM.

    Buka halaman VM instances

  2. Klik instance yang ingin Anda hubungkan.
  3. Pada bagian Akses jarak jauh, klik Hubungkan ke konsol serial untuk terhubung pada port default (port 1).
  4. Jika Anda ingin terhubung ke port serial lain, klik panah bawah di samping tombol Connect to serial console, lalu ubah nomor port sesuai dengan tersebut.
  5. Untuk instance Windows, buka menu drop-down di samping tombol tersebut dan hubungkan ke Port 2 untuk mengakses konsol serial.

gcloud

Untuk terhubung ke konsol seri regional VM, gunakan perintah gcloud compute connect-to-serial-port:

  gcloud compute connect-to-serial-port VM_NAME 
--port=PORT_NUMBER

Ganti kode berikut:

  • VM_NAME: nama VM yang konsol serialnya ingin Anda hubungkan.
  • PORT_NUMBER: nomor port yang ingin Anda hubungkan. Untuk VM Linux, gunakan 1, untuk VM Windows, gunakan 2. Untuk mempelajari nomor port lebih lanjut, lihat Memahami penomoran port serial.

Klien SSH lainnya

Anda dapat terhubung ke konsol serial instance menggunakan klien SSH pihak ketiga lainnya, selama klien tersebut memungkinkan Anda terhubung ke port TCP 9600.

Saat terhubung menggunakan klien SSH pihak ketiga, Anda dapat menghubungkannya ke konsol serial yang memiliki cakupan global atau konsol seri dengan cakupan regional.

  • Direkomendasikan: Untuk menghubungkan ke konsol seri regional, gunakan nama host berikut: region-ssh-serialport.googleapis.com

  • Untuk terhubung ke konsol serial global, gunakan nama host berikut: ssh-serialport.googleapis.com

Misalnya, perintah SSH berikut menghubungkan konsol serial regional melalui port serial default (1) dari instance bernama example-instance dengan nama pengguna jane di sebuah project dengan project ID myproject. Instance berada dalam zona us-central1-f. Ganti private-ssh-key-file dengan file kunci SSH pribadi untuk instance.

ssh -i private-ssh-key-file -p 9600 myproject.us-central1-f.example-instance.jane@us-central1-ssh-serialport.googleapis.com
 

Secara mendetail, Anda dapat terhubung ke konsol serial instance menggunakan informasi login dan alamat berikut:

project-id.zone.instance-name.username.options@region-ssh-serialport.googleapis.com

Ganti kode berikut:

  • project-id: Project ID untuk instance ini.
  • zone: Zona instance.
  • region: Region instance.
  • instance-name: nama instance
  • username: Nama pengguna yang Anda gunakan untuk terhubung ke instance. Biasanya, ini adalah nama pengguna di komputer lokal Anda.
  • options: Opsi tambahan yang dapat Anda tentukan untuk koneksi ini. Misalnya, Anda dapat menentukan port serial tertentu dan menentukan semua opsi lanjutan. Nomor porta bisa berupa 1 sampai 4, secara inklusif. Untuk mempelajari nomor port lebih lanjut, baca artikel Memahami penomoran port serial. Jika dihilangkan, Anda akan terhubung ke port serial 1.

Jika Anda terhubung ke instance VM Windows, hubungkan melalui port 2 menggunakan perintah berikut:

ssh -i private-ssh-key-file -p 9600 project-id.zone.instance-name.username.port=2@ssh-serialport.googleapis.com

Jika mengalami masalah saat terhubung menggunakan klien SSH pihak ketiga, Anda dapat menjalankan perintah gcloud compute connect-to-serial-port dengan opsi command line --dry-run untuk melihat perintah SSH yang seharusnya dijalankan untuk Anda. Kemudian Anda dapat membandingkan opsi dengan perintah yang digunakan.

Menyiapkan koneksi aman

Saat menggunakan klien SSH pihak ketiga yang bukan Google Cloud CLI, Anda dapat memastikan bahwa Anda terlindungi dari peniruan identitas atau serangan man in the middle dengan memeriksa SSH server Port Serial Google tombol. Untuk menyiapkan sistem agar memeriksa kunci SSH server, selesaikan langkah-langkah berikut:

  1. Download kunci SSH server untuk konsol seri yang akan Anda gunakan:
    • Untuk koneksi regional, kunci SSH server untuk suatu region dapat ditemukan di https://www.gstatic.com/vm_serial_port/region/region.pub
    • Untuk koneksi global, download kunci SSH server Serial Port Google
  2. Buka file hosts Anda yang dikenal, yang biasanya terletak di ~/.ssh/known_hosts.
  3. Tambahkan konten kunci SSH server, dengan nama host server ditambahkan ke kunci. Misalnya, jika kunci server us-central1 berisi baris ssh-rsa AAAAB3NzaC1yc..., ~/.ssh/known_hosts harus memiliki baris seperti ini:

    [us-central1-ssh-serialport.googleapis.com]:9600 ssh-rsa AAAAB3NzaC1yc...

Untuk alasan keamanan, Google mungkin sesekali mengubah kunci SSH server Serial Port Google. Jika klien Anda gagal mengautentikasi kunci server, segera akhiri upaya koneksi dan selesaikan langkah sebelumnya untuk mendownload kunci SSH server Port Serial Google yang baru.

Jika, setelah memperbarui kunci host, Anda terus menerima error autentikasi host dari klien, hentikan upaya untuk terhubung ke port serial dan hubungi dukungan Google. Jangan memberikan kredensial apa pun melalui koneksi jika autentikasi host gagal.

Memutus koneksi dari konsol serial

Untuk memutuskan koneksi dari konsol serial:

  1. Tekan tombol ENTER.
  2. Ketikkan ~. (tanda tilde, diikuti dengan titik).

Anda dapat menemukan perintah lain dengan mengetik ~? atau dengan memeriksa halaman utama untuk SSH:

man ssh

Jangan mencoba memutuskan koneksi menggunakan salah satu metode berikut:

  • Kombinasi tombol CTRL+ALT+DELETE atau kombinasi serupa lainnya. Ini tidak berfungsi karena konsol serial tidak mengenali kombinasi keyboard PC.

  • Perintah exit atau logout tidak berfungsi karena tamu tidak mengetahui adanya koneksi jaringan atau modem. Menggunakan perintah ini akan menyebabkan konsol ditutup lalu dibuka kembali, dan Anda akan tetap terhubung ke sesi tersebut. Jika ingin mengaktifkan perintah exit dan logout untuk sesi, Anda dapat mengaktifkannya dengan menetapkan opsi on-dtr-low.

Menghubungkan ke konsol serial dengan perintah login

Jika Anda mencoba memecahkan masalah terkait VM yang telah selesai melakukan booting atau mencoba memecahkan masalah yang terjadi setelah VM melakukan booting dari mode pengguna tunggal, Anda mungkin akan diminta untuk memasukkan informasi login saat mencoba untuk mengakses konsol seri.

Secara default, image sistem Linux yang disediakan Google tidak dikonfigurasi untuk mengizinkan login berbasis sandi bagi pengguna lokal. Namun, image Windows yang disediakan Google dikonfigurasi untuk mengizinkan login berbasis sandi bagi pengguna lokal.

Jika VM menjalankan image yang telah dikonfigurasi sebelumnya dengan login port serial, Anda harus menyiapkan sandi lokal pada VM agar dapat login ke konsol serial, jika diminta. Anda dapat menyiapkan sandi lokal setelah terhubung ke VM atau dengan menggunakan skrip startup.

Menyiapkan sandi lokal menggunakan skrip startup

Anda dapat menggunakan skrip startup untuk menyiapkan sandi lokal yang memungkinkan Anda terhubung ke konsol serial selama atau setelah pembuatan VM.

Petunjuk berikut menjelaskan cara menyiapkan sandi lokal setelah pembuatan VM.

  1. Di Konsol Google Cloud, buka halaman VM instances.

    Buka halaman VM instances

  2. Pilih VM yang ingin Anda tambahkan sandi lokalnya.

  3. Klik Edit.

    Linux

    1. Buka bagian Metadata > Automation.

    2. Jika VM memiliki skrip startup yang ada, salin dan tempel skrip tersebut di tempat yang aman.

    3. Tambahkan skrip startup berikut:

      #!/bin/bash
      useradd USERNAME
      echo USERNAME:PASSWORD | chpasswd
      usermod -aG google-sudoers USERNAME
      

      Ganti kode berikut:

      • USERNAME: nama pengguna yang ingin Anda tambahkan
      • PASSWORD: sandi untuk nama pengguna. Hindari sandi sederhana, karena beberapa sistem operasi mungkin memerlukan panjang dan kompleksitas sandi yang minimal.

    Windows

    1. Buka bagian Custom metadata.
    2. Jika VM memiliki skrip startup yang sudah ada, salin dan tempel skrip tersebut di tempat yang aman.
    3. Klik Tambahkan item.
    4. Pada kolom Key, masukkan windows-startup-script-cmd.
    5. Di kolom Nilai, masukkan skrip berikut:

      net user USERNAME PASSWORD /ADD /Y
      net localgroup administrators USERNAME /ADD
      

      Ganti kode berikut:

      • USERNAME: nama pengguna yang ingin Anda tambahkan
      • PASSWORD: sandi untuk nama pengguna
  4. Klik Save.

  5. Untuk memulai ulang VM, klik Reset. Untuk mengetahui informasi selengkapnya, baca artikel Mereset VM.

  6. Hubungkan ke konsol serial.

  7. Masukkan informasi login Anda saat diminta.

  8. Hapus skrip startup dari VM setelah pengguna dibuat.

Menyiapkan sandi lokal menggunakan passwd di VM

Petunjuk berikut menjelaskan cara menyiapkan sandi lokal untuk pengguna di VM, sehingga pengguna tersebut dapat login ke konsol serial VM tersebut menggunakan sandi yang ditentukan.

  1. Menghubungkan ke VM. Ganti instance-name dengan nama instance Anda.

    gcloud compute ssh instance-name
  2. Di VM, buat sandi lokal dengan perintah berikut. Tindakan ini akan menyetel sandi untuk pengguna yang saat ini Anda gunakan untuk login.

    sudo passwd $(whoami)
  3. Ikuti petunjuk untuk membuat sandi.

  4. Selanjutnya, logout dari instance dan hubungkan ke konsol serial.

  5. Masukkan informasi login Anda saat diminta.

Menyiapkan login di port serial lain

Dialog login diaktifkan pada port 1 secara default di sebagian besar sistem operasi Linux. Namun, port 1 sering kali kewalahan karena data logging dan informasi lain yang dicetak ke port. Sebagai gantinya, Anda dapat memilih untuk mengaktifkan permintaan login di port lain, seperti port 2 (ttyS1), dengan menjalankan salah satu perintah berikut di VM Anda. Anda dapat melihat daftar port yang tersedia untuk VM di bagian Memahami penomoran port serial.

Tabel berikut mencantumkan gambar yang telah dikonfigurasi dengan login konsol serial dan port default.

Sistem operasi Port dengan permintaan login secara default Pengelolaan layanan
CentOS 6 1 upstart
CentOS 7 1 systemd
CoreOS 1 systemd
COS 1 systemd
Debian 8 1 systemd
Debian 9 1 systemd
OpenSUSE 13 1 systemd
OpenSUSE Leap 1 systemd
RHEL 6 1 upstart
RHEL 7 1 systemd
SLES 11 1 sysvinit
SLES 12 1 systemd
Ubuntu 14.04 1 upstart
Ubuntu 16.04 1 systemd
Ubuntu 17.04 1 systemd
Ubuntu 17.10 1 systemd
Windows COM2 T/A

Untuk mengaktifkan permintaan login pada port serial tambahan, selesaikan petunjuk berikut.

systemd

Untuk sistem operasi Linux yang menggunakan systemd:

  • Aktifkan layanan untuk sementara hingga mulai ulang berikutnya:

    sudo systemctl start serial-getty@ttyS1.service
  • Aktifkan layanan secara permanen, dimulai dengan mulai ulang berikutnya:

    sudo systemctl enable serial-getty@ttyS1.service

upstart

Untuk sistem operasi Linux yang menggunakan upstart:

  1. Buat file /etc/init/ttyS1.conf baru untuk mencerminkan ttyS1 dengan menyalin dan mengubah file ttyS0.conf yang ada. Contoh:

    • Di Ubuntu 14.04:

      sudo sh -c "sed -e s/ttyS0/ttyS1/g < /etc/init/ttyS0.conf > /etc/init/ttyS1.conf"
    • Pada RHEL 6.8 dan CentOS 6.8

      sudo sh -c "sed -ne '/^# # ttyS0/,/^# exec/p'  < /etc/init/serial.conf  | sed -e 's/ttyS0/ttyS1/g' -e 's/^# *//' > /etc/init/ttyS1.conf"
  2. Mulai permintaan login di ttyS1 tanpa memulai ulang:

    sudo start ttyS1

sysvinit

Untuk sistem operasi Linux yang menggunakan sysvinit, jalankan perintah berikut:

 sudo sed -i~ -e &#39;s/^#T([01])/T\1/&#39; /etc/inittab
 sudo telinit q

Memahami penomoran port serial

Setiap instance mesin virtual memiliki empat port serial. Agar konsisten dengan getSerialPortOutput API, setiap port diberi nomor 1 sampai 4. Linux dan sistem serupa lainnya menomori port serial 0 hingga 3. Misalnya, pada banyak image sistem operasi, perangkat yang sesuai adalah /dev/ttyS0 hingga /dev/ttyS3. Windows menyebut port serial sebagai COM1 hingga COM4. Untuk terhubung ke perangkat yang dianggap Windows sebagai COM3 dan Linux sebagai ttyS2, Anda perlu menentukan port 3. Gunakan tabel di bawah ini untuk membantu Anda mengetahui port mana yang ingin Anda hubungkan.

Port serial instance mesin virtual Port serial Linux standar Port COM Windows
1 /dev/ttyS0 COM1
2 /dev/ttyS1 COM2
3 /dev/ttyS2 COM3
4 /dev/ttyS3 COM4

Perlu diperhatikan bahwa banyak image Linux menggunakan port 1 (/dev/ttyS0) untuk mencatat pesan ke dalam log dari program kernel dan sistem.

Mengirim jeda serial

Fitur kunci Magic SysRq memungkinkan Anda melakukan tugas tingkat rendah, apa pun status sistem. Misalnya, Anda dapat menyinkronkan sistem file, memulai ulang instance, mengakhiri proses, dan melepas sistem file menggunakan fitur kunci Magic SysRq.

Untuk mengirim perintah Magic SysRq menggunakan simulasi jeda serial:

  1. Tekan tombol ENTER.
  2. Ketik ~B (tanda tilde, diikuti dengan huruf besar B).
  3. Ketik perintah Magic SysRq.

Melihat log audit konsol serial

Compute Engine menyediakan log audit untuk melacak siapa yang telah terhubung dan terputus dari konsol serial instance. Untuk melihat log, Anda harus memiliki izin untuk Logs Viewer atau menjadi penampil atau editor project.

  1. Di Konsol Google Cloud, buka halaman Logs Explorer.

    Buka Logs Explorer

  2. Luaskan menu drop-down dan pilih GCE VM Instance.
  3. Di kotak penelusuran, ketik ssh-serialport.googleapis.com dan tekan Enter.
  4. Daftar log audit akan muncul. Log ini menjelaskan koneksi dan pemutusan koneksi dari konsol serial. Luaskan entri mana pun untuk mendapatkan informasi lebih lanjut:

    Log audit untuk konsol serial.

Untuk salah satu log audit, Anda dapat:

  1. Luaskan properti protoPayload.
  2. Cari methodName untuk melihat aktivitas tempat log ini diterapkan (baik permintaan koneksi atau pemutusan). Misalnya, jika log ini melacak pemutusan dari konsol serial, nama metode akan menampilkan "google.ssh-serialport.v1.disconnect". Demikian pula, log koneksi akan menyatakan "google.ssh-serialport.v1.connect". Entri log audit dicatat di awal dan akhir setiap sesi di konsol serial.

Ada berbagai properti log audit untuk berbagai jenis log. Misalnya, log audit yang terkait dengan koneksi memiliki properti yang khusus untuk log koneksi, sedangkan log audit untuk pemutusan koneksi memiliki kumpulan propertinya sendiri. Ada properti log audit tertentu yang juga digunakan bersama oleh kedua jenis log tersebut.

Semua log konsol serial

Tabel berikut menyediakan properti log audit dan nilainya untuk semua log konsol serial:

Properti Nilai
requestMetadata.callerIp Alamat IP dan nomor port tempat koneksi berasal.
serviceName ssh-serialport.googleapis.com
resourceName String yang berisi project ID, zona, nama instance, dan nomor port seri untuk menunjukkan konsol seri mana yang terkait dengan hal ini. Misalnya, projects/myproject/zones/us-east1-a/instances/example-instance/SerialPort/2 adalah nomor port 2, juga dikenal sebagai COM2 atau /dev/ttyS1, untuk instance example-instance.
resource.labels Properti yang mengidentifikasi ID instance, zona, dan ID project.
timestamp Stempel waktu yang menunjukkan kapan sesi dimulai atau berakhir.
severity NOTICE
operation.id String ID yang mengidentifikasi sesi secara unik; Anda dapat menggunakan cara ini untuk menghubungkan entri pemutusan dengan entri koneksi yang sesuai.
operation.producer ssh-serialport.googleapis.com

Log koneksi

Tabel berikut menyediakan properti log audit dan nilainya yang khusus untuk log koneksi:

Properti Nilai
methodName google.ssh-serialport.v1.connect
status.message Connection succeeded.
request.serialConsoleOptions Semua opsi yang ditentukan dengan permintaan, termasuk nomor port serial.
request.@type type.googleapis.com/google.compute.SerialConsoleSessionBegin
request.username Nama pengguna yang ditentukan untuk permintaan ini. Ini digunakan untuk memilih kunci publik yang akan dicocokkan.
operation.first TRUE
status.code Untuk permintaan koneksi yang berhasil, nilai status.code sebesar google.rpc.Code.OK menunjukkan bahwa operasi berhasil diselesaikan tanpa error. Karena nilai enum untuk properti ini adalah 0, properti status.code tidak ditampilkan. Namun, kode apa pun yang memeriksa nilai status.code google.rpc.Code.OK akan berfungsi seperti yang diharapkan.

Log pemutusan

Tabel berikut menyediakan properti log audit dan nilainya yang khusus untuk log pemutusan:

Properti Nilai
methodName google.ssh-serialport.v1.disconnect
response.duration Jumlah waktu, dalam detik, saat sesi berlangsung.
response.@type type.googleapis.com/google.compute.SerialConsoleSessionEnd
operation.last TRUE

Log koneksi gagal

Jika koneksi gagal, Compute Engine akan membuat entri log audit. Log koneksi yang gagal terlihat sangat mirip dengan entri koneksi yang berhasil, tetapi memiliki properti berikut ini untuk menunjukkan koneksi yang gagal.

Properti Nilai
severity ERROR
status.code

Kode error Google API kanonis yang paling menjelaskan error. Berikut adalah kemungkinan kode error yang mungkin muncul:

  • google.rpc.Code.INVALID_ARGUMENT: Koneksi gagal karena klien memberikan nomor port yang tidak valid atau mencoba menjangkau saluran yang tidak dikenal. Lihat daftar nomor port yang valid.
  • google.rpc.Code.PERMISSION_DENIED: Anda belum mengaktifkan konsol serial interaktif di server metadata. Untuk mengetahui informasi selengkapnya, lihat Mengaktifkan akses interaktif pada konsol serial.
  • google.rpcCode.UNAUTHENTICATED: Tidak ada kunci SSH yang ditemukan atau tidak ditemukan kunci SSH yang cocok untuk instance ini. Pastikan Anda telah diautentikasi ke instance VM.
  • google.rpc.Code.UNKNOWN: Ada kesalahan yang tidak diketahui pada permintaan Anda. Anda dapat menghubungi Google di grup diskusi gce atau mengajukan laporan bug.
status.message Pesan yang dapat dibaca manusia untuk entri ini.

Menonaktifkan akses konsol serial interaktif

Anda dapat menonaktifkan akses konsol serial interaktif dengan mengubah metadata pada instance atau project tertentu, atau dengan menetapkan Kebijakan Organisasi yang menonaktifkan akses konsol serial interaktif ke semua instance VM untuk satu atau lebih proyek yang merupakan bagian dari organisasi.

Menonaktifkan konsol serial interaktif pada instance atau project tertentu

Pemilik dan editor project, serta pengguna yang diberi peran compute.instanceAdmin.v1, dapat menonaktifkan akses ke konsol serial dengan mengubah metadata pada instance atau project tertentu. Mirip dengan mengaktifkan akses konsol serial, setel metadata serial-port-enable ke FALSE:

serial-port-enable=FALSE

Misalnya, dengan menggunakan Google Cloud CLI, Anda dapat menerapkan metadata ini ke instance tertentu seperti berikut:

gcloud compute instances add-metadata instance-name \
    --metadata=serial-port-enable=FALSE

Untuk menerapkan metadata ke project:

gcloud compute project-info add-metadata \
    --metadata=serial-port-enable=FALSE

Menonaktifkan akses konsol serial interaktif melalui Kebijakan Organisasi

Jika Anda telah diberikanorgpolicy.policyAdmin tertentu dalam organisasi, Anda dapat mengaturkebijakan organisasi yang mencegah akses interaktif ke konsol serial, terlepas dari apakah akses konsol serial interaktif diaktifkan di server metadata atau tidak. Setelah kebijakan organisasi ditetapkan, kebijakan tersebut akan secara efektif mengganti kunci metadata serial-port-enable, dan tidak ada pengguna organisasi atau project yang dapat mengaktifkan akses konsol serial interaktif. Secara default, batasan ini ditetapkan ke FALSE.

Batasan untuk menonaktifkan akses konsol serial interaktif adalah sebagai berikut:

compute.disableSerialPortAccess

Selesaikan petunjuk berikut untuk menetapkan kebijakan ini di organisasi. Setelah menyiapkan kebijakan, Anda dapat memberikan pengecualian per project.

gcloud

Untuk menetapkan kebijakan menggunakan Google Cloud CLI, jalankan perintah resource-manager enable-enforce. Ganti organization-id dengan ID organisasi Anda. Contohnya, 1759840282

gcloud resource-manager org-policies enable-enforce \
    --organization organization-id compute.disableSerialPortAccess

REST

Untuk menyetel kebijakan di API, buat permintaan POST ke URL berikut. Ganti organization-name dengan nama organisasi Anda. Contoh, organizations/1759840282.

 POST https://cloudresourcemanager.googleapis.com/v1/organization-name:setOrgPolicy

Isi permintaan harus berisi objek policy dengan batasan berikut:

"constraint": "constraints/compute.disableSerialPortAccess"

Contoh:

 {
   "policy":
   {
     "booleanPolicy":
     {
       "enforced": TRUE
     },
     "constraint": "constraints/compute.disableSerialPortAccess"
   }
 }
 

Kebijakan ini akan langsung berlaku, sehingga setiap project dalam organisasi akan segera berhenti mengizinkan akses interaktif ke konsol serial.

Untuk menonaktifkan kebijakan untuk sementara, gunakan perintah disable-enforce:

gcloud resource-manager org-policies disable-enforce \
    --organization organization-id compute.disableSerialPortAccess

Atau, Anda dapat membuat permintaan API dengan isi permintaan menetapkan parameter enforced ke FALSE:

{
  "policy":
  {
    "booleanPolicy":
    {
      "enforced": FALSE
    },
    "constraint": "constraints/compute.disableSerialPortAccess"
  }
}

Menetapkan kebijakan organisasi di level project

Anda dapat menetapkan kebijakan organisasi yang sama per project. Tindakan ini akan menggantikan setelan di tingkat organisasi.

gcloud

Untuk menonaktifkan penerapan kebijakan ini pada project tertentu. Ganti project-id dengan project ID Anda.

gcloud resource-manager org-policies disable-enforce \
    --project project-id compute.disableSerialPortAccess

Anda dapat mengaktifkan penerapan kebijakan ini menggunakan perintah enable-enforce dengan nilai yang sama.

REST

Dalam API, buat permintaan POST ke URL berikut guna mengaktifkan akses konsol serial interaktif untuk project, yang menggantikan project-id dengan project ID:

POST https://cloudresourcemanager.googleapis.com/v1/projects/project-id:setOrgPolicy

Isi permintaan harus berisi objek policy dengan batasan berikut:

"constraint": "constraints/compute.disableSerialPortAccess"

Contoh:

{
  "policy":
  {
    "booleanPolicy":
    {
      "enforced": FALSE
    },
    "constraint": "constraints/compute.disableSerialPortAccess"
  }
}

Tips dan trik

  • Jika Anda mengalami masalah saat terhubung menggunakan klien SSH standar, tetapi gcloud compute connect-to-serial-port berhasil terhubung, sebaiknya jalankan gcloud compute connect-to-serial-port dengan opsi command line --dry-run untuk melihat perintah SSH yang akan berjalan atas nama Anda, dan bandingkan opsi yang ada dengan perintah yang Anda gunakan.

  • Menyetel kecepatan bit, yang juga dikenal sebagai kecepatan baud, Anda dapat menyetel kecepatan bit apa pun yang diinginkan, seperti stty 9600, tetapi fitur ini biasanya memaksa kecepatan efektif menjadi 115.200 bps (~11,5 kB/dtk). Hal ini karena banyak image publik yang ditetapkan ke kecepatan bit lambat, seperti 9.600 pada konsol serial, dan akan di-booting dengan lambat.

  • Beberapa OS image memiliki nilai default yang tidak nyaman pada port serial. Misalnya, di CentOS 7, default stty icrnl untuk tombol Enter di konsol adalah mengirim CR, alias ^M. Shell bash mungkin menyamarkannya hingga Anda mencoba menetapkan sandi, dan Anda mungkin bertanya-tanya mengapa sandi tampak macet pada perintah password:.

  • Beberapa image publik memiliki kunci kontrol tugas yang dinonaktifkan secara default jika Anda memasang shell ke port dengan cara tertentu. Beberapa contoh kunci ini mencakup ^Z dan ^C. Perintah setsid mungkin dapat memperbaiki masalah ini. Atau, jika Anda melihat pesan job control is disabled in this shell, berhati-hatilah untuk tidak menjalankan perintah yang perlu Anda interupsi.

  • Beri tahu sistem ukuran jendela yang Anda gunakan, sehingga bash dan editor dapat mengelolanya dengan tepat. Jika tidak, Anda mungkin mengalami perilaku tampilan yang aneh karena bash atau editor mencoba memanipulasi tampilan berdasarkan asumsi yang salah tentang jumlah baris dan kolom yang tersedia. Gunakan perintah stty rows Y cols X dan flag stty -a untuk melihat apa setelannya. Misalnya: stty rows 60 cols 120 (jika jendela Anda 120 karakter kali 60 baris).

  • Misalnya, jika Anda terhubung menggunakan SSH dari mesin A ke mesin B, lalu ke mesin C dll., membuat sesi SSH bertingkat, dan Anda ingin menggunakan perintah tanda tilde (~) untuk memutuskan koneksi atau mengirim sinyal jeda serial, Anda perlu menambahkan karakter tilde tambahan yang cukup ke perintah untuk sampai ke klien SSH yang tepat. Perintah yang mengikuti satu tanda tilde akan ditafsirkan oleh klien SSH pada mesin A; perintah setelah dua tanda tilde berturut-turut (Enter~~) ditafsirkan oleh klien pada mesin B, dan seterusnya. Anda hanya perlu menekan Enter satu kali karena akan diteruskan ke tujuan SSH terdalam. Hal ini berlaku untuk setiap penggunaan klien SSH yang menyediakan fitur tilde escape.

    Jika Anda tidak dapat melacak jumlah karakter tanda tilde yang diperlukan, tekan tombol Enter, lalu ketik karakter gelombang satu per satu hingga instance menampilkan tanda tilde kembali. Gema ini menunjukkan bahwa Anda telah mencapai akhir rantai dan sekarang Anda mengetahui bahwa untuk mengirim perintah tanda tilde ke klien SSH bertingkat, Anda membutuhkan satu tanda tilde lebih sedikit daripada jumlah tanda tilde yang Anda ketik.

Opsi lanjutan

Mengontrol koneksi maksimum

Anda dapat menyetel properti max-connections untuk mengontrol jumlah koneksi serentak yang dapat dilakukan ke port serial ini pada satu waktu. Jumlah koneksi default dan maksimum adalah 5. Contoh:

gcloud compute connect-to-serial-port instance-name \
    --port port-number \
    --extra-args max-connections=3
ssh -i private-ssh-key-file -p 9600 project-id.zone.instance-name.username.max-connections=3@ssh-serialport.googleapis.com

Menyetel opsi pemutaran ulang

Secara default, setiap kali terhubung ke konsol serial, Anda akan menerima replay 10 baris data terakhir, terlepas dari apakah 10 baris terakhir telah dilihat oleh klien SSH lain. Anda dapat mengubah setelan ini dan mengontrol jumlah dan baris mana yang ditampilkan dengan menyetel opsi berikut:

  • replay-lines=N: Setel N ke jumlah baris yang ingin Anda putar ulang. Misalnya, jika N adalah 50, 50 baris terakhir dari output konsol akan disertakan.
  • replay-bytes=N: Memutar ulang N byte terbaru. Anda juga dapat menetapkan N ke new yang memutar ulang semua output yang belum dikirim ke klien mana pun.
  • replay-from=N: Memutar ulang output, mulai dari indeks byte absolut yang Anda berikan. Anda bisa mendapatkan indeks byte saat ini dari output konsol serial dengan membuat permintaan getSerialPortOutput. Jika Anda menetapkan replay-from, semua opsi pemutaran ulang lainnya akan diabaikan.

Dengan Google Cloud CLI, tambahkan baris berikut ke connect-to-serial-port di manaN adalah jumlah baris yang ditentukan (atau byte atau indeks byte absolut, bergantung pada opsi replay yang Anda pilih):

--extra-args replay-lines=N

Jika Anda menggunakan klien SSH pihak ketiga, berikan opsi ini dalam perintah SSH:

ssh -i private-ssh-key-file -p 9600 myproject.us-central1-f.example-instance.jane.port=3.replay-lines=N@ssh-serialport.googleapis.com

Anda juga dapat menggunakan kombinasi dari opsi ini. Contoh:

replay-lines=N dan replay-bytes=new
Memutar ulang jumlah baris yang ditentukan ATAU memutar ulang semua output yang sebelumnya tidak dikirim ke klien mana pun, mana pun yang lebih besar. Klien pertama yang terhubung dengan kombinasi flag ini akan melihat semua output yang telah dikirim ke port serial, dan klien yang terhubung secara berurutan hanya akan melihat baris N terakhir. Contoh:
gcloud compute connect-to-serial-port instance-name--port port-number --extra-args replay-lines=N,replay-bytes=new
ssh -i private-ssh-key-file -p 9600 project-id.zone.instance-name.username.replay-lines=N.replay-bytes=new@ssh-serialport.googleapis.com
replay-lines=N dan replay-bytes=M
Putar ulang baris hingga, tetapi tidak lebih dari, jumlah baris atau byte yang dijelaskan oleh tanda ini, mana saja yang lebih sedikit. Opsi ini tidak akan memutar ulang lebih dari N atau M byte.
gcloud compute connect-to-serial-port instance-name--port port-number --extra-args replay-lines=N,replay-bytes=M
ssh -i private-ssh-key-file -p 9600 project-id.zone.instance-name.username.replay-lines=N.replay-bytes=M@ssh-serialport.googleapis.com

Menangani output yang dilepas

Output 1 MiB terbaru untuk setiap port serial selalu tersedia dan umumnya, klien SSH Anda tidak akan melewatkan output apa pun dari port serial. Jika, karena alasan tertentu, klien SSH berhenti menerima output selama jangka waktu tertentu tetapi tidak terputus, dan lebih dari 1 MiB data baru dihasilkan, klien SSH Anda mungkin melewatkan beberapa output. Jika klien SSH tidak menerima data cukup cepat untuk terus mengikuti output pada port konsol serial, Anda dapat menetapkan properti on-dropped-output untuk menentukan perilaku konsol.

Tetapkan salah satu opsi yang berlaku berikut dengan properti ini:

  • insert-stderr-note: Menyisipkan catatan pada stderr klien SSH yang menunjukkan bahwa output dihapus. Opsi ini adalah opsi default.
  • ignore: Menurunkan output secara diam-diam dan tidak melakukan apa pun.
  • disconnect: Menghentikan koneksi.

Contoh:

gcloud compute connect-to-serial-port instance-name \
    --port port-number \
    --extra-args on-dropped-output=ignore
ssh -i private-ssh-key-file -p 9600 project-id.zone.instance-name.username.on-dropped-output=ignore@ssh-serialport.googleapis.com

Mengaktifkan pemutusan koneksi menggunakan perintah keluar atau logout

Anda dapat mengaktifkan perintah sambungan keluar atau logout dengan menyetel properti on-dtr-low ke disconnect saat Anda terhubung ke konsol serial.

Di Google Cloud CLI, tambahkan flag berikut ke perintah connect-to-serial-port Anda:

--extra-args on-dtr-low=disconnect

Jika Anda menggunakan klien SSH pihak ketiga, berikan opsi ini dalam perintah SSH:

ssh -i private-ssh-key-file -p 9600 myproject.us-central1-f.example-instance.jane.port=3.on-dtr-low=disconnect@ssh-serialport.googleapis.com

Mengaktifkan opsi disconnect dapat menyebabkan instance Anda terputus satu atau beberapa kali saat Anda me-reboot instance karena sistem operasi akan mereset port serial saat booting.

Setelan default untuk opsi on-dtr-low adalah none. Jika Anda menggunakan setelan default none, Anda dapat memulai ulang instance tanpa terputus dari konsol serial, tetapi koneksi konsol tidak akan terputus melalui cara normal seperti exit atau logout, atau kombinasi tombol normal seperti Ctrl+D.

Langkah selanjutnya