Cara Menggunakan SSH Key untuk GitHub di Windows

pindipin
09 September 2026
15 min read
Cara Menggunakan SSH Key untuk GitHub di Windows

Setiap kali push atau pull ke GitHub dari project Laravel di Windows, kamu selalu diminta memasukkan username dan Personal Access Token? Itu terasa repetitive, dan kamu mungkin sudah mencoba mencari solusinya — tapi banyak tutorial yang ternyata ditulis untuk Linux, bukan Windows. Perintah eval "$(ssh-agent -s)" yang bebas error di Ubuntu justru memunculkan pesan yang membingungkan di Git Bash kamu. Atau lebih buruk lagi: kamu sudah menjalankan ssh-add di PowerShell, tapi Git tetap minta passphrase setiap kali push.

Masalah-masalah ini bukan kebiasaanmu yang salah. Di Windows, ssh-agent bekerja secara fundamental berbeda dari Linux — agent di Windows adalah sistem service yang tidak otomatis berjalan, bukan proses sesi yang dijalankan manual. Ditambah lagi, ada dua implementasi OpenSSH yang bisa berjalan berdampingan di Windows: satu dari OpenSSH bawaan Windows, satu lagi dari Git for Windows. Keduanya tidak selalu bisa "berbicara" satu sama lain.

Artikel ini memandu setup SSH key untuk GitHub di Windows dari awal — cek key yang sudah ada, generate key baru, jalankan ssh-agent (dengan pemahaman yang benar tentang cara kerjanya di Windows), daftarkan public key ke GitHub, uji koneksi, beralih remote dari HTTPS ke SSH, dan troubleshooting error yang paling sering muncul. Semua perintah mengacu pada dokumentasi resmi GitHub Docs dan OpenSSH Windows.


Apa itu SSH Key dan Mengapa Memakainya untuk GitHub

SSH key adalah pasangan cryptographic key: private key yang disimpan di komputer kamu dan public key yang didaftarkan ke akun GitHub. Saat kamu melakukan git push, GitHub memverifikasi bahwa kamu pemilik private key yang sesuai dengan public key yang terdaftar — tanpa perlu memasukkan username atau token.

Keuntungannya dibandingkan HTTPS: sekali setup, semua operasi git push, git pull, dan git clone berjalan tanpa diminta kredensial lagi. Kamu tidak perlu mengelola Personal Access Token per mesin, tidak perlu memasang credential helper, dan tidak perlu khawatir token expired.

Private Key vs Public Key

Yang perlu kamu ingat: private key tidak boleh pernah dibagikan. Simpan di komputer, jangan kirim ke siapa pun. Public key — file dengan ekstensi .pub — aman didaftarkan ke GitHub dan bisa dibagikan.

GitHub juga memakai SSH key untuk commit signing (menandatangani commit), tapi fokus artikel ini adalah autentikasi — supaya push/pull tidak lagi meminta kredensial.

Pilihan Algoritma: Ed25519 vs RSA

GitHub sudah menghapus DSA keys sejak 2022 dan menuntut RSA baru memakai SHA-2. Rekomendasi modern adalah Ed25519 — lebih cepat, lebih aman, dan ukuran key lebih kecil. Gunakan RSA 4096 hanya untuk sistem legacy yang tidak mendukung Ed25519.


Syarat di Windows

Sebelum generate key, pastikan tiga komponen ini sudah siap di Windows kamu.

OpenSSH Client Bawaan Windows

Windows 10 (versi 1809 ke atas) dan Windows 11 sudah menyertakan OpenSSH Client sebagai optional feature. Tool-nya (ssh.exe, ssh-keygen, ssh-add, ssh-agent) berada di C:\Windows\System32\OpenSSH\.

Kalau belum yakin, cek di PowerShell. Buka PowerShell sebagai Administrator (kedua perintah berikut membutuhkan PowerShell elevated), lalu:

Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH.Client*'

Kalau statusnya NotPresent, aktifkan lewat Settings → Apps → Optional features → Add a feature → OpenSSH Client, atau lewat PowerShell:

Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0

Git for Windows (Git Bash)

Git for Windows adalah terminal yang direkomendasikan oleh dokumentasi GitHub untuk operasi SSH di Windows. Yang penting untuk dipahami: Git for Windows membundel ssh.exe sendiri (dari MSYS2) yang terpisah dari OpenSSH bawaan Windows. Lokasinya di C:\Program Files\Git\usr\bin\.

PowerShell

PowerShell berguna khususnya untuk mengelola service ssh-agent Windows. Perintah Get-Service, Set-Service, dan Start-Service hanya berjalan di PowerShell (tidak di Git Bash).

