# Token GitHub dan autentikasi Git: personal access token, Git Credential Manager, push tanpa kata sandi

URL: https://skillaria.top/id/guides/git/token-github-autentikasi-git

Sejak Agustus 2021 GitHub tidak lagi menerima kata sandi akun untuk operasi Git lewat HTTPS. Sebagai gantinya dipakai token GitHub (personal access token) atau login lewat Git Credential Manager, yang membuka browser dan menyimpan kredensial sendiri. Token dibuat di Settings → Developer settings di github.com, dimasukkan sebagai pengganti kata sandi saat git push atau git clone, dan disimpan oleh credential.helper.

## Mengapa Git tidak lagi menerima kata sandi GitHub

Jika saat `git push` Anda memasukkan login dan kata sandi GitHub lalu ditolak, penyebabnya bukan salah ketik. Sejak 13 Agustus 2021, GitHub menonaktifkan login dengan kata sandi untuk operasi Git lewat HTTPS. Sebagai gantinya digunakan token GitHub (personal access token, PAT) atau autentikasi lewat browser yang dijalankan oleh Git Credential Manager.

Pesan errornya kira-kira seperti ini:

```
remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/... for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/user/project.git/'
```

Alasannya sederhana: kata sandi akun memberi akses penuh ke semua hal, tidak bisa dibatasi ke satu repositori, dan sulit dicabut. Token dibuat untuk satu tugas, punya masa berlaku dan kumpulan izin, dan jika bocor, Anda bisa mencabutnya dalam satu menit tanpa mengganti kata sandi. GitLab dan Bitbucket juga mengambil jalur yang sama, sehingga hampir semua yang dijelaskan di bawah ini berlaku juga untuk mereka.

## Dua cara autentikasi: HTTPS dan SSH

Git berkomunikasi dengan repositori remote lewat salah satu dari dua protokol, dan dari situ ditentukan bagaimana Anda login.

| Protokol | Alamat repositori | Autentikasi dengan |
| --- | --- | --- |

| HTTPS | `https://github.com/user/project.git` | Token atau Git Credential Manager (login lewat browser) |

| SSH | `git@github.com:user/project.git` | Pasangan kunci SSH: kunci privat di komputer Anda, kunci publik di pengaturan GitHub |

Kunci SSH hanya diatur sekali, dan setelah itu Git tidak meminta login maupun kata sandi lagi. Cara membuat dan menambahkannya ke GitHub sudah dibahas di artikel tentang konfigurasi Git. Di sini kita fokus pada HTTPS, karena di sanalah pemula paling sering diminta kata sandi. Untuk mengetahui protokol repositori Anda, jalankan:

```
git remote -v
origin  https://github.com/user/project.git (fetch)
origin  https://github.com/user/project.git (push)
```

## Cara membuat token GitHub (personal access token)

Personal access token adalah string acak panjang yang diberikan GitHub sebagai pengganti kata sandi untuk akses program. Token classic diawali `ghp_`, sedangkan fine-grained diawali `github_pat_`. Token hanya ditampilkan sekali, tepat setelah dibuat, jadi simpan di pengelola kata sandi.

### Langkah demi langkah

1. Login ke github.com, klik avatar di pojok kanan atas, lalu buka **Settings**.
2. Di menu kiri bawah, pilih **Developer settings**, lalu **Personal access tokens**.
3. Pilih jenis: **Fine-grained tokens** (direkomendasikan) atau **Tokens (classic)**, lalu klik tombol untuk membuat token baru.
4. Beri nama yang jelas (misalnya "laptop, kantor"), masa berlaku, dan izin.
5. Klik tombol generate, lalu langsung salin tokennya.

### Fine-grained atau classic

Token fine-grained dibatasi ke repositori tertentu dan izin tertentu. Untuk pekerjaan kode sehari-hari, pilih repositori yang diperlukan lalu beri izin **Contents: Read and write** pada repositori tersebut. Izin ini cukup untuk clone, pull, dan push. Jika Anda hanya membaca repositori privat, cukup Read-only.

