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.
- Formatnya
ssh user@host:budinama user di server,192.168.1.100alamat server (boleh juga nama domain). SSH memakai port 22; kalau server-nya memakai port lain, tambah-p, misalnyassh -p 2222 [email protected]. - Koneksi pertama ke server baru selalu menanyakan sidik jari (fingerprint) server. Jawab
yes, dan server itu dicatat di~/.ssh/known_hosts. Koneksi berikutnya gak bertanya lagi. - Password yang kamu ketik gak muncul sama sekali, bahkan bintang pun gak. Itu normal.
- Setelah masuk, prompt-nya berubah jadi
budi@server:~$: semua perintah sekarang jalan di server.exitmenutup koneksinya.
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)
ssh-keygen -t ed25519membuat sepasang key dengan algoritma Ed25519.-C "budi@laptop"cuma label supaya kamu ingat key ini punya siapa. Passphrase boleh kosong, tapi lebih aman diisi: dia mengunci file private key-nya.- Hasilnya dua file.
id_ed25519adalah private key: tetap di laptopmu, jangan pernah dibagikan.id_ed25519.pubadalah public key: boleh dibagikan ke server mana pun, juga ke GitHub. ssh-copy-idlogin sekali pakai password, lalu menambahkan isiid_ed25519.pubke file~/.ssh/authorized_keysdi server.
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
scp(secure copy) menyalin file lewat SSH:scp asal tujuan. Sisi server ditulisuser@host:path, dan titik dua itulah yang menandai "ini di server".rsyncmembandingkan dulu, lalu cuma mengirim file yang berubah. Upload ulang folder berisi 2.000 file yang berubah 3 jadi cepat.-amenjaga izin dan waktu file,-vmenampilkan yang dikirim,-zmengompres di jalan, dan-ncuma mencoba tanpa mengirim apa pun.
💡 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
- Membagikan file yang salah. Yang dikirim ke server atau GitHub adalah yang berakhiran
.pub.id_ed25519tanpa.pubadalah private key: jangan dikirim, jangan di-commit. - Izin private key terlalu longgar. Muncul
UNPROTECTED PRIVATE KEY FILEdan key-nya diabaikan.chmod 600 ~/.ssh/id_ed25519. - Lupa titik dua di scp.
scp app.zip [email protected]tanpa:gak mengirim apa pun ke server: dia cuma menyalin ke file lokal bernama[email protected]. - Asal ketik yes. Pertanyaan yes/no cuma muncul untuk server yang baru pertama kali kamu hubungi, dan di situlah sidik jarinya dicek: cocokkan dengan sidik jari dari pengelola server-nya. Kalau yang muncul
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!, sidik jari server berbeda dari yang tercatat diknown_hosts, dan ssh langsung menolak (Host key verification failed.) tanpa bertanya. Bisa karena server-nya di-install ulang, bisa juga ada yang menyadap. Tanya pengelola server-nya dulu, baru hapus catatan lama denganssh-keygen -R 192.168.1.100.
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.