Chapter sebelumnya ditutup dengan satu janji: bila jalur SSH yang dipilih, tiga pekerjaan masih menunggu — membuat pasangan kunci, mengamankan kunci privatnya, dan mendaftarkan kunci publiknya ke platform. Autentikasi SSH bertumpu pada kriptografi asimetri: satu kunci privat yang tidak boleh meninggalkan komputer, dan satu kunci publik yang justru sengaja dibagikan. Bagian mana yang diberikan ke siapa sering membingungkan pemula, padahal aturannya tegas dan sederhana. Chapter ini mengerjakan ketiganya dengan perintah nyata, lalu menyiapkan praktik terbaiknya lewat berkas konfigurasi SSH.
Pasangan Kunci Privat dan Publik #
Mekanismenya menyerupai gembok dan kunci fisik, dengan satu batas analogi: tidak ada benda yang “terkunci” — yang terjadi adalah pertukaran tantangan matematika. Kunci publik terdaftar di platform sebagai data; kunci privat tersimpan di komputer sebagai rahasia. Saat koneksi dibuka, platform mengirim tantangan yang hanya bisa dijawab pemegang kunci privat yang cocok, lalu memverifikasi jawaban itu dengan kunci publiknya. Pembuktian selesai tanpa kunci privat pernah dikirim ke mana pun.
Dua konsekuensi praktis mengikuti: satu kunci publik boleh didaftarkan ke banyak platform sekaligus — bagikan saja gemboknya — sedangkan siapa pun yang memegang salinan kunci privat bisa menyamar sebagai kita di semua tempat kunci itu terdaftar. Kunci privat dijaga seperti kata sandi utama.
Satu detail yang sering luput: Git tidak punya mesin SSH sendiri. Saat bertemu alamat [email protected]:..., Git memanggil program ssh milik sistem — dan ssh-lah yang mencari kunci di ~/.ssh. Mengelola kunci berarti mengelola berkas di direktori itu, bukan pengaturan di dalam Git.
Membuat Kunci ed25519 #
Perintah pembuatnya satu baris. Di mesin sungguhan, bentuk yang dianjurkan untuk kunci pertama:
ssh-keygen -t ed25519 -C "[email protected]"Tiga bagiannya: -t ed25519 memilih jenis kunci, -C memberi komentar pelacak, dan sisanya interaktif — ssh-keygen menanyakan lokasi penyimpanan (default ~/.ssh/id_ed25519, cukup tekan Enter) lalu passphrase opsional. Sandbox memakai bentuk ekuivalen yang menunjuk lokasi khusus dan mengosongkan passphrase agar bisa dijalankan otomatis:
mkdir latihan-ssh-key && cd latihan-ssh-key
ssh-keygen -t ed25519 -C "[email protected]" -f id_ed25519 -N ""Output yang Dihasilkan:
Generating public/private ed25519 key pair.
Your identification has been saved in id_ed25519
Your public key has been saved in id_ed25519.pub
The key fingerprint is:
SHA256:zQO7EJQGYc0U9xrEgtxTZaOLuXAhfvf1gTEXq3jrwIU [email protected]
The key's randomart image is:
+--[ED25519 256]--+
| .+O+=+.+ . |
| .o.Oo.+ . o |
| ..oo+ . o o |
| . . = O o * |
| o * S E * . |
| + + + = o . |
| . . + . . |
| o |
| . |
+----[SHA256]-----+Kunci ed25519 selalu acak — fingerprint, randomart, dan isi kunci di mesin kita akan berbeda dari keluaran di atas; struktur barisnya sajalah yang sama. Bagian demi bagian layak dibedah:
- Baris pertama mengonfirmasi pasangan kunci sedang dibuat — satu proses, dua berkas.
- Dua baris “has been saved” mencatat lokasi masing-masing berkas:
id_ed25519untuk kunci privat,id_ed25519.pubuntuk kunci publik. Jalur menyesuaikan lokasi direktori kerja. - Fingerprint (
SHA256:zQO7...) adalah ringkasan pendek kunci publik — identitas kunci dalam satu baris. Platform menampilkan fingerprint yang sama saat kunci didaftarkan; kecocokannya membuktikan kunci yang terdaftar memang milik kita. - Randomart menggambar fingerprint yang sama dalam pola ASCII — bukan keamanan tambahan, melainkan bantuan membandingkan dua kunci secara sekilas, lebih mudah daripada membaca deretan karakter acak.
Alasannya: ed25519 modern, kuncinya pendek (sekitar 68 karakter base64), dan verifikasinya cepat. Alternatif klasik ssh-keygen -t rsa -b 4096 sah untuk lingkungan lama yang belum mengenal ed25519. Komentar -C murni label di akhir kunci publik — umumnya email, agar mudah mengenali pemilik kunci di daftar platform.
Dua Berkas dan Izinnya #
Perintah pembuat kunci meninggalkan dua berkas dengan dua nasib berbeda. Izin berkasnya sendiri sudah disetel benar oleh ssh-keygen:
ls -l id_ed25519 id_ed25519.pubOutput yang Dihasilkan:
-rw------- 1 z z 411 Oct 13 13:21 id_ed25519
-rw-r--r-- 1 z z 98 Oct 13 13:21 id_ed25519.pubNama pengguna dan waktu menyesuaikan mesin; yang penting pola izinnya. Kunci privat rw------- (600) — hanya pemilik boleh membaca, dan ssh menolak memakai kunci privat yang izinnya terlalu terbuka. Kunci publik rw-r--r-- (644) — bebas dibaca karena bukan rahasia.
Isi kunci publik dibaca dengan cat — ini cara resmi menyalinnya ke platform:
cat id_ed25519.pubOutput yang Dihasilkan:
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIP4YuJZlOwwqsLPf5Gy9VcLldPT0ormnzNYKZhzmlG8S [email protected]Satu baris itu terdiri dari tiga bagian yang dipisah spasi:
| Bagian | Isi pada contoh | Perannya |
|---|---|---|
| skema | ssh-ed25519 | jenis kunci — dibaca oleh ssh saat verifikasi |
| kunci publik | AAAA...zmlG8S | materi kunci yang sebenarnya — unik per pasangan |
| komentar | [email protected] | label pelacak dari opsi -C — tidak memengaruhi fungsi |
Fingerprint versi ringkas bisa ditanyakan ulang kapan pun tanpa membuka berkas kunci:
ssh-keygen -lf id_ed25519.pubOutput yang Dihasilkan:
256 SHA256:zQO7EJQGYc0U9xrEgtxTZaOLuXAhfvf1gTEXq3jrwIU [email protected] (ED25519)Angka 256 adalah panjang kunci dalam bit; hash SHA256:... sama persis dengan fingerprint saat pembuatan — alat pencocok kunci lokal dengan daftar kunci di platform.
Mendaftarkan Kunci ke Platform #
Pendaftaran adalah urusan formulir web: tempel isi berkas .pub utuh — satu baris, tanpa terpotong — lalu simpan. Jalur menunya per platform:
| Platform | Jalur pengaturan | Tombol |
|---|---|---|
| GitHub | Settings → SSH and GPG keys | New SSH key |
| GitLab | Preferences (User Settings) → SSH Keys | Add new key |
| Bitbucket | Personal Bitbucket settings → SSH keys | Add key |
Beri judul yang mengenali perangkat, misalnya laptop-budi, agar mudah memutuskan kunci mana yang dicabut saat ganti komputer. Setelah tersimpan, halaman pengaturan menampilkan fingerprint kunci — cocokkan dengan keluaran ssh-keygen -lf di atas sebagai konfirmasi akhir. Panduan lengkapnya tersedia di dokumentasi GitHub tentang menambah kunci SSH
.
Menguji Koneksi dengan ssh -T #
Sebelum dipakai Git, koneksi bisa diuji langsung ke server platform:
ssh -T [email protected]Opsi -T meminta sesi tanpa terminal — platform memang tidak memberi shell, jadi uji ini murni membuktikan autentikasi. Koneksi pertama akan menanyakan keaslian host (The authenticity of host 'github.com' can't be established...); jawab yes dan sidik jari server tersimpan di ~/.ssh/known_hosts, tak ditanyakan lagi. Bila kunci terdaftar benar, GitHub menyambut dengan pesan yang kira-kira berbunyi:
Hi budi! You've successfully authenticated, but GitHub does not provide shell access.Keluaran di atas adalah perilaku platform yang didokumentasikan — sandbox tidak menjalankannya karena butuh akun dan jaringan sungguhan; bentuk sambutannya tercatat di dokumentasi GitHub tentang menguji koneksi SSH
. GitLab menyapa serupa (Welcome to GitLab, @budi!). Satu kejutan kecil: GitHub menolak memberi shell, jadi ssh -T mengembalikan kode gagal meski autentikasinya sukses — pesan sambutan itulah tanda berhasilnya, bukan kode keluarnya.
Praktik ~/.ssh/config: Alias untuk Banyak Akun #
Seiring waktu kebutuhan muncul: akun pribadi di GitHub sekaligus akun kantor di GitLab, dua kunci berbeda untuk dua identitas. Menyimpan itu semua lewat alias di ~/.ssh/config membuat tiap akun punya nama pendeknya sendiri:
# Akun pribadi di GitHub
Host github-budi
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519
# Akun kerja di GitLab
Host gitlab-kantor
HostName gitlab.com
User git
IdentityFile ~/.ssh/id_ed25519_kantorEmpat baris tiap blok punya tugasnya: Host mendefinisikan alias yang kita ketik, HostName mesin sungguhan yang dituju, User nama pengguna SSH untuk Git selalu git, dan IdentityFile kunci privat yang dipakai untuk alias itu. Alias lalu dipakai sebagai pengganti nama host di alamat remote:
git remote add origin github-budi:budi/toko-buku.git
git remote -vOutput yang Dihasilkan:
origin github-budi:budi/toko-buku.git (fetch)
origin github-budi:budi/toko-buku.git (push)Alamat remote jadi pendek dan terbaca; detail mesin dan kunci disembunyikan di konfigurasi SSH. Konfigurasi bisa diperiksa tanpa koneksi — ssh -G <alias> mencetak seluruh opsi teratasi tanpa menyentuh jaringan:
ssh -G github-budi | grep -E '^(hostname|user|identityfile) 'Output yang Dihasilkan:
user git
hostname github.com
identityfile ~/.ssh/id_ed25519Tiga baris itu membuktikan alias github-budi benar: pengguna git, tujuan github.com, kunci ~/.ssh/id_ed25519. Sandbox memakai bentuk -F <berkas> agar tidak menyentuh ~/.ssh sungguhan; di mesin kita ssh -G github-budi polos sudah cukup karena ~/.ssh/config terbaca otomatis. Trik -G juga alat debug tercepat saat koneksi bermasalah: salah ketik HostName langsung terlihat tanpa menunggu timeout.
Kunci terpasang, alias siap, koneksi teruji — jalur SSH tuntas dari ujung ke ujung. Jalur satunya, HTTPS, menunggu dengan urusan yang sama sekali berbeda: di sana yang diminta bukan pasangan kunci, melainkan token buatan sendiri yang bisa dibatasi dan dicabut. Kita buat dan pakai token itu di chapter berikutnya.