Peringatan: Dua OpenSSH di Windows

Ini sumber kebingungan terbesar. OpenSSH bawaan Windows dan OpenSSH milik Git for Windows bisa berjalan berdampingan, tapi keduanya tidak selalu kompatibel. Jika kamu menambahkan key ke Windows ssh-agent service lewat PowerShell, Git for Windows mungkin tetap minta passphrase — karena Git memakai ssh.exe miliknya sendiri yang tidak terhubung ke service agent Windows. Solusinya akan dibahas di bagian ssh-agent.


Cek Koneksi dan Setup Awal

Sebelum generate key baru, cek dulu apakah sudah ada key yang bisa dipakai.

Cek Existing SSH Key

Di Git Bash:

ls -al ~/.ssh

Cari file dengan nama id_rsa.pub, id_ecdsa.pub, atau id_ed25519.pub. Kalau salah satunya ada, kamu sudah punya key pair dan bisa langsung daftarkan ke GitHub (skip ke bagian "Menyalin Public Key").

Kalau folder .ssh tidak ada atau kosong, berarti belum punya key — lanjut ke bagian generate.

Di PowerShell bisa juga:

Get-ChildItem $env:USERPROFILE\.ssh

Cek Koneksi ke GitHub

Jalankan di Git Bash:

ssh -T git@github.com

Kalau belum punya key, kamu akan melihat error seperti "Permission denied (publickey)" — ini normal. Kalau sudah ada key yang benar, muncul pesan "Hi USERNAME! You've successfully authenticated...".

Penting: gunakan user git (git@github.com), bukan username GitHub kamu. Menggunakan username pribadi akan selalu gagal.

Cek Key yang Ter-load di Agent

ssh-add -l -E sha256

Jika tidak mencetak apa pun, berarti tidak ada key yang ter-load di ssh-agent — perlu generate dan tambahkan.


Generate SSH Key di Windows

Buka Git Bash dan jalankan:

ssh-keygen -t ed25519 -C "email@example.com"

Flag -t ed25519 memilih algoritma modern. Flag -C "email@example.com" hanya label/komentar pada key — tidak harus email, tapi disarankan pakai email GitHub supaya mudah dikenali.

Lokasi Default

Saat diminta lokasi penyimpanan, tekan Enter untuk pakai default. Di Git Bash akan tampil:

Enter file in which to save the key (/c/Users/YOU/.ssh/id_ed25519):

Ini menyimpan key ke C:\Users\YOU\.ssh\id_ed25519 (private key) dan id_ed25519.pub (public key). Kalau sudah pernah buat key dan tidak mau menimpa, beri nama custom saat prompt muncul.

Passphrase

Saat diminta passphrase, kamu bisa mengosongkannya atau mengisinya. Passphrase mengamankan private key — kalau komputer kamu diakses orang lain, tanpa passphrase mereka bisa langsung memakai key.

Kalau kamu mengisi passphrase tapi tidak ingin memasukkannya setiap kali push, tambahkan key ke ssh-agent. Agent akan "mengingat" passphrase selama agent berjalan.

Untuk mengubah passphrase tanpa membuat ulang key:

ssh-keygen -p -f ~/.ssh/id_ed25519

Alternatif RSA untuk Sistem Legacy

Kalau kompatibilitas jadi concern (misalnya harus mendukung server lama), gunakan:

ssh-keygen -t rsa -b 4096 -C "email@example.com"

Tapi untuk kebanyakan kasus, Ed25519 sudah cukup.


Menjalankan ssh-agent di Windows

Di sinilah Windows berbeda secara fundamental dari Linux, dan di sinilah kebanyakan developer bingung.

Perbedaan: Service vs Proses

Di Linux, ssh-agent dijalankan sebagai proses per-sesi dengan eval "$(ssh-agent -s)". Agent berjalan di background untuk sesi shell saat itu, biasanya dimulai otomatis.

Di Windows, ssh-agent adalah Windows system service bernama "OpenSSH Authentication Agent". Service ini tidak otomatis berjalan — default-nya Disabled atau Manual. Kalau kamu menjalankan ssh-add tanpa memulai service dulu, akan muncul error "Could not open a connection to your authentication agent".

Perbedaan ini menjelaskan kenapa banyak tutorial Linux tidak langsung berfungsi di Windows.

Cara 1: Menggunakan Service Windows (PowerShell)

Ini cara yang paling stabil untuk Windows karena agent berjalan lintas-sesi.

Buka PowerShell sebagai Administrator, lalu:

Get-Service -Name ssh-agent | Set-Service -StartupType Manual
Start-Service ssh-agent