Token classic berlaku untuk semua repositori Anda sekaligus. Untuk push ke repositori diperlukan cakupan `repo`, dan untuk mengubah file di `.github/workflows` juga diperlukan `workflow`. Classic lebih mudah, tetapi lebih berbahaya: jika bocor, seluruh akun ikut terbuka.

### Masa berlaku

GitHub menawarkan beberapa pilihan masa berlaku dan juga memungkinkan tanggal kustom. Token tanpa masa berlaku bisa dibuat, tetapi sebaiknya jangan: token permanen yang terlupakan adalah lubang keamanan klasik. Sebaiknya atur 30–90 hari dan terbitkan ulang saat diingatkan. GitHub akan mengirim pengingat ke e-mail sebelum token berakhir.

## Git push dan git clone dengan token

Memakai token lebih mudah dari yang dibayangkan: Git menanyakan "Password", dan Anda menempelkan token di situ, bukan kata sandi.

```
$ git push origin main
Username for 'https://github.com': your-login
Password for 'https://your-login@github.com':
```

Di terminal, karakter kata sandi tidak ditampilkan. Itu normal: tempel token lalu tekan Enter. Di Git Bash Windows, menempel bisa dilakukan dengan Shift+Insert atau klik kanan.

### Git clone with token

Repositori privat di-clone dengan cara yang sama: `git clone` akan menanyakan login dan token. Jika Anda ingin tanpa pertanyaan (misalnya di skrip), token bisa dimasukkan langsung ke alamat:

```
git clone https://your-login:@github.com/user/project.git
```

Kekurangannya: alamat yang memuat token akan tersimpan di `.git/config` dan bisa masuk ke riwayat shell. Setelah clone, sebaiknya hapus token dari alamat:

```
git remote set-url origin https://github.com/user/project.git
```

Di sistem CI, token diberikan lewat variabel lingkungan rahasia, bukan ditulis ke file. GitHub Actions sudah menyediakan `GITHUB_TOKEN` bawaan untuk repositori saat ini, sehingga PAT terpisah sering tidak diperlukan.

### GitLab: git clone dengan token

Di GitLab, token dibuat di pengaturan profil pada bagian Access tokens. Untuk pekerjaan kode diperlukan cakupan `read_repository` dan `write_repository`. Skemanya sama: login GitLab sebagai nama pengguna, token sebagai kata sandi.

```
git clone https://oauth2:@gitlab.com/group/project.git
```

GitLab menerima nama `oauth2` untuk token pribadi apa pun. Sebagai gantinya, Anda juga bisa menulis login Anda sendiri.

### Git pull dan fetch

Untuk repositori publik, `git pull` dan `git clone` bekerja tanpa autentikasi. Login dan token hanya diminta untuk repositori privat atau saat `git push`. Jika pull di proyek publik tiba-tiba meminta kata sandi, biasanya alamatnya salah ketik: GitHub merespons repositori yang tidak ada dengan cara yang sama seperti repositori yang tertutup.

## Git Credential Manager: apa itu

Memasukkan token setiap kali push itu merepotkan. Pekerjaan ini diambil alih oleh credential helper, yaitu program pembantu yang dipanggil Git saat membutuhkan kredensial. Git memberikan alamat server, lalu program itu mengembalikan login dan kata sandi (atau token) dari penyimpanannya.

Git Credential Manager (GCM) adalah helper yang paling nyaman. Ini program lintas platform dari GitHub dan Microsoft: saat push pertama kali, GCM membuka jendela login atau browser, Anda masuk ke GitHub (termasuk dengan autentikasi dua faktor), lalu GCM mengambil token sendiri dan menyimpannya di penyimpanan aman sistem. Anda tidak perlu membuat PAT secara manual.

