SSH Public Key Authentication (SSH Keys) – Ubuntu 20

Note : Tulisan ini merupakan lanjutan dari 3 tulisan sebelumnya, yaitu

Selain autentikasi dengan username & password, metode autentikasi lain yang bisa digunakan adalah autentikasi dengan SSH public key. Dengan metode ini kita tidak perlu lagi memasukkan password user SSH, cukup mendefinisikan file keynya saja.

Autentikasi SSH menggunakan public key, mungkin secara teknis terlihat tidak lebih aman jika dibandingkan dengan autentikasi username & password karena komputer trusted bisa login tanpa memasukkan password. Tetapi sebenarnya tidak juga, karena seperti yang sudah saya jelaskan pada tulisan sebelumnya (Baca : Secure Shell (SSH)), autentikasi password juga memiliki ancaman tersendiri yaitu brute force.

Public key ini bisa dijadikan pengganti password untuk remote login SSH, lalu metode autentikasi menggunakan password bisa kita disable supaya terhindar dari percobaan brute force. Hati-hati dalam penggunaan SSH key ini, lakukan uji coba terlebih dahulu pada server testing. Jangan sampai setelah autentikasi password di disable, kita malah tidak bisa melakukan remote login ke SSH server.

Berikut adalah tahapan-tahapan yang perlu dilakukan untuk menggunakan SSH public key authentication.

Enable Public Key Authentication

Sebenarnya secara default, autentikasi public key pada server Linux Ubuntu sudah aktif sejak instalasi openssh selesai dilakukan tetapi tidak apa-apa saya akan tetap menunjukkan bagaimana cara untuk mengaktifkannya, incase rekan-rekan menemukan kasus dimana autentikasi public keynya belum aktif.

  • Remote login ke SSH server
  • Pertama edit file konfigurasi SSH dengan perintah “sudo nano /etc/ssh/sshd_config” atau “sudo vi /etc/ssh/sshd_config” lalu cari baris berikut
    #PubkeyAuthentication yes

    Hilangkan tanda pagar pada baris tersebut

    PubkeyAuthentication yes
  • Restart service SSH dengan perintah berikut
    # sudo systemctl restart ssh

Generate SSH Keys (SSH Client)

Setelah enable autentikasi public key dari sisi server, selanjutnya dari sisi SSH client perlu melakukan generate private key & public key yang akan digunakan untuk remote login ke SSH server. Secara garis besar, cara kerjanya kurang lebih seperti ini

  1. Generate SSH keys (Private & public key) client
  2. Salin public key ke SSH server
  3. Remote login dari SSH client ke SSH server dengan private key
  4. Jika private key yang digunakan oleh SSH client match dengan public key yang sudah disalin ke server, maka SSH client diperbolehkan login tanpa memasukkan password

Namun, sama halnya dengan SSH client pada sistem operasi Windows, generate SSH keys pada sistem operasi Windows juga memerlukan aplikasi pihak ketiga. Sedangkan untuk generate SSH keys pada sistem operasi berbasis Unix seperti Linux atau Macos, bisa dilakukan menggunakan aplikasi terminal yang sudah ada.

SSH Client Linux atau Macos

  • Jalankan aplikasi terminal pada sistem operasi Linux atau MacOS
  • Jalankan perintah “ssh-keygen -t rsa -f ~/.ssh/(namafile-key)” untuk generate file SSH keys
    # ssh-keygen -t rsa -f ~/.ssh/server-test
    Generating public/private rsa key pair.
    Enter passphrase (empty for no passphrase): (ENTER)
    Enter same passphrase again: (ENTER)
    Your identification has been saved in /home/raihan/.ssh/server-test.
    Your public key has been saved in /home/raihan/.ssh/server-test.pub.
    The key fingerprint is:
    SHA256:dwSopaqOzSN2DD3dAEgjU7QemhafKLvoEqqQdBzzzms raihan@HP-Notebook
    The key's randomart image is:
    +---[RSA 2048]----+
    |+=+      ..      |
    |.o.o    o  .     |
    | .oo.  +    .    |
    | +=.=.o    .     |
    |++o=.oo S . .    |
    |=+.o+. . . .     |
    |=.o..o           |
    |**oo E.          |
    |X+=...           |
    +----[SHA256]-----+
  • Secara default, file SSH keys hasil generate terletak pada direktori /home/(user)/.ssh/ atau /root/.ssh jika generate SSH key untuk akun root. Masuk ke directory /home/(user)/.ssh untuk melihat file key hasil generate
    # cd /home/raihan/.ssh
    # ls
    server-test.pub server-test

    server-test.pub = public key
    server-test = private key

SSH Client Windows

  • Download aplikasi Putty portable dari link berikut https://the.earth.li/~sgtatham/putty/latest/w64/puttygen.exe
  • Jalankan aplikasi puttygen yang telah didownload
  • Pilih type RSA lalu klik “Generate” untuk generate SSH keys
  • Tunggu proses generate SSH keys selesai, sambil menggerakan cursor mouse pada kotak kosong dibawah progress bar
  • Klik Save private key untuk menyimpan file private keys. Berikan .ppk pada bagian akhir nama file private key
  • Copy teks public key yang ada pada kolom yang saya tandai dengan kotak merah
  • Buat file baru pada folder yang berisi file private key dengan format .pub dibelakang nama public key
  • Open file .pub yang sudah dibuat
  • Paste teks public key ke dalam file tersebut lalu save
  • Proses generate SSH keys akan menghasilkan 2 file sebagai berikut

Salin Public Key Client ke Server