Setelah service berjalan, di PowerShell biasa (tidak perlu admin lagi), tambahkan key:

ssh-add c:/Users/YOU/.ssh/id_ed25519

Ganti YOU dengan nama folder user kamu. Kalau diminta passphrase, masukkan.

Agar ssh-agent otomatis start saat login (tidak perlu start manual tiap reboot):

Set-Service ssh-agent -StartupType Automatic
Start-Service ssh-agent

Cara 2: Menggunakan Git Bash (eval)

Ini cara yang didokumentasikan GitHub untuk Git Bash:

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519

Perintah eval memulai ssh-agent sebagai proses di background untuk sesi Git Bash saat itu. Agent berhenti saat kamu logout atau shutdown.

Peringatan penting: eval "$(ssh-agent -s)" bisa gagal jika ssh-agent sudah berjalan sebagai service Windows. Kalau kamu sudah mengaktifkan service di PowerShell, lebih baik gunakan cara service atau pastikan kedua cara tidak konflik.

Auto-start ssh-agent di Git Bash

Jika kamu lebih suka pakai Git Bash, tambahkan skrip berikut ke ~/.bashrc atau ~/.profile. Skrip ini dari dokumentasi resmi GitHub:

env=~/.ssh/agent.env
agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }
agent_start () {
    (umask 077; ssh-agent >| "$env")
    . "$env" >| /dev/null ; }
agent_load_env
agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)
if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
    agent_start
    ssh-add
elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
    ssh-add
fi
unset env

Setelah ini, setiap kali membuka Git Bash kamu akan diminta passphrase sekali (selama sesi itu berlangsung).

Mengatasi Konflik Dua OpenSSH

Jika kamu sudah menambahkan key ke Windows ssh-agent service lewat PowerShell, tapi Git for Windows tetap minta passphrase, penyebabnya adalah konflik dua OpenSSH.

Solusinya — paksa Git memakai OpenSSH bawaan Windows:

git config --global core.sshCommand "C:/Windows/System32/OpenSSH/ssh.exe"
git config --global gpg.ssh.program "C:/Windows/System32/OpenSSH/ssh-keygen.exe"

Atau saat install/reinstall Git for Windows, centang opsi "Use external OpenSSH".

Alternatif lain: pastikan PATH memakai C:\Program Files\Git\usr\bin terlebih dahulu, atau jalankan start-ssh-agent.cmd dari instalasi Git yang mengatur SSH_AUTH_SOCK dan SSH_AGENT_PID.


Menyalin dan Menambahkan Public Key ke GitHub

Key sudah di-generate, sekarang salin public key dan daftarkan ke akun GitHub.

Menyalin Public Key ke Clipboard

Di Git Bash:

clip < ~/.ssh/id_ed25519.pub

Git Bash (bash) mendukung operator <, jadi perintah ini berjalan normal di sini. Error The '<' operator is reserved for future use hanya muncul kalau perintah yang sama dijalankan di Windows Terminal atau PowerShell versi baru. Kalau kamu mengalami error itu, gunakan alternatif ini:

cat ~/.ssh/id_ed25519.pub | clip

Di PowerShell:

Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub | Set-Clipboard

Alternatif manual: buka file .pub di text editor (misalnya Notepad), salin isi file, pastikan tidak ada whitespace atau newline tambahan di awal/akhir.

Mendaftarkan ke GitHub

  1. Buka GitHub, klik gambar profil di kanan atas → Settings.
  2. Di sidebar kiri, bagian "Access", klik SSH and GPG keys.
  3. Klik New SSH key.
  4. Isi Title dengan label yang deskriptif — misalnya "Laptop pribadi" atau "PC kantor". Ini penting supaya mudah dikenali dan dicabut kalau perangkat hilang.
  5. Pilih tipe key authentication (bukan signing, kecuali kamu mau pakai untuk commit signing).
  6. Paste isi public key ke kolom Key.
  7. Klik Add SSH key, dan konfirmasi jika ada prompt.

Alternatif via GitHub CLI

Kalau sudah punya gh CLI terinstall:

gh ssh-key add ~/.ssh/id_ed25519.pub --type authentication --title "Laptop pribadi"

Uji Koneksi SSH

Setelah public key terdaftar di GitHub, uji koneksi.

ssh -T git@github.com

Jalankan di Git Bash:

ssh -T git@github.com

Pertama kali connecting, kamu akan melihat peringatan:

The authenticity of host 'github.com' can't be established.
ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

