Semenjak versi openssh-server 1:9.0p1-1ubuntu1 di Ubuntu 22.10 “Kinetic Kudu”, OpenSSH pada distro Ubuntu secara default dikonfigurasi dengan menggunakan systemd socket activation atau ssh.socket. Itu artinya service sshd tidak akan dijalankan sampai permintaan koneksi yang masuk diterima oleh server. Menurut Canonical, hal ini bertujuan untuk mengurangi konsumsi memori oleh instance Ubuntu Server secara default, yang sangat penting bagi distro Ubuntu yang berjalan di VM atau kontainer LXD. Dengan sshd tidak berjalan ketika tidak digunakan, kita bisa menghemat memori setidaknya 3 MiB di setiap Virtual Machine, yang mewakili penghematan sekitar 5% pada kontainer Ubuntu Kinetic yang tidak aktif dan masih murni.

Canonical bermaksud untuk membuat OS Ubuntu seefisien mungkin pada hardware maupun di ekosisitem cloud. Itulah mengapa perubahan ini telah diterapkan sebagai bagian dari upaya yang lebih besar untuk mengurangi memori footprint secara default dari image OS Ubuntu. Image Ubuntu 22.04 LXD default pada saat rilis menggunakan RAM sekitar 65 MiB, sementara Ubuntu Kinetic sekarang menggunakan 58 MiB setelah perubahan OpenSSH ini. Canonical mengatakan ada lebih banyak peningkatan yang sekarang sedang dalam proses, dengan tujuan untuk melakukan backport perubahan yang lebih aman ke image Ubuntu 22.04 untuk mengurangi penggunaan memori bagi mayoritas pengguna.

Pada fresh install Ubuntu 22.10 atau versi lebih baru, perubahan perilaku OpenSSH seharusnya sepenuhnya transparan bagi pengguna. Sementara bagi pengguna Ubuntu 22.10, 23.04 maupun 23.10 yang telah mengkonfigurasi pengaturan port SSH (/etc/ssh/sshd_config), ketika mereka menjalankan upgrade sistem mereka akan menemukan pengaturan ini telah dipindahkan ke “/etc/systemd/system/ssh.socket.d/addresses.conf”.

Sebagai pengecualian, jika lebih dari satu pengaturan ListenAddress dideklarasikan, konfigurasi tidak akan dipindah karena ListenStream systemd memiliki semantik yang berbeda. Sehingga, address apa pun yang dikonfigurasi yang tidak ada pada saat proses boot akan menyebabkan unit ssh.socket tidak bisa start. Karena mustahil menentukan secara andal pada saat upgrade sistem apakah “ssh.socket” bisa gagal start saat reboot VM. Jika kita memiliki lebih dari satu ListenAddress yang diterapkan, sistem Ubuntu tidak akan dipindah ke aktivasi SSH berbasis soket, namun sistem daemon akan start ketika proses boot seperti sebelumnya.

Sementara pada distro Ubuntu 24.04 LTS (Noble Numbat) pengaturan ini tidak dipindahkan, namun pengaturan port dan address diambil secara dinamis dari konfigurasi sshd.conf melalui Systemd Generator. Karena adanya aktivasi SSH berbasis socket (socket-based activation) alias ssh.socket atau sebut saja Systemd Socket sejak versi Ubuntu 22.10 “Kinetic Kudu”, pengguna seperti kita mungkin akan kebingungan setelah menerapkan perubahan port SSH default (22) ke post kustom tertentu, namun justru membuat kita kehilangan akses SSH setelah melakukan restart service OpenSSH.

Hal ini lantaran ssh.service tidak aktif secara default, sebaliknya semua pengaturan SSH diterapkan di ssh.socket sejak Ubuntu Kinetic. Jadi meskipun Anda telah merubah port SSH berkali-kali pada file /etc/ssh/sshd_config, konfigurasi perubahan yang telah Anda terapkan itu tidak akan bekerja di Ubuntu 24.04 LTS (Noble Numbat). Itu lantaran OpenSSH berjalan dengan Systemd Socket. Tentu saja, hal paling buruk kita akan kehilangan akses ke server kita dari terminal SSH. Meskipun ada solusi seperti restorasi akses koneksi SSH melalui konsol provider Virtual Machine kita.

Nah, pada tutorial kali ini saya akan share bagaiamana cara menonaktifkan Systemd Socket (ssh.socket) pada distro Ubuntu Noble. Kemudian kita perlu juga aktifkan ssh.service secara manual agar kita bisa melakukan perubahan pada port SSH.

PREREQUISITES:

  • Virtual Machine dengan OS Ubuntu 24.04 LTS (Noble Numbat)
  • Hak Akses Root Penuh (Sudo Privileges)
  • Familiar dengan Baris Perintah Linux
  • Tools: Linux Terminal, Windows Powershell atau PuTTY
1.) Cek Apakah Systemd Socket (ssh.socket) Aktif

Pada distro Ubuntu Noble ada service ssh.socket yang bisa override konfigurasi default sshd_config.

Cek service ssh.socket dengan command berikut ini:

$ systemctl status ssh.socket
2.) Jika ssh.scoket aktif, matikan dan nonaktifkan supaya tidak bentrok dengan ssh.service:
$ sudo systemctl stop ssh.socket
$ sudo systemctl disable ssh.socket
3.) Aktifkan Service SSH saat boot dan kemudian restart:
$ sudo systemctl enable ssh
$ sudo systemctl restart ssh
4.) Reload Systemd Manager
$ sudo systemctl daemon-reload
5.) Kemudian cek status service OpenSSH untuk memastikan service SSH running:
$ systemctl is-enabled ssh
$ systemctl status ssh
6.) Open nomor port SSH kustom Anda di rule Firewall terlebih dahulu (UFW/Iptables), misalnya:
TCP Inbound: 54105
7.) Kemudian coba ganti port SSH default 22 ke nomor port SSH kustom di atas.
$ nano /etc/ssh/sshd_config
Include /etc/ssh/sshd_config.d/*.conf

# When systemd socket activation is used (the default), the socket
# configuration must be re-generated after changing Port, AddressFamily, or
# ListenAddress.
#
# For changes to take effect, run:
#
# systemctl daemon-reload
# systemctl restart ssh.socket
#
#Port 22
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
8.) Restart SSH dan Firewall:
$ systemctl restart ssh
$ systemctl restart iptables
$ systemctl restart ufw

LEAVE A REPLY

Please enter your comment!
Please enter your name here