Perintah ssh membuka sesi terminal pada mesin lain melalui jaringan, lalu seluruh komunikasinya dienkripsi dari ujung ke ujung. Topik ini membahas bentuk perintah ssh beserta opsi yang sering dipakai, peran berkas ~/.ssh/known_hosts pada koneksi pertama, dan langkah yang ditempuh ketika kunci host sebuah server berubah. Setelah menyelesaikannya, koneksi ke server latihan dapat dilakukan dengan penuh kesadaran terhadap apa yang sebenarnya diverifikasi klien.
Model klien dan server SSH#
SSH (Secure Shell) bekerja dengan model klien dan server. Program sshd berjalan sebagai layanan di sisi server, mendengarkan pada port 22, dan menunggu permintaan masuk, sedangkan perintah ssh berperan sebagai klien yang memulai koneksi dari mesin lokal. Setelah keduanya saling mengautentikasi, sebuah kanal terenkripsi dibangun tempat sesi terminal berjalan, sehingga nama pengguna, kata sandi, dan seluruh keluaran terminal tidak berjalan sebagai teks terbuka di jaringan. Model ini menggantikan alat lama seperti telnet yang mengirim semuanya dalam bentuk teks terbuka. Autentikasinya dapat berupa kata sandi atau kunci, dan pasangan kunci dibahas lebih rinci pada topik autentikasi kunci.
Bentuk paling sederhana dari perintahnya menyebut nama pengguna dan alamat server yang dipisahkan tanda @.
# tidak-dijalankan
# klien ssh tidak terpasang di sandbox dan koneksi memerlukan server yang benar-benar berjalan
ssh [email protected]Bagian budi adalah nama pengguna di sisi server, sedangkan 198.51.100.20 adalah alamat server latihan. Apabila nama pengguna dilepas sehingga perintahnya menjadi ssh 198.51.100.20, klien memakai nama pengguna yang sedang aktif di mesin lokal sebagai tebakannya. Nama pengguna yang keliru bukanlah kegagalan jaringan, melainkan berujung pada penolakan autentikasi di server yang benar.
Koneksi pertama dan berkas known_hosts#
Pada koneksi pertama, klien belum mengenal server, sehingga tidak memiliki cara untuk memastikan bahwa mesin yang menjawab memang server yang dituju. OpenSSH menyelesaikannya dengan memperlihatkan sidik jari (fingerprint) kunci host server, yakni ringkasan pendek dari kunci publik server, kemudian meminta keputusan berupa jawaban yes atau no. Setelah jawaban yes diberikan, klien menyimpan pasangan alamat dan kunci host tersebut ke berkas ~/.ssh/known_hosts.
Sejak saat itu, setiap koneksi berikutnya membandingkan kunci yang diperlihatkan server dengan catatan pada known_hosts. Persamaan kunci menjadi bukti bahwa mesin di balik alamat itu masih mesin yang sama, sedangkan perbedaan kunci menghentikan koneksi secara paksa. Sidik jari kunci host server latihan dapat diperiksa melalui kanal lain, misalnya konsol web yang disediakan penyedia server, sehingga keputusan pada koneksi pertama memang didasarkan pada nilai yang benar.
Setiap baris pada known_hosts memuat alamat, nama algoritme, dan kunci publik server, seperti contoh berikut.
198.51.100.20 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAolF/8lBqK1f/0AHUPU9H73EoyL/qUn3ozoyAtO05z4Banyak distribusi, termasuk Ubuntu, menyetel opsi HashKnownHosts. Dengan opsi itu, alamat pada baris baru disimpan dalam bentuk hash yang diawali |1|, sehingga daftar server yang pernah dikunjungi lebih sulit dibaca apabila berkasnya bocor. Perbedaan bentuk baris tidak mengubah perilaku pemeriksaannya, karena pencocokan kuncinya tetap sama.
Opsi koneksi yang sering dipakai#
Opsi baris perintah menyesuaikan koneksi tanpa menyentuh berkas konfigurasi. Tabel berikut merangkum opsi yang paling sering dibutuhkan.
| Opsi | Kegunaan |
|---|---|
-p port | menghubungi server pada port selain 22 |
-l pengguna | menentukan nama pengguna tanpa bentuk pengguna@host |
-i berkas | memakai berkas kunci privat tertentu untuk autentikasi |
-v | menampilkan proses negosiasi koneksi untuk diagnosis |
Opsi -p menjadi penting karena banyak administrator memindahkan sshd ke port lain untuk mengurangi kebisingan pemindaian otomatis. Opsi -i menyebut berkas kunci privat tertentu, berguna ketika beberapa kunci ada di ~/.ssh dan klien perlu dipaksa memakai salah satunya. Opsi -v tidak mengubah perilaku koneksi, tetapi menampilkan setiap tahap negosiasinya, sehingga menjadi titik awal diagnosis ketika koneksi gagal tanpa penjelasan yang jelas. Kedua perintah berikut dicoba pada mesin dengan OpenSSH terpasang.
# tidak-dijalankan
# klien ssh tidak terpasang di sandbox
# menghubungi server yang sshd-nya berjalan pada port 2222
ssh -p 2222 [email protected]
# menampilkan rincian negosiasi koneksi
ssh -v [email protected]Ketika kunci host berubah#
Klien menolak koneksi dan menampilkan pesan REMOTE HOST IDENTIFICATION HAS CHANGED ketika server memperlihatkan kunci host yang berbeda dari catatan known_hosts. Penolakan ini dirancang sebagai alarm, karena kunci host yang tiba-tiba berbeda adalah ciri percobaan pengalihan koneksi ke mesin lain. Sebab yang jinak juga ada, misalnya server dipasang ulang sehingga sshd menghasilkan kunci host baru.
Apabila sebabnya sudah pasti jinak, catatan lama diperbarui dengan menghapus baris server yang bersangkutan. OpenSSH menyediakan opsi -R pada ssh-keygen untuk tujuan itu, dan pesan penolakan pada versi-versi terkini bahkan menyebut nomor baris di known_hosts yang menyimpan kunci lama.
# tidak-dijalankan
# ssh-keygen tidak terpasang di sandbox
# menghapus catatan kunci host lama untuk satu alamat
ssh-keygen -R 198.51.100.20Koneksi berikutnya kembali berperilaku seperti koneksi pertama, yaitu memperlihatkan sidik jari kunci baru dan menunggu keputusan sebelum kunci itu disimpan.
Kesalahan umum#
- Menganggap pesan
Connection refusedberarti jaringan bermasalah. Pesan itu justru menunjukkan mesin tujuan terjangkau tetapi tidak ada layanan yang mendengarkan di port tersebut, misalnya sshd berhenti atau berpindah port. PesanConnection timed outbarulah menunjukkan paket tidak sampai, biasanya karena firewall. - Menerima
Permission deniedlalu mengira jaringannya bermasalah. Pesan itu berarti koneksi sudah terbuka, dan yang menolak adalah tahap autentikasinya, sehingga langkah berikutnya adalah memeriksa nama pengguna, kata sandi, atau kunci. - Menulis
-ppadascp. Opsi port padascpditulis dengan huruf besar-P, sedangkansshmemakai-p. - Melanjutkan koneksi pertama tanpa membaca sidik jarinya. Kebiasaan menekan yes tanpa memeriksa melatih pengabaian terhadap satu-satunya pemeriksaan yang melindungi dari pengalihan koneksi.
Ringkasan#
- Perintah
ssh pengguna@servermembuka sesi terminal terenkripsi, dengansshdpada server sebagai lawannya. - Pada koneksi pertama, sidik jari kunci host diverifikasi lalu disimpan ke
~/.ssh/known_hosts, dan koneksi berikutnya membandingkannya secara otomatis. - Perubahan kunci host menghentikan koneksi, dan pembaruannya dilakukan dengan
ssh-keygen -Rsetelah sebabnya dipastikan. - Opsi
-p,-l,-i, dan-vmenyesuaikan port, nama pengguna, kunci privat, dan tingkat rincian keluaran.
Referensi#
- ssh(1) — OpenBSD — Manual resmi klien ssh: bentuk perintah, opsi, dan perilaku verifikasi kunci host.
- ssh-keygen(1) — OpenBSD — Opsi -R untuk menghapus entri kunci host pada known_hosts.
- sshd(8) — OpenBSD — Sisi server SSH: kunci host dan konfigurasi layanan sshd.