Login ke Komputer via SSH dengan Public dan Private Key

1591

SSH (Secure Shell) adalah protokol yang digunakan untuk masuk ke dalam remote system dengan aman. Login via SSH bisa dilakukan dengan password maupun authentication key. Tulisan ini akan menyinggung cara yang kedua, yaitu auth key.

Key-based authentication ini menggunakan assymetric cryptography, dimana terdapat sepasang kunci: private key dan public key. Private key bersifat rahasia, sedangkan public key dapat diberikan/dibagikan ke pihak lain sesuai keperluan. Ketika pengguna mencoba login via SSH, remote (misalnya VPS) akan melakukan verifikasi public key yang dimilikinya. Jika user memiliki private key yang valid, maka verifikasi akan berhasil.

Membuat Kunci

Kunci SSH ini idealnya dihasilkan dari komputer lokal (misalnya laptop pribadi) yang digunakan untuk login ke remote system. Pada Debian/Ubuntu, sepasang key ini bisa dibuat dengan perintah:

$ ssh-keygen -t rsa

Ikuti instruksi untuk menentukan lokasi key yang dihasilkan dan tentukan passphrase rahasia.

Ada beberapa parameter yang bisa digunakan:

  • -t tipe_kunci dimana tipe kunci umumnya adalah rsa, bisa juga ecdsa, dsa, atau ed25519. Saya lebih banyak menggunakan ecdsa
  • -b ukuran_kunci dimana ukuran_kunci ini adalah dalam bit. Untuk RSA, pilih saja 4096, sedangkan ECDSA bisa menggunakan 256, 384, atau 521 (recommended)
  • -f lokasi_file dimana lokasi_file adalah nama file (absolute path), misalnya: ~/mykey/pras_key_ecdsa. Jika parameter -f ini tidak digunakan, maka akan ditanyakan setelah tekan Enter

Jika berhasil maka akan muncul randomart image seperti di bawah.

+---[RSA 2048]----+
| o               |
| o + .           |
| . o o .         |
|oo .. . .        |
|*o . + S . . .   |
| +o = .. . o     |
|. *....o.o.E     |
|.=..oo.B=+o      |
|+ +.++OB++.      |
+----[SHA256]-----+

Untuk perintah sesuai contoh di atas, akan dihasilkan dua buah file: id_rsa.pub dan id_rsa. Cek kedua file ini di direktori ~/.ssh.

Mengirim Kunci Publik ke Sistem Luar

Copy public key ke remote server:

$ ssh-copy-id remote

dimana remote adalah user dan alamat IP atau host dengan format user@host. Masukkan password linux user yang disebutkan tadi.

Login ke Sistem Luar via SSH

Di komputer lokal, login via SSH ke remote bisa dilakukan dengan perintah:

$ ssh remote_host -p port

Ganti remote_host danport dengan nilai yang benar. Misalnya:

$ ssh user@situsku.dev -p 262

Pada contoh di atas, port SSH sistem tujuan adalah 262, bukan 22 seperti pada umumnya.

Untuk perintah ssh-copy-id dan ssh, kita juga bisa memilih kunci privat mana yang akan digunakan, dengan parameter i. Misalnya ssh-copy-id -i ~/.ssh/adi-key-ecdsa user@host.

Masukkan passphrase (jika ada) yang tadi dibuat untuk membuka private key dan sistem akan melakukan verifikasi public/private key.