SSH & Remote — Terminal

SSH — Secure Shell SSH (Secure Shell) adalah protokol untuk mengakses komputer lain secara aman melalui jaringan. Ini adalah cara utama developer mengakses…

SSH (Secure Shell) membuka terminal di komputer lain lewat jaringan, dan semua yang lewat dienkripsi. Kamu mengetik di laptop, perintahnya jalan di server. Untuk membuktikan siapa kamu, SSH bisa memakai password, atau yang lebih aman, SSH key. Mirip kartu contoh tanda tangan di bank: kamu menitipkan contoh tanda tanganmu di bank (server). Tiap datang, kamu menandatangani slip baru dengan tanganmu sendiri, dan petugas mencocokkannya dengan contoh tadi. Bedanya, dari contoh itu gak ada yang bisa memalsukan tanda tanganmu.

🧪 Tebakan cepat: waktu kamu login pakai SSH key, private key-mu ikut dikirim ke server atau gak? Tebak dulu, jawabannya ada di bagian "Login pakai SSH key".

Koneksi pertama: ssh user@host

$ ssh [email protected]
The authenticity of host '192.168.1.100 (192.168.1.100)' can't be established.
ED25519 key fingerprint is SHA256:sIJQN9EZQ3roLfkGIEqUJAtSfNxhTBRoG/FLq8q73xs.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.1.100' (ED25519) to the list of known hosts.
[email protected]'s password:
Welcome to Ubuntu 24.04.1 LTS (GNU/Linux 6.8.0-45-generic x86_64)
...
budi@server:~$ exit
logout
Connection to 192.168.1.100 closed.

Login pakai SSH key

$ ssh-keygen -t ed25519 -C "budi@laptop"
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/budi/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/budi/.ssh/id_ed25519
Your public key has been saved in /home/budi/.ssh/id_ed25519.pub
...
$ ssh-copy-id [email protected]
...
Number of key(s) added: 1
...
$ ssh [email protected]
Welcome to Ubuntu 24.04.1 LTS (GNU/Linux 6.8.0-45-generic x86_64)

Mulai sekarang login gak minta password. Ini yang terjadi di baliknya:

Langkah Siapa Apa
1 laptop "Aku budi, mau masuk pakai key ini", sambil menunjukkan public key-nya
2 server Key itu ada di authorized_keys. Server mengirim tantangan acak
3 laptop Menandatangani tantangan itu dengan private key
4 server Mengecek tanda tangannya dengan public key. Cocok, silakan masuk

Yang dikirim cuma public key dan tanda tangan. Private key gak pernah meninggalkan laptopmu. Itu jawaban tebakannya.

Izin file di ~/.ssh

SSH ketat soal izin, sesuai pelajaran Permission: folder ~/.ssh harus 700, private key 600, public key boleh 644. Kalau private key bisa dibaca orang lain, ssh menolak memakainya:

$ chmod 644 ~/.ssh/id_ed25519
$ ssh [email protected]
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '/home/budi/.ssh/id_ed25519' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/home/budi/.ssh/id_ed25519": bad permissions
[email protected]'s password:

Key-nya diabaikan, jadi ssh kembali minta password. Kalau server-nya sudah menolak password, hasilnya [email protected]: Permission denied (publickey). Obatnya satu: chmod 600 ~/.ssh/id_ed25519.

Shortcut: ~/.ssh/config

Capek mengetik user, alamat, dan port tiap kali? Tulis sekali di ~/.ssh/config:

Host server
    HostName 192.168.1.100
    User budi
    Port 22
    IdentityFile ~/.ssh/id_ed25519

Sekarang ssh server sama dengan ssh [email protected], dan nama server juga jalan di scp dan rsync.

Kirim file: scp dan rsync

scp app.zip [email protected]:/home/budi/          # laptop ke server
scp [email protected]:/var/log/app.log ./          # server ke laptop
scp -r dist/ [email protected]:/var/www/html/      # satu folder, -r = recursive
rsync -avz dist/ [email protected]:/var/www/html/  # cuma mengirim yang berubah

💡 Bonus: SSH tunnel

ssh -L 5432:localhost:5432 [email protected]

Selama koneksi ini terbuka, port 5432 di laptopmu diteruskan lewat SSH ke port 5432 di server. Aplikasi database di laptop cukup terhubung ke localhost:5432, padahal database-nya di server, dan port database itu gak perlu dibuka ke internet.

⚠️ Jebakan yang sering ketemu

TL;DR: ssh user@host membuka terminal terenkripsi di server (port 22, -p untuk port lain), dan koneksi pertama menanyakan sidik jari server lalu mencatatnya di ~/.ssh/known_hosts. ssh-keygen -t ed25519 membuat private key (id_ed25519, rahasia, tetap di laptop) dan public key (id_ed25519.pub, boleh dibagikan). ssh-copy-id memasang public key ke ~/.ssh/authorized_keys di server; setelah itu server mengirim tantangan, laptop menandatanganinya, dan private key gak pernah dikirim. Private key wajib 600, folder ~/.ssh 700. ~/.ssh/config menyimpan shortcut, scp asal user@host:path menyalin file, dan rsync -avz cuma mengirim yang berubah.

Yang akan kamu pelajari