Remote SSH tanpa Password

AndriawanAndriawan
5 min read

Tulisan ini adalah bagian dari Remote SSH Series, sehingga untuk bisa membaca secara menyeluruh dan berkesinambungan, alangkah lebih baik bisa membaca secara urut dari link series berikut.

Me-remote device atau khususnya server biasa dilakuan oleh programmer untuk melakukan deploy aplikasi atau sekedar untuk mencopy file dari local device ke remote device. Protocol yang digunakan biasanya adalah SSH (Secure Shell) baik untuk mendapat akses shell dari target device atau untuk sekedar mengcopy file. biasa bisa menggunakan FTP (File Transfer Protocol) hanya saja untuk FTP tidak disarankan karena masalah keamanannya. Lebih disarankan menggunakan SFTP yang memanfaatkan protocol SSH untuk mentransfer data karena dinilai lebih aman.

Pada umumnya kita akan me-remote shell ke PC atau server menggunakan cara menjalankan command seperti ini ssh verri@10.2.0.2. Setelah itu terminal akan meminta kita untuk input password. Setelah kita menginput password, maka kita akan mendapatkan shell dari Remote Device. Tapi bagaimana jika kita ingin mengremote server tanpa password dan juga tanpa mengikutkan user account pada command ssh. Saya akan jelaskan caranya pada tulisan ini.

Generate SSH Key Pairs Baru

Langkah pertama sebelum meng-config ssh yaitu kita perlu men-generate ssh key pairs dengan menggunakan ssh-keygen. Tapi sebelum itu lebih baik kita membuat direktori baru di folder /home/user/.ssh. Sebagai contoh disini saya menggunakan nama direktory remote.

$ mkdir ~/.ssh/remote
$ cd ~/.ssh/remote
$ ssh-keygen -t rsa -b 1024 -C verri@ndriawan

Generating public/private ed25519 key pair.
Enter file in which to save the key (/tmp/keys/id_ed25519):

Pada baris Enter file blablbla, kita diminta untuk menginputkan file path dimana key baru akan distore. Jika pada contoh output di atas, default path akan distore di /tmp/keys dengan nama file id_ed25519. Tapi karena kita sudah membuat folder baru ~/.ssh/remote maka kita bisa inputkan lokasi file keys pada folder tersebut seperti ini ~/.ssh/remote/id_ed25519. Lalu tekan Enter.

Berikut Informasi options dari command:

  • -t : Type key yang dipilih, secara default, type key akan memilih RSA. tapi pada contoh menggunakan ed25519.

  • -b: Panjang bits key, yang dimana pada contoh 1024. Tapi options ini akan di-ignore atau tidak digunakan untuk type key ras, beda dengan RSA yang key lengthnya dinamic dan minimal secure bits-nya adalah 1024.

  • -C: adalah comment, saya menambahkan commit verri@ndriawan sebagi penanda bahwa key itu milik si pembuat key.

Selanjutnya akan muncul pada prompt meminta kita untuk meinputkan password. Kita bisa menginputkan password yang kita inginkan. Tapi password ini optional, jadi tidak menginputkan password pun tidak masalah untuk kepentingan yang tidak terlalu memerlukan keamanan. Kurang lebih output pada terminal akan seperti ini.

Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in ~/.ssh/remote
Your public key has been saved in ~/.ssh/remote/id_ed25519.pub
The key fingerprint is:
SHA:blabla verri@ndriawan
The key's randomart image is:
+---[RSA 1024]----+
|  ..==o.         |
|=...             |
|o                |
+----[SHA256]-----+

Pada contoh key yang digenerate di atas, key akan menggunakan id_ed25519. Penamaan ini bebas. Pengguna bisa mengenerate key pairs dengan nama apa saja. Baiknya penamaan sesuaikan dengan kebutuhan saja.

Setelah generate selesai, maka seharusnya akan ada dua file yang terbuat, yaitu file id_ed25519 dan file id_ed25519.pub. Content dari file id_ed25519.pub inilah yang akan didistribusikan ke server nantinya.

Alur koneksi SSH

Ketika membuka koneksi, SSH akan memastikan pada file ~/.ssh/config apakah destination host ada di dalam config tersebut atau tidak. Jika tidak, maka ssh akan meminta kita sebagai commander untuk mengikutkan argument-argument pada command yang akan dieksekusi. tetapi jika config tersebut ada, maka ssh akan menggunakan config tersebut. Jika kita buka file ~/.ssh/config, isi dari file tersebut kurang lebih ssh config pada sisi client akan terlihat seperti ini.

Host 10.2.0.2
  User root
  IdentityFile ~/.ssh/id_ed25519

Jika kita translate config tersebut ke dalam bentuk command, maka kurang lebih akan menjadi seperti ini.

$ ssh -i ~/.ssh/id_ed25519 root@10.2.0.2

Dimana option (-i) adalah identity file yang merupakan file private key yang digunakan untuk autentikasi. Seperti itulah alur pada sisi client.

Selanjutnya alur pada sisi server, ketika ada permintaan koneksi dari client dengan menggunakan protocol SSH seperti pada contoh sebelumnya, server akan melakukan verifikasi pair key yang ada pada file ~/.ssh/authorized_keys berdasarkan identity file yang diikutkan pada command ssh. Jika pair key dari id tersebut terdaftar pada file authorized_keys, selanjutkan secara sederhananya server dan client akan saling mengautentikasi sehingga akhirnya client mendapatkan shell dari server.

Distribusi Key

Setelah memahami cara autentikasi protocol SSH, maka selanjutnya yang perlu kita lakukan adalah mendistribusikan public key yang sudah dibuat sebelumnya ke server dengan menggunakan contoh command dibawah ini.

$ cat ~/.ssh/id_ed25519.pub | ssh root@10.2.0.2 "cat - >> /root/.ssh/authorized_keys"

lalu coba melakukan koneksi ke server menggunakan command ssh seperti ini

$ ssh -i ~/.ssh/id_ed25519 root@10.2.0.2

Jika berhasil, maka terminal dimana kita menjalankan command SSH tersebut akan mendapatkan shell dari server. Tapi jika gagal melakukan autentikasi, maka yang perlu dilakukan adalah coba merubah mode folder ~/.ssh pada server ke permission 700 dan juga untuk file ~/.ssh/authorized_keys pada server ubah ke mode 600. sebagai contoh command seperti berikut

$ chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys

Selanjutnya coba login ke remote server lagi menggunakan command ssh seperti sebelumnya.

Kesimpulan

SSH adalah protocol aman yang digunakan untuk komunikasi antara dua node. SSH menggunakan berbagai algoritma enkripsi untuk mengauentikasi antar node. Selain menggunakan credential dari host untuk mengautentikasi antar node, SSH juga bisa menggunakan pair keys. Sehingga pengguna tidak perlu menginputkan password ketika mengauntentikasi dengan server. Dengan begitu, password akan tetap terjaga karena tidak akan sering ditransfer dari client ke server. Mengurangi resiko MITM atau keylogger.

0
Subscribe to my newsletter

Read articles from Andriawan directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Andriawan
Andriawan