GitHub umumnya menampilkan alamat IP (misalnya github.com (140.82.121.4)) di baris pertama — IP ini bisa berbeda per lokasi dan berubah seiring waktu, jadi jangan dianggap tetap. Yang perlu kamu verifikasi adalah fingerprint di baris kedua. Ketik yes. Verifikasi fingerprint cocok dengan fingerprint ED25519 GitHub di atas. Ini langkah keamanan untuk memastikan kamu tidak terhubung ke server palsu.

Kalau koneksi berhasil:

Hi USERNAME! You've successfully authenticated, but GitHub does not provide shell access.

Exit code 1 di sini adalah normal — bukan error.

Debugging

Kalau kamu mendapat "Permission denied (publickey)", jalankan versi verbose untuk melihat detail:

ssh -vT git@github.com

Ini menunjukkan step-by-step autentikasi: key mana yang dicoba, apakah agent ditemukan, dan di mana prosesnya gagal.

Cek juga key yang ter-load:

ssh-add -l -E sha256

Pastikan fingerprint key kamu muncul di daftar.

SSH over Port 443

Kalau firewall memblokir port 22, kamu bisa SSH lewat port HTTPS (443):

ssh -T -p 443 git@ssh.github.com

Kalau berhasil, set permanen di ~/.ssh/config:

Host github.com
  Hostname ssh.github.com
  Port 443
  User git

Memakai SSH untuk Git

Koneksi sudah teruji, sekarang saatnya pakai SSH untuk operasi Git.

Format URL SSH GitHub

Perhatikan formatnya — ada colon setelah host, bukan slash:

git@github.com:USER/REPO.git

Bandingkan dengan HTTPS:

https://github.com/USER/REPO.git

Mengganti Remote dari HTTPS ke SSH

Kalau project kamu sekarang masih pakai HTTPS, ganti remote-nya:

git remote set-url origin git@github.com:USER/REPO.git
git remote -v

set-url mengganti URL in-place dan mempertahankan tracking branch — lebih aman dari git remote remove + git remote add. Verifikasi dengan git remote -v untuk memastikan URL sudah benar. Cara mengganti URL remote ini sudah kita bahas lebih dalam di artikel tentang cara mengganti remote repository.

Lalu tes dengan fetch:

git fetch origin

Kalau fetch berhasil tanpa diminta kredensial, SSH sudah berfungsi.

Clone lewat SSH

Untuk repository baru, clone langsung pakai SSH:

git clone git@github.com:USER/REPO.git

Remote origin otomatis ter-set. Setelah clone, langsung bisa git push tanpa diminta kredensial.


Mengatasi Error Umum di Windows

Berikut error yang paling sering muncul saat setup SSH key di Windows beserta solusinya.

"Permission denied (publickey)"

Penyebab: Server GitHub menolak koneksi SSH. Penyebab paling umum:

  1. Public key belum didaftarkan di akun GitHub.
  2. Salah user — memakai ssh -T USERNAME@github.com bukannya ssh -T git@github.com.
  3. Key tidak di-load ke ssh-agent.

Solusi:

  • Pastikan public key sudah terdaftar di Settings → SSH and GPG keys.
  • Selalu pakai git@github.com, bukan username kamu.
  • Jalankan ssh-agent lalu ssh-add ~/.ssh/id_ed25519.
  • Debug: ssh -vT git@github.com untuk melihat detail.

"Could not open a connection to your authentication agent"

Penyebab: ssh-agent belum berjalan. Ini error khas Windows karena agent adalah service yang tidak otomatis aktif.

Solusi:

  • Di Git Bash: eval "$(ssh-agent -s)" lalu ssh-add ~/.ssh/id_ed25519.
  • Di PowerShell admin: Start-Service ssh-agent, lalu ssh-add c:/Users/YOU/.ssh/id_ed25519.
  • Set auto-start agar tidak perlu start manual tiap reboot.

Git Minta Passphrase Tiap Push (Konflik Dua OpenSSH)

Penyebab: Key sudah di-load ke Windows ssh-agent service via PowerShell, tapi Git for Windows memakai ssh.exe MSYS2 yang tidak terhubung ke service tersebut.

Solusi:

git config --global core.sshCommand "C:/Windows/System32/OpenSSH/ssh.exe"
git config --global gpg.ssh.program "C:/Windows/System32/OpenSSH/ssh-keygen.exe"

Atau reinstall Git for Windows dengan opsi "Use external OpenSSH".

"The '<' operator is reserved for future use"

Penyebab: Perintah clip < ~/.ssh/id_ed25519.pub gagal di PowerShell modern karena operator < tidak didukung.

Solusi:

  • Pakai cat ~/.ssh/id_ed25519.pub | clip di Git Bash.
  • Atau Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub | Set-Clipboard di PowerShell.