GCM mendukung GitHub, GitLab, Bitbucket, dan Azure DevOps. Di Git untuk Windows, GCM dipasang secara default; itulah pilihan credential helper di installer.

### Jenis credential.helper

| Nilai | Tempat penyimpanan | Kapan dipakai |
| --- | --- | --- |

| `manager` | Git Credential Manager: Windows Credential Manager, Keychain macOS, Secret Service di Linux | Pilihan yang direkomendasikan untuk komputer kerja |

| `osxkeychain` | Keychain macOS | Helper standar Git di Mac |

| `cache` | Di memori, default 15 menit | Server Linux yang tidak ingin menyimpan token di disk |

| `store` | Teks biasa di `~/.git-credentials` | Hanya untuk mesin terisolasi; token bisa dibaca siapa pun yang punya akses ke file itu |

## Mengatur autentikasi Git di Windows, macOS, dan Linux

Untuk melihat helper yang sudah aktif:

```
git config --show-origin --get-all credential.helper
```

### Windows

Jika saat instalasi Git Anda membiarkan pengaturan default, GCM sudah berjalan: saat push pertama kali di Git Bash, PowerShell, atau VS Code, jendela login GitHub akan terbuka. Jika helper belum aktif, nyalakan secara manual:

```
git config --global credential.helper manager
```

### macOS

Git di Mac biasanya sudah memakai `osxkeychain`: token yang dimasukkan sekali akan disimpan di Keychain. Untuk login lewat browser, pasang Git Credential Manager (misalnya dengan Homebrew: `brew install --cask git-credential-manager`), yang akan mendaftarkan dirinya sendiri di konfigurasi.

### Linux

Di Linux, GCM dipasang terpisah (paket .deb atau arsip dari rilis proyek), lalu dikonfigurasi dan dipilih penyimpanannya:

```
git-credential-manager configure
git config --global credential.credentialStore secretservice
```

Di server tanpa antarmuka grafis, cache sementara lebih praktis:

```
git config --global credential.helper 'cache --timeout=3600'
```

### Alternatif untuk GitHub: gh auth login

Jika GitHub CLI terpasang, perintah `gh auth login` akan memandu login lewat browser, dan `gh auth setup-git` mengatur Git agar mengambil kredensial dari `gh`. Ini cara praktis untuk "login di Git Bash" dalam satu perintah.

## Cara menghapus atau memperbarui kata sandi Git yang tersimpan

Situasi yang paling sering terjadi: token sudah kedaluwarsa atau Anda berganti akun, tetapi Git terus memakai data lama dan mendapat `Authentication failed`. Hapus entri yang tersimpan, lalu Git akan menanyakan lagi saat push berikutnya.

### Perintah universal

Berlaku untuk semua helper:

```
printf "protocol=https\nhost=github.com\n\n" | git credential reject
```

### Git reset credentials di Windows

Buka "Control Panel" → "Credential Manager" → "Windows Credentials", cari entri berbentuk `git:https://github.com`, lalu hapus. Hal yang sama bisa dilakukan dari command prompt:

```
cmdkey /list | findstr git
cmdkey /delete:git:https://github.com
```

Jika memakai GCM, ada juga perintah khusus untuk keluar dari akun: `git credential-manager github logout <login>`.

### macOS

Buka "Keychain Access", cari entri `github.com` berjenis "Internet password", lalu hapus. Atau dari terminal:

```
git credential-osxkeychain erase
host=github.com
protocol=https
```

Setelah baris terakhir, tekan Enter sekali lagi agar baris kosong dikirim.

### Linux dan store

Untuk `store`, hapus baris github.com dari `~/.git-credentials`. Untuk `cache`, jalankan `git credential-cache exit`.

## Kesalahan autentikasi dan cara memperbaikinya

### Support for password authentication was removed