Autentikasi public key tidak cukup hanya dengan generate SSH keys pada SSH client, tetapi kita harus memasukkan public key yang sudah digenerate ke server. Jika public key client tidak ada di SSH server, maka SSH client akan tetap ditanyakan password saat melakukan remote login.

SSH Client Linux atau Macos

  • Jika SSH client yang digunakan berbasis Linux atau Macos, jalankan perintah “ssh-copy-id -i /home/(user)/.ssh/(namafilekey).pub -p (port-ssh) (user-ssh)@(ip-server) ” jika menggunakan port SSH non standard atau “ssh-copy-id -i /home/(user)/.ssh/(namafilekey).pub (user-ssh)@(ip-server)” jika menggunakan port SSH standard
    # ssh-copy-id -i /home/raihan/.ssh/server-test.pub -p 2020 remote@192.168.60.110
    /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/raihan/.ssh/server-test.pub"
    /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
    /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
    
    remote@192.168.60.110's password: (Masukkan password user SSH)
    
    Number of key(s) added: 1
    
    Now try logging into the machine, with:   "ssh -p '2020' 'remote@192.168.60.110'"
    and check to make sure that only the key(s) you wanted were added

SSH Client Windows

  • Jika SSH client yang digunakan berbasis Windows, open file .pub dengan aplikasi notepad lalu copy isi teks public key
  • Jalankan aplikasi Putty, lalu lakukan remote login ke SSH server
  • Edit file .ssh/authorized_keys yang dipakai untuk menyimpan public key client yang trusted. Edit bisa dilakukan dengan perintah “sudo nano .ssh/authorized_keys” atau “sudo vi .ssh/authorized_keys
  • Paste teks public key pada baris paling bawah dan save file tersebut
    Hint : Paste ke putty bisa dilakukan dengan cara klik kanan saat cursor mouse berada di window putty

Remote Login SSH dengan Public Key

Setelah tahapan-tahapan diatas dilakukan, selanjutnya adalah melakukan remote login ke SSH server menggunakan public key yang sudah kita generate dan daftarkan ke dalam SSH server.

SSH Client Linux atau Macos

  • Jalankan aplikasi terminal
  • Lakukan remote login ke SSH server tambahan teks “-i /home/(user)/.ssh/(namafilekey)” dibelakang perintah remote login yang biasa dilakukan
    # ssh remote@192.168.60.110 -p 2020 -i /home/raihan/.ssh/server-test
    ....
    Welcome to Ubuntu 20.04.1 LTS (GNU/Linux 5.4.0-42-generic x86_64)
    Last login: Tue Aug  4 09:50:06 2020 from 192.168.70.11
    remote@server:~#
  • Terlihat tidak ada permintaan password, karena kita sudah menggunakan public key sebagai metode autentikasinya

SSH Client Windows

  • Jalankan aplikasi putty lalu pilih menu klik logo + pada bagian kiri menu SSH yang berada dibawah menu Connection
  • Klik menu Auth lalu klik Browse
  • Pilih file private key (.ppk)
  • Kembali ke menu Session dan lakukan remote login SSH seperti biasa

Disable Password Authentication

Dengan adanya metode autentikasi menggunakan public key ini, kita bisa juga untuk disable autentikasi password SSH server. Jadi remote login hanya bisa dilakukan menggunakan metode autentikasi public key saja, jika public key SSH client belum didaftarkan ke dalam SSH server maka remote login tidak bisa dilakukan oleh SSH client.

Konfigurasi ini bagus untuk mencegah ancaman-ancaman yang ada, seperti brute force password. Karena autentikasi passwordnya di disable, maka percobaan brute force kepada SSH server tidak akan berhasil.

Walaupun demikian, penerapan konfigurasi ini bisa berbahaya apabila SSH client yang biasa kita gunakan (SSH client dengan public key yang sudah didaftarkan ke SSH server) mengalami problem dan tidak bisa terkoneksi ke SSH server. Jika hal tersebut terjadi maka kita tidak akan bisa melakukan remote login ke SSH server karena tidak ada komputer dengan public key yang sudah didaftarkan ke SSH server, dan juga autentikasi password tidak bisa digunakan karena sudah di disable.

Maka dari itu, saya tidak menganjurkan hal ini, kecuali komputer SSH client bisa dipastikan selalu stand by ataupun ada cadangan SSH client lain incase SSH client utama tidak bisa digunakan. Intinya, perlu ada pertimbangan dari sisi rekan-rekan apakah server yang dikelola perlu di disable password authenticationnya atau tidak? Jika ragu server malah tidak bisa diakses karena konfigurasi ini, saya rekomendasikan untuk tidak melakukan ini. Apalagi servernya adalah server production 😀 .

Tetapi saya akan tetap menunjukkan bagaimana cara untuk disable password authentication pada SSH server, incase rekan-rekan ingin mencobanya.

  • Remote login ke SSH server
  • Edit file konfigurasi SSH lalu cari baris berikut
    #PasswordAuthentication yes

    Hilangkan tanda pagar dan ubah “yes” menjadi “no

    PasswordAuthentication no
  • Restart service SSH dengan perintah berikut
    # sudo systemctl restart ssh
  • Lakukan remote login kembali menggunakan metode public key dan juga metode password
    # Public key

    # ssh remote@192.168.60.110 -p 2020 -i /home/raihan/.ssh/server-test
    ....
    Welcome to Ubuntu 20.04.1 LTS (GNU/Linux 5.4.0-42-generic x86_64)
    Last login: Tue Aug  4 11:04:49 2020 from 192.168.60.198
    remote@server:~#

    # Password (Tanpa public key)

    # ssh remote@192.168.60.110 -p 2020
    remote@192.168.60.110: Permission denied (publickey).

Leave a Reply

Your email address will not be published. Required fields are marked *