Passphrase Terlupakan

Passphrase tidak bisa dipulihkan. Jika kamu masih ingat passphrase lama, ganti:

ssh-keygen -p -f ~/.ssh/id_ed25519

Kalau sudah lupa passphrase sepenuhnya, generate key pair baru, daftarkan public key baru ke GitHub, dan hapus key lama dari Settings → SSH and GPG keys.

Multiple Key untuk Beberapa Akun

Kalau kamu punya beberapa akun GitHub (pribadi dan kantor), default hanya satu key yang dipakai. Solusinya: buat key per akun dengan nama berbeda, lalu konfigurasi ~/.ssh/config dengan Host alias.

Generate key kedua:

ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_kerja -C "kerja@company.com"
ssh-add ~/.ssh/id_ed25519_kerja

Buat atau edit ~/.ssh/config:

Host github.com-work
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519_kerja

Lalu clone repo akun kedua pakai alias:

git clone git@github.com-work:perusahaan/proyek.git

Firewall Memblokir SSH (Port 22)

Kalau port 22 diblokir firewall atau proxy, gunakan SSH over port 443:

ssh -T -p 443 git@ssh.github.com

Jika berhasil, atur ~/.ssh/config agar selalu pakai port 443 untuk GitHub.


Best Practices Menggunakan SSH Key di Windows

Keamanan key:

  • Gunakan Ed25519 (ssh-keygen -t ed25519) sebagai default.
  • Set passphrase pada private key — lapisan keamanan tambahan jika komputer diakses orang lain.
  • Jangan pernah membagikan private key (id_ed25519). Public key (id_ed25519.pub) aman didaftarkan ke GitHub.
  • Beri label deskriptif pada key di GitHub supaya mudah dikenali dan dicabut.

Manajemen ssh-agent:

  • Pahami perbedaan service Windows (lintas-sesi) vs proses Git Bash (per-sesi).
  • Kalau ragu, pakai service Windows dengan auto-start — lebih konsisten.
  • Jangan biarkan kedua cara berjalan bersamaan tanpa konfigurasi core.sshCommand.

Perawatan akun GitHub:

  • Rutin review key di Settings → SSH and GPG keys. Cabut key yang tidak dikenal atau sudah tidak dipakai.
  • GitHub otomatis menghapus key inactive setelah sekitar 1 tahun.
  • Beralih dari HTTPS ke SSH pakai git remote set-url untuk kenyamanan kerja harian.

Beralih ke SSH dari HTTPS:

git remote set-url origin git@github.com:USER/REPO.git
git remote -v
git fetch origin

Penutup

Setup SSH key untuk GitHub di Windows sebenarnya satu alur yang lurus: generate key, jalankan ssh-agent, tambahkan key ke agent, daftarkan public key ke GitHub, dan uji koneksi. Yang bikin Windows spesial — dan sering bikin bingung — adalah ssh-agent yang berupa service sistem (bukan proses sesi seperti Linux), plus konflik antara OpenSSH bawaan Windows dengan OpenSSH milik Git for Windows.

Poin kunci yang perlu diingat:

  • ssh-keygen -t ed25519 untuk generate key baru, ssh -T git@github.com untuk uji koneksi.
  • Di Windows, jalankan ssh-agent lewat PowerShell admin (Start-Service ssh-agent) atau Git Bash (eval "$(ssh-agent -s)").
  • Jika Git tetap minta passphrase meski sudah ssh-add, paksa pakai core.sshCommand ke OpenSSH Windows.
  • git remote set-url origin git@github.com:USER/REPO.git untuk beralih dari HTTPS ke SSH tanpa kehilangan tracking branch.
  • Selalu pakai user git (git@github.com), bukan username GitHub.

Dengan SSH key yang sudah ter-setup, workflow Laravel di Windows jadi jauh lebih mulus — push, pull, dan clone berjalan tanpa diminta kredensial berulang.

Setup SSH key juga erat kaitannya dengan cara menghubungkan project lokal ke GitHub dan cara mengganti remote repository agar workflow Git mu semakin rapi.

Untuk pendalaman, dokumentasi resmi adalah rujukan terbaik: About SSH, Generating a new SSH key and adding it to the ssh-agent, Adding a new SSH key to your GitHub account, Working with SSH key passphrases, Testing your SSH connection, dan Error: Permission denied (publickey).

Bagikan Artikel:
Diskusi & Komentar

Fitur komentar belum diaktifkan oleh administrator.

Artikel Terkait

Selesai membaca? Kembali ke beranda untuk melihat artikel menarik lainnya.

Kembali ke Beranda