Anda memasukkan kata sandi akun. Buat token dan tempelkan di kolom Password, atau atur Git Credential Manager. Jika error terus muncul tanpa permintaan kata sandi, berarti kata sandi lama masih tersimpan di penyimpanan. Hapus seperti dijelaskan di atas.

### git push: Authentication failed

Penyebabnya, dari yang paling sering: token sudah kedaluwarsa; token dicabut; token fine-grained tidak punya akses ke repositori ini atau izin Contents hanya baca; penyimpanan berisi data akun lain. Periksa masa berlaku dan izin token di Developer settings, lalu hapus kredensial yang tersimpan.

### remote: Permission denied (403)

Autentikasi berhasil, tetapi akun Anda tidak punya hak tulis ke repositori ini. Pemilik harus menambahkan Anda sebagai Collaborator, atau Anda bekerja lewat fork dan pull request.

### Repository not found

Untuk repositori privat, GitHub tidak mengungkap keberadaannya, sehingga dengan token yang salah ia menulis "not found". Periksa alamat lewat `git remote -v` dan izin token.

### Git clone meminta kata sandi setiap kali

Credential helper belum diatur. Aktifkan `manager` atau `osxkeychain`; setelah input pertama yang berhasil, Git tidak akan bertanya lagi. Alternatifnya, pindah ke SSH.

## Cara menyimpan token dengan aman

- Berikan izin seminimal mungkin: token fine-grained untuk repositori yang dibutuhkan, bukan classic dengan `repo`.
- Atur masa berlaku dan terbitkan ulang token, jangan memperpanjangnya tanpa batas.
- Jangan commit token dan jangan memasukkannya ke alamat remote. Jika token masuk ke repositori publik, GitHub mungkin mencabutnya otomatis, tetapi anggap token itu sudah bocor dan hapus sendiri.
- Gunakan penyimpanan sistem (GCM, Keychain) dan bukan `store`.
- Satu token untuk satu mesin atau satu tugas, supaya jika bocor, Anda hanya perlu mencabut token itu.

## Kesimpulan

Kata sandi GitHub tidak berfungsi untuk Git lewat HTTPS sejak 2021. Ada tiga jalan yang bisa dipakai: login lewat Git Credential Manager di browser, membuat token GitHub dan memasukkannya sebagai pengganti kata sandi, atau beralih ke kunci SSH. Token dibuat di Settings → Developer settings dan disimpan oleh credential.helper. Jika muncul Authentication failed, biasanya terbitkan ulang token dan hapus kredensial lama sudah cukup. Koneksi ke GitHub dan kerja dengan repositori remote dibahas secara praktis dalam kursus Git.

## FAQ

**Bisakah saya melihat token GitHub setelah dibuat?**

Tidak, GitHub hanya menampilkan token sekali. Jika belum sempat disimpan, hapus token lama dan buat yang baru.

**Apakah token diperlukan untuk git clone repositori publik?**

Tidak. Repositori publik bisa di-clone dan diperbarui dengan git pull tanpa autentikasi. Token diperlukan untuk repositori privat dan untuk git push.

**Apa yang terjadi jika masa berlaku token habis?**

Git akan mulai menerima Authentication failed. Buat token baru (atau pakai Regenerate pada token lama), hapus kredensial yang tersimpan, lalu masukkan token baru saat push berikutnya.

**Apakah token GitHub bekerja dengan autentikasi dua faktor?**

Ya, justru token dibutuhkan saat 2FA aktif, karena ia menggantikan kata sandi dan kode konfirmasi untuk operasi Git. Git Credential Manager juga menangani 2FA sendiri saat login lewat browser.

**Di mana Git menyimpan login dan kata sandi?**

Git sendiri tidak menyimpannya. Itu tugas credential helper: Windows Credential Manager, Keychain macOS, Secret Service di Linux, atau file ~/.git-credentials jika memakai helper store.


---
Source: Skillaria.Top (https://skillaria.top)
