Konfigurasi SSH

Alias host dan opsi koneksi pada berkas ~/.ssh/config.

Daftar isi

Berkas ~/.ssh/config menyimpan pilihan koneksi per host untuk klien ssh, sehingga perintah panjang seperti ssh -p 2222 [email protected] cukup ditulis ulang sebagai ssh lab. Topik ini membahas letak dan bentuk berkasnya, penyusunan alias host, opsi yang paling sering dipakai, serta urutan penilaian yang menentukan pilihan mana yang menang ketika beberapa blok cocok dengan host yang sama.

Letak dan bentuk berkas config#

Klien ssh menggabungkan konfigurasi dari tiga lapis, yaitu berkas sistem /etc/ssh/ssh_config, berkas per pengguna di ~/.ssh/config, dan opsi baris perintah. Topik ini berfokus pada berkas per pengguna karena di situlah alias dan kebiasaan pribadi disusun. Perubahan pada berkas ini berlaku langsung pada koneksi berikutnya tanpa perlu me-restart layanan apa pun, karena yang membacanya adalah klien ssh setiap kali dijalankan, bukan daemon di server.

Isinya tersusun atas blok yang diawali kata kunci Host dan diikuti pola nama host, kemudian baris-baris opsi di bawahnya yang berlaku untuk pola tersebut. Konvensi penulisannya menjorok dengan spasi agar bloknya terbaca, meskipun indentasi tidak diwajibkan. Kata kunci tidak peka huruf besar dan kecil, sedangkan nilai seperti jalur berkas tetap ditulis persis.

Berkas berikut adalah contoh ~/.ssh/config yang membuat alias lab untuk server latihan.

text config
Host lab
    HostName 198.51.100.20
    User budi
    Port 2222
    IdentityFile ~/.ssh/id_ed25519

Host *
    ServerAliveInterval 60

Penjelasan setiap barisnya sebagai berikut.

  • Host lab membuka blok untuk alias bernama lab, dan nama inilah yang dipakai pada baris perintah.
  • HostName 198.51.100.20 menetapkan alamat sebenarnya yang dihubungi ketika alias dipakai.
  • User budi menetapkan nama pengguna, sehingga perintahnya cukup ssh lab tanpa bentuk pengguna@host.
  • Port 2222 menggantikan port 22 sesuai pengaturan sshd di server.
  • IdentityFile ~/.ssh/id_ed25519 memilih kunci privat yang dipakai untuk host ini.
  • Host * adalah pola yang cocok dengan semua host, sehingga opsi di bawahnya berlaku untuk setiap koneksi, termasuk lab.
  • ServerAliveInterval 60 membuat klien mengirim paket penjaga setiap 60 detik agar koneksi yang menganggur tidak diputus oleh perangkat jaringan di sepanjang jalur koneksi.

Alias host dan urutan penilaian#

Alias yang sudah terdaftar dipakai persis seperti alamat biasa oleh ssh dan oleh alat yang menumpang padanya, antara lain scp, sftp, dan rsync. Ketika ssh lab dijalankan, klien mengganti alias itu dengan seluruh opsi dari blok yang cocok, kemudian membuka koneksi ke 198.51.100.20 pada port 2222 sebagai pengguna budi.

bash
# tidak-dijalankan
# klien ssh tidak terpasang di sandbox, sehingga keduanya dicoba pada mesin dengan OpenSSH
ssh lab
# alias yang sama dipakai alat transfer berkas
scp catatan.txt lab:~/

Pada penilaian konfigurasi, nilai pertama yang diperoleh menjadi yang menang, dan aturan inilah yang paling sering menipu. Ketika satu host cocok dengan beberapa blok, klien membaca blok-blok itu dari atas ke bawah dan hanya mengisi opsi yang belum terisi. Blok pertama yang menetapkan suatu opsi dengan demikian mengalahkan blok berikutnya. Aturan ini memaksa blok Host * diletakkan paling bawah, karena apabila berada di atas, blok tersebut menelan opsi yang seharusnya diisi blok yang spesifik.

Pola pada Host tidak terbatas pada satu nama. Pola Host 10.0.* mengelompokkan seluruh mesin pada satu awalan alamat, dan satu blok boleh menyebut beberapa pola sekaligus, misalnya Host lab cadangan. Untuk pengaturan yang dibagi lintas berkas, kata kunci Include menyertakan berkas lain, misalnya Include ~/.ssh/config.d/*.conf.

Opsi yang sering dipakai#

Selain opsi pada contoh di atas, kata kunci berikut paling sering muncul pada berkas config di lapangan.

Kata kunciKegunaan
HostNamealamat asli host, berupa alamat IP atau nama domain
Usernama pengguna default untuk host tersebut
Portport sshd di server apabila bukan 22
IdentityFileberkas kunci privat yang dipakai
IdentitiesOnly yesmembatasi percobaan hanya pada IdentityFile yang disebut
ServerAliveIntervaljarak paket penjaga agar koneksi menganggur tidak diputus
ProxyJumpserver perantara yang dilalui sebelum menuju host tujuan

Opsi IdentitiesOnly yes menyelesaikan keluhan yang umum ketika banyak kunci ada di ~/.ssh. Tanpa opsi itu, klien menawarkan kunci satu per satu, dan server menolak sebelum kunci yang tepat sempat dicoba. Dengan opsi itu, hanya kunci yang disebut IdentityFile yang ditawarkan. ProxyJump menetapkan server perantara, sehingga mesin yang hanya dijangkau dari server latihan dapat ditulis sebagai satu blok lagi tanpa login manual dua kali.

Kesalahan umum#

  • Menempatkan Host * di bagian atas. Nilai pertama yang diperoleh menjadi yang menang, sehingga opsi pada blok spesifik di bawahnya tidak pernah terisi dan semua koneksi memakai nilai umum tersebut.
  • Menyunting config dengan ejaan kata kunci yang keliru. Klien berhenti dengan pesan Bad configuration option alih-alih mengabaikan barisnya, dan pesan itu menyebut nomor baris yang harus dibetulkan.
  • Melonggarkan izin berkas. ssh menolak membaca ~/.ssh/config yang dapat ditulis orang lain dengan pesan Bad owner or permissions, dan perbaikannya adalah chmod 600 ~/.ssh/config.
  • Mengira config berlaku untuk sisi server. Berkas ini hanya dibaca klien, sedangkan sshd diatur pada /etc/ssh/sshd_config.

Ringkasan#

  • ~/.ssh/config berisi blok Host dengan pola dan opsi, dan klien ssh membacanya setiap dijalankan tanpa layanan yang perlu di-restart.
  • Alias seperti lab berlaku untuk ssh, scp, sftp, dan rsync, lalu menyingkat seluruh pilihan port, pengguna, dan kunci.
  • Nilai pertama yang diperoleh menjadi yang menang, sehingga blok Host * selalu diletakkan paling bawah.
  • Opsi IdentitiesOnly, ServerAliveInterval, dan ProxyJump menyelesaikan masalah kunci ganda, koneksi terputus, dan host berlapis.

Referensi#