Configuring and Securing SSH
Tags: ramadhanbersamaredhat
Published: 2024-04-03 02:31:46

## **Apa itu OpenSSH?**
OpenSSH mengimplementasikan protokol Secure Shell atau SSH di sistem Red Hat Enterprise Linux. Protokol SSH memungkinkan sistem untuk berkomunikasi dengan cara yang terenkripsi dan aman melalui jaringan yang tidak aman.

Anda dapat menggunakan perintah **ssh** untuk membuat koneksi aman ke sistem remote, mengautentikasi sebagai pengguna tertentu, dan mendapatkan sesi shell interaktif di sistem remote sebagai pengguna tersebut. Anda juga dapat menggunakan perintah ssh untuk menjalankan perintah individu di sistem remote tanpa menjalankan shell interaktif.

## **Contoh Secure Shell**
Perintah ssh berikut akan memasukkan Anda ke server remotehost menggunakan nama pengguna yang sama dengan pengguna lokal saat ini. Dalam contoh ini, sistem remote meminta Anda mengautentikasi dengan kata sandi pengguna tersebut.

**`[user01@host ~]$ ssh remotehost`**
*`user01@remotehost's password:`* **`redhat`**
*`...output omitted...`*
**`[user01@remotehost ~]$`** 

Anda dapat menggunakan perintah **exit** untuk keluar dari sistem remote.

**`[user01@remotehost ~]$ exit`**
*`logout`*
*`Connection to remotehost closed.`*
**`[user01@host ~]$`**

Perintah **ssh** berikutnya akan memasukkan Anda ke server remotehost menggunakan nama pengguna `user02`. Sekali lagi, Anda akan diminta oleh sistem remote untuk mengautentikasi dengan kata sandi pengguna tersebut.

**`[user01@host ~]$ ssh user02@remotehost`**
*`user02@remotehost's password:`* **`shadowman`**
*`...output omitted...`*
**`[user02@remotehost ~]$`**

Perintah **ssh** ini akan menjalankan perintah **hostname** di sistem remotehost sebagai pengguna user02 tanpa mengakses shell interaktif remote.

**`[user01@host ~]$ ssh user02@remotehost hostname`**
*`user02@remotehost's password:`* **`shadowman`**
*`remotehost.lab.example.com`*
**`[user01@host ~]$ `**

Perhatikan bahwa perintah sebelumnya menampilkan output di terminal sistem lokal.

## **Mengidentifikasi Pengguna Jarak Jauh**
Perintah **w** menampilkan daftar pengguna yang sedang login ke komputer. Hal ini sangat berguna untuk menunjukkan pengguna mana yang login menggunakan ssh dari lokasi terpencil mana, dan apa yang mereka lakukan.

**`[user01@host ~]$ ssh user01@remotehost`**
*`user01@remotehost's password:`* **`redhat`**
**`[user01@remotehost ~]$ w`**
 *`16:13:38 up 36 min,  1 user,  load average: 0.00, 0.00, 0.00`*
*`USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT`*
*`user02   pts/0    172.25.250.10    16:13    7:30   0.01s  0.01s -bash`*
*`user01   pts/1    172.25.250.10    16:24    3.00s  0.01s  0.00s w`*
**`[user02@remotehost ~]$ `**

Keluaran sebelumnya menunjukkan bahwa pengguna `user02` telah masuk ke sistem pada terminal pseudo `0` pukul 16:13 hari ini dari host dengan alamat IP `172.25.250.10`, dan telah tidak aktif di prompt shell selama tujuh menit dan tiga puluh detik. Keluaran sebelumnya juga menunjukkan bahwa pengguna user01 telah masuk ke sistem pada terminal pseudo 1 dan telah tidak aktif sejak tiga detik yang lalu setelah menjalankan perintah **w**.

## **Kunci host SSH**
SSH mengamankan komunikasi melalui enkripsi kunci publik. Ketika klien SSH terhubung ke server SSH, server mengirimkan salinan kunci publiknya ke klien sebelum klien masuk. Ini digunakan untuk menyiapkan enkripsi aman untuk saluran komunikasi dan untuk mengautentikasi server ke klien.

Saat pengguna menggunakan perintah **ssh** untuk terhubung ke server SSH, perintah tersebut akan memeriksa apakah pengguna memiliki salinan kunci publik untuk server tersebut di file host lokal yang diketahui. Administrator sistem mungkin telah melakukan pra-konfigurasi di `/etc/ssh/ssh_known_hosts`, atau pengguna mungkin memiliki `~/.ssh/known_hostsfile` di direktori home mereka yang berisi kunci tersebut.

Jika klien mempunyai salinan kunci, **ssh** akan membandingkan kunci dari file host yang dikenal untuk server tersebut dengan yang diterima. Jika kunci tidak cocok, klien berasumsi bahwa lalu lintas jaringan ke server dapat dibajak atau server telah disusupi, dan meminta konfirmasi pengguna apakah akan melanjutkan koneksi atau tidak.

Jika klien tidak memiliki salinan kunci publik di file host yang diketahui, perintah ssh akan menanyakan apakah Anda tetap ingin masuk. Jika Anda melakukannya, salinan kunci publik akan disimpan dalam `~/.ssh/known_hostsfile` Anda sehingga identitas server dapat dikonfirmasi secara otomatis di masa mendatang.

**`[user01@host ~]$ ssh newhost`**
*`The authenticity of host 'remotehost (172.25.250.12)' can't be established.`*
*`ECDSA key fingerprint is SHA256:qaS0PToLrqlCO2XGklA0iY7CaP7aPKimerDoaUkv720.`*
*`Are you sure you want to continue connecting (yes/no)?`* **`yes`**
*`Warning: Permanently added 'newhost,172.25.250.12' (ECDSA) to the list of known hosts.`*
*`user01@newhost's password:`* **`redhat`**
*`...output omitted...`*
**`[user01@newhost ~]$ `**

# **Manajemen Kunci Known Hosts SSH**

Jika kunci publik server berubah karena kunci hilang akibat kegagalan hard drive, atau diganti karena alasan yang sah, Anda perlu mengedit file known hosts untuk memastikan entri untuk kunci publik lama digantikan dengan entri dengan kunci publik baru agar dapat login tanpa kesalahan.

Kunci publik disimpan di file `/etc/ssh/ssh_known_hosts` dan file `~/.ssh/known_hosts` untuk setiap pengguna di klien SSH. Setiap kunci berada di satu baris. Bidang pertama adalah daftar nama host dan alamat IP yang menggunakan kunci publik tersebut. Bidang kedua adalah algoritma enkripsi untuk kunci tersebut. Bidang terakhir adalah kunci itu sendiri.

**`[user01@host ~]$ cat ~/.ssh/known_hosts`**
*`remotehost,172.25.250.11 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBOsEi0e+FlaNT6jul8Ag5Nj+RViZl0yE2w6iYUr+1fPtOIF0EaOgFZ1LXM37VFTxdgFxHS3D5WhnIfb+68zf8+w=`*

Setiap server SSH remote yang Anda hubungkan menyimpan kunci publiknya di direktori `/etc/ssh` dalam file-file dengan ekstensi `.pub`.

**`[user01@remotehost ~]$ ls /etc/ssh/*key.pub`**
*`/etc/ssh/ssh_host_ecdsa_key.pub  /etc/ssh/ssh_host_ed25519_key.pub  /etc/ssh/ssh_host_rsa_key.pub`*