TLDR; Gunakan file netrc terenkripsi dengan Git 1.8.3+ .
Menyimpan kata sandi untuk URL HTTPS repositori Git dimungkinkan dengan ~/.netrc
(Unix) atau %HOME%/_netrc
(perhatikan _
) pada Windows.
Tetapi : File itu akan menyimpan kata sandi Anda dalam teks biasa.
Solusi : Enkripsi file itu dengan GPG (GNU Privacy Guard) , dan buat Git mendekripsi file itu setiap kali membutuhkan kata sandi (untuk push
/ pull
/ fetch
/ clone
operasi).
Catatan: dengan Git 2.18 (Q2 2018), Anda sekarang dapat menyesuaikan GPG yang digunakan untuk mendekripsi terenkripsi .netrc
file .
Lihat commit 786ef50 , commit f07eeed (12 Mei 2018) oleh Luis Marsano (``) .
(Digabung oleh Junio C Hamano - gitster
- dalam komit 017b7c5 , 30 Mei 2018)
git-credential-netrc
: terima gpg
opsi
git-credential-netrc
telah hardcoded untuk mendekripsi dengan ' gpg
' terlepas dari opsi gpg.program.
Ini merupakan masalah pada distribusi seperti Debian yang menyebut GnuPG modern sesuatu yang lain, seperti ' gpg2
'
Petunjuk langkah demi langkah untuk Windows
Dengan Windows:
(Git memiliki gpg.exe
distribusi, tetapi menggunakan instalasi GPG lengkap termasuk gpg-agent.exe
, yang akan menghafal frasa sandi Anda yang terkait dengan kunci GPG Anda.)
Instal gpg4Win Lite
, antarmuka baris perintah gnupg minimum (ambil yang terbarugpg4win-vanilla-2.X.Y-betaZZ.exe
), dan lengkapi PATH Anda dengan direktori instalasi GPG:
set PATH=%PATH%:C:\path\to\gpg
copy C:\path\to\gpg\gpg2.exe C:\path\to\gpg\gpg.exe
(Catat perintah ' copy
': Git akan membutuhkan skrip Bash untuk menjalankan perintah ' gpg
'. Sejak itu gpg4win-vanilla-2
disertakangpg2.exe
, Anda perlu menduplikatnya.)
(Pastikan untuk memasukkan frasa sandi ke kunci itu.)
Percayai kunci itu
Instal skrip pembantu kredensial di direktori di dalam Anda %PATH%
:
cd c:\a\fodler\in\your\path
curl -o c:\prgs\bin\git-credential-netrc https://raw.githubusercontent.com/git/git/master/contrib/credential/netrc/git-credential-netrc.perl
(Hati-hati: skrip diganti namanya di Git 2.25.x / 2.26, lihat di bawah)
(Ya, ini adalah skrip Bash, tetapi ini akan berfungsi pada Windows karena akan dipanggil oleh Git.)
(Jangan lupa bagian ' protocol
': ' http
' atau ' https
' tergantung pada URL yang akan Anda gunakan.)
(Sekarang Anda dapat menghapus satu _netrc
berkas, hanya menjaga _netrc.gpg
satu dienkripsi.)
(Catat ' /
': C:\path\to...
tidak akan berfungsi sama sekali.) (Anda dapat menggunakan pada awalnya -v -d
untuk melihat apa yang sedang terjadi.)
Mulai sekarang, perintah Git yang menggunakan URL HTTP (S) yang memerlukan otentikasi akan mendekripsi _netrc.gpg
file itu dan menggunakan login / kata sandi yang terkait dengan server yang Anda hubungi. Pertama kali, GPG akan meminta Anda untuk frasa sandi kunci GPG Anda, untuk mendekripsi file. Di lain waktu, agen gpg yang diluncurkan secara otomatis oleh panggilan GPG pertama akan memberikan frasa sandi itu untuk Anda.
Dengan begitu, Anda dapat mengingat beberapa URL / login / kata sandi dalam satu file, dan menyimpannya di disk Anda dienkripsi.
Saya merasa lebih nyaman daripada "cache" helper ", di mana Anda perlu mengingat dan mengetik (satu kali per sesi) kata sandi yang berbeda untuk setiap layanan jarak jauh Anda, untuk kata sandi yang akan di-cache dalam memori.
Dengan Git 2.26 (Q1 2020), sampel helper kredensial untuk menggunakan .netrc
telah diperbarui untuk bekerja di luar kotak. Lihat tambalan / diskusi .
Lihat komit 6579d93 , komit 1c78c78 (20 Des 2019) oleh Denton Liu ( Denton-L
) .
(Digabung oleh Junio C Hamano - gitster
- dalam komit 1fd27f8 , 25 Des 2019)
Ditandatangani oleh: Denton Liu
Jalur shebang untuk penerjemah Perl dalam git-credential-netrc
hardcoded.
Namun, beberapa pengguna mungkin menempatkannya di lokasi yang berbeda dan karenanya, harus mengedit skrip secara manual.
Tambahkan .perl
awalan ke skrip untuk menyatakannya sebagai templat dan abaikan versi yang dihasilkan.
Tambahkan Makefile
sehingga dihasilkan git-credential-netrc
darigit-credential-netrc.perl
, seperti script lainnya Perl.
Resep Makefile dicuri tanpa malu-malu contrib/mw-to-git/Makefile
.
Dan:
Dengan 2.26 (Q1 2020), Sampel pembantu kredensial untuk menggunakan .netrc telah diperbarui agar berfungsi di luar kotak.
Lihat komit 6579d93 , komit 1c78c78 (20 Des 2019) oleh Denton Liu ( Denton-L
) .
(Digabung oleh Junio C Hamano - gitster
- di commit 1fd27f8 , 25 Des 2019)
Ditandatangani oleh: Denton Liu
Saat ini, git-credential-netrc
tidak berfungsi di luar repositori git. Gagal dengan kesalahan berikut:
fatal: Not a git repository: . at /usr/share/perl5/Git.pm line 214.
Tidak ada alasan sebenarnya mengapa perlu berada dalam repositori. Pembantu kredensial harus dapat bekerja dengan baik di luar repositori juga.
Panggil versi non-mandiri config()
sehingga git-credential-netrc
tidak perlu lagi dijalankan dalam repositori.
Jeff King ( peff
) menambahkan:
Saya berasumsi Anda menggunakan gpg-terenkripsi netrc
(jika tidak, Anda mungkin harus menggunakan credential-store
).
Untuk akses kata sandi "read-only", saya menemukan kombinasi pass
dengan konfigurasi seperti ini sedikit lebih baik:
[credential "https://github.com"]
username = peff
helper = "!f() { test $1 = get && echo password=`pass github/oauth`; }; f"