Saya baru-baru ini beralih ke sinkronisasi repositori saya ke https: // di GitHub (karena masalah firewall), dan meminta kata sandi setiap waktu.
Apakah ada cara untuk men-cache kredensial, alih-alih mengautentikasi setiap kali itu git push
?
git
authentication
github
git-push
git-config
Zepplock
sumber
sumber
_netrc
file yang berisi kredensial Anda. Lihat jawaban saya di bawah ini . Saya menemukan bahwa lebih aman darigit-credential-winstore.exe
(cache memori) yang agak buggy pada Windows.git-credential-winstore
bekerja yang terbaik untuk Windows. Kereta apa? Menyiapkan ssh adalah opsi yang lebih disukai, meskipun saya telah melakukannya beberapa kali, itu jauh lebih rentan kesalahan dan kadang-kadang hanya tidak berfungsi ketika Anda harus terhubung ke beberapa host.Jawaban:
Dengan Git versi 1.7.9 dan yang lebih baru
Sejak Git 1.7.9 (dirilis pada akhir Januari 2012), ada mekanisme rapi di Git untuk menghindari keharusan mengetikkan kata sandi Anda sepanjang waktu untuk HTTP / HTTPS, yang disebut bantuan kredensial . (Terima kasih kepada dazonic karena menunjukkan fitur baru ini di komentar di bawah.)
Dengan Git 1.7.9 atau lebih baru, Anda bisa menggunakan salah satu dari pembantu kredensial berikut:
... yang memberitahu Git untuk menyimpan kata sandi Anda di-cache dalam memori selama (secara default) 15 menit. Anda dapat mengatur batas waktu lebih lama dengan:
(Contoh itu disarankan di halaman bantuan GitHub untuk Linux .) Anda juga dapat menyimpan kredensial Anda secara permanen jika diinginkan, lihat jawaban lain di bawah ini.
Bantuan GitHub juga menunjukkan bahwa jika Anda menggunakan Mac OS X dan menggunakan Homebrew untuk menginstal Git, Anda dapat menggunakan keystore Mac OS X asli dengan:
Untuk Windows, ada penolong yang disebut Git Credential Manager untuk Windows atau diincar di msysgit .
Dengan Git untuk Windows 2.7.3+ (Maret 2016):
Untuk Linux, Anda dapat menggunakan
gnome-keyring
(atau implementasi keyring lainnya seperti KWallet).Dengan versi Git sebelum 1.7.9
Dengan versi Git sebelum 1.7.9, opsi yang lebih aman ini tidak tersedia, dan Anda harus mengubah URL yang
origin
digunakan remote Anda untuk memasukkan kata sandi dengan cara ini:... dengan kata lain dengan
:password
setelah nama pengguna dan sebelum@
.Anda dapat mengatur URL baru untuk
origin
remote Anda dengan:Pastikan Anda menggunakannya
https
, dan Anda harus sadar bahwa jika Anda melakukan ini, kata sandi GitHub Anda akan disimpan dalam plaintext di.git
direktori Anda , yang jelas tidak diinginkan.Dengan versi Git apa pun (well, sejak versi 0.99)
Pendekatan alternatif adalah dengan memasukkan nama pengguna dan kata sandi Anda di
~/.netrc
file Anda , meskipun, seperti halnya menyimpan kata sandi di URL jarak jauh, ini berarti bahwa kata sandi Anda akan disimpan pada disk dalam teks biasa dan dengan demikian kurang aman dan tidak direkomendasikan. Namun, jika Anda ingin mengambil pendekatan ini, tambahkan baris berikut ke Anda~/.netrc
:... mengganti
<hostname>
dengan nama host server, dan<username>
dan<password>
dengan nama pengguna dan kata sandi Anda. Ingat juga untuk mengatur izin sistem file terbatas pada file itu:Perhatikan bahwa pada Windows, file ini harus dipanggil
_netrc
, dan Anda mungkin perlu mendefinisikan variabel lingkungan% HOME% - untuk lebih jelasnya lihat:sumber
git config --global credential.helper osxkeychain
pada OS X. Untuk OS lainnya, lihat help.github.com/articles/set-up-githttps://username:[email protected]/username/project.git
. Itu membuat kata sandi teks biasa yang disimpan di disk hampir cukup aman untuk digunakan.git config --global credential.helper cache
tidak bekerja di windows: stackoverflow.com/questions/11693074/... gunakan gitcredentialstore di Windows dan senangAnda juga dapat meminta Git menyimpan kredensial Anda secara permanen menggunakan yang berikut:
Catatan: Meskipun ini mudah, Git akan menyimpan kredensial Anda dalam teks yang jelas dalam file lokal (.git-kredensial) di bawah direktori proyek Anda (lihat di bawah untuk direktori "home"). Jika Anda tidak suka ini, hapus file ini dan alihkan untuk menggunakan opsi cache.
Jika Anda ingin Git melanjutkan untuk meminta kredensial setiap kali perlu terhubung ke repositori jarak jauh, Anda dapat menjalankan perintah ini:
Untuk menyimpan kata sandi di
.git-credentials
dalam%HOME%
direktori Anda sebagai lawan dari direktori proyek: gunakan--global
benderasumber
git config --global credential.helper store
--global
flag sudah mubazir. Bahkan tanpa tanda ini, file kredensial telah dibuat dalam%USER_HOME%
direktori.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)Petunjuk langkah demi langkah untuk Windows
Dengan Windows:
(Git memiliki
gpg.exe
distribusi, tetapi menggunakan instalasi GPG lengkap termasukgpg-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:(Catat perintah '
copy
': Git akan membutuhkan skrip Bash untuk menjalankan perintah 'gpg
'. Sejak itugpg4win-vanilla-2
disertakangpg2.exe
, Anda perlu menduplikatnya.)Buat atau impor kunci GPG, dan percayai:
(Pastikan untuk memasukkan frasa sandi ke kunci itu.)
Percayai kunci itu
Instal skrip pembantu kredensial di direktori di dalam Anda
%PATH%
:(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.)
Buat file _netrc dalam teks yang jelas
(Jangan lupa bagian '
protocol
': 'http
' atau 'https
' tergantung pada URL yang akan Anda gunakan.)Enkripsi file itu:
(Sekarang Anda dapat menghapus satu
_netrc
berkas, hanya menjaga_netrc.gpg
satu dienkripsi.)Gunakan file yang 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)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)Jeff King (
peff
) menambahkan:sumber
curl -o c:\prgs\bin\git-credential-netrc https://raw.github.com/git/git/master/contrib/credential/netrc/git-credential-netrc
: Anda perlu menyalin digit-credential-netrc
mana saja di path Anda ($PATH
), agar git dapat memanggil 'credential-netrc
'._netrc
itu tidak bekerja untuk saya diWindows 7
PC, tetapi.netrc
bekerja untuk youtube-dl dengan--netrc
argumen yang diteruskan ke sana.https://raw.githubusercontent.com/git/git/master/contrib/credential/netrc/git-credential-netrc.perl
(perpipaan dalam tujuh tahun kemudian 😉)Ada cara mudah dan kuno untuk menyimpan kredensial pengguna di URL HTTPS:
Anda dapat mengubah URL dengan
git remote set-url <remote-repo> <URL>
Kelemahan yang jelas dari pendekatan itu adalah Anda harus menyimpan kata sandi dalam teks biasa. Anda masih bisa memasukkan nama pengguna (
https://[email protected]/...
) yang setidaknya akan menyelamatkan Anda dari setengah kerumitan.Anda mungkin lebih suka beralih ke SSH atau menggunakan perangkat lunak klien GitHub.
sumber
Gunakan toko kredensial.
Untuk Git 2.11+ di OS X dan Linux , gunakan toko kredensial bawaan Git :
Untuk msysgit 1.7.9+ di Windows :
Untuk Git 1.7.9+ pada OS X gunakan:
sumber
git: 'credential-gnome-keyring' is not a git command. See 'git --help'.
printf "protocol=https\nhost=git.mycompany.com\n" | git credential-manager get
( lebih detail di sini ). Anda harus selalu menggunakan token akses pribadi dengan ini, dan tentu saja menggunakan 2FA pada akun GitHub Anda.Anda bisa menggunakannya
Ketika Anda memasukkan kata sandi lain kali dengan menarik atau mendorong, kata sandi itu akan disimpan dalam file .git-kredensial sebagai teks biasa (sedikit tidak aman, tetapi hanya memasukkannya ke folder yang dilindungi).
Dan itu saja, sebagaimana dinyatakan di halaman ini:
git-credential-store
sumber
git config credential.helper manager
sebaliknyaTidak segera jelas bagi saya bahwa saya harus mengunduh helper terlebih dahulu! Saya menemukan unduhan credential.helper di Atlassian's Permanent autentikasi dengan repositori Git .
Mengutip:
Ikuti langkah-langkah ini jika Anda ingin menggunakan Git dengan caching kredensial di OS X:
Unduh binary git-credential-osxkeychain.
Jalankan perintah di bawah ini untuk memastikan biner dapat dieksekusi:
Masukkan ke dalam direktori
/usr/local/bin
.Jalankan perintah di bawah ini:
sumber
Cukup sertakan kredensial masuk sebagai bagian dari URL:
Catatan: Saya tidak merekomendasikan metode ini, tetapi jika Anda terburu-buru dan tidak ada yang berhasil, Anda dapat menggunakan metode ini.
sumber
Pada pengaturan GNU / Linux, a ~ / .netrc bekerja dengan sangat baik:
Ini mungkin tergantung pada perpustakaan jaringan yang digunakan Git untuk transportasi HTTPS .
sumber
chmod 0600 ~/.netrc
.Untuk Windows Anda dapat menggunakan plugin Git Credential Manager (GCM). Saat ini dikelola oleh Microsoft. Yang menyenangkan adalah ia menyimpan kata sandi di Windows Credential Store, bukan sebagai teks biasa.
Ada penginstal di halaman rilis proyek. Ini juga akan menginstal versi resmi Git untuk Windows dengan built-in pengelola kredensial. Ini memungkinkan otentikasi dua faktor untuk GitHub (dan server lain). Dan memiliki antarmuka grafis untuk awalnya masuk.
Untuk pengguna Cygwin (atau pengguna yang sudah menggunakan Git resmi untuk Windows), Anda mungkin lebih suka menginstal manual. Unduh paket zip dari halaman rilis . Ekstrak paket, dan kemudian jalankan
install.cmd
file. Ini akan dipasang ke~/bin
folder Anda . (Pastikan~/bin
direktori Anda ada di PATH Anda.) Anda kemudian mengkonfigurasinya menggunakan perintah ini:Git kemudian akan menjalankan
git-credential-manager.exe
ketika mengautentikasi ke server mana pun.sumber
printf "protocol=https\nhost=git.mycompany.com\n" | git credential-manager get
( lebih detail di sini ). Anda harus selalu menggunakan token akses pribadi dengan ini, dan tentu saja menggunakan 2FA pada akun GitHub Anda.Jika Anda tidak ingin menyimpan kata sandi dalam plaintext seperti kata Mark, Anda dapat menggunakan URL GitHub yang berbeda untuk mengambil daripada yang Anda lakukan untuk mendorong. Di file konfigurasi Anda, di bawah
[remote "origin"]
:Itu masih akan meminta kata sandi saat Anda menekan, tetapi tidak ketika Anda mengambil, setidaknya untuk proyek sumber terbuka.
sumber
OAuth
Anda dapat membuat token API pribadi Anda sendiri ( OAuth ) dan menggunakannya dengan cara yang sama seperti Anda akan menggunakan kredensial normal Anda (di:)
/settings/tokens
. Sebagai contoh:.netrc
Metode lain adalah mengonfigurasi pengguna / kata sandi Anda di
~/.netrc
(_netrc
pada Windows), misUntuk HTTPS, tambahkan baris tambahan:
Pembantu kredensial
Untuk men-cache kata sandi GitHub Anda di Git saat menggunakan HTTPS, Anda dapat menggunakan pembantu kredensial untuk memberi tahu Git untuk mengingat nama pengguna dan kata sandi GitHub Anda setiap kali berbicara dengan GitHub.
git config --global credential.helper osxkeychain
(osxkeychain helper
wajib),git config --global credential.helper wincred
git config --global credential.helper cache
Terkait:
sumber
Anda dapat menggunakan bantuan kredensial.
di mana
x
jumlah detiknyasumber
store
,cache
dan hal-hal umum lainnya dicantumkan dan dijelaskan?Setelah Anda mengkloning repositori
repo
, Anda dapat mengeditrepo/.git/config
dan menambahkan beberapa konfigurasi seperti di bawah ini:Maka Anda tidak akan diminta untuk
username
danpassword
lagi.sumber
helper = manager
(tapi saya diminta username + repo untuk push pertama).Saya tahu ini bukan solusi yang aman, tetapi kadang-kadang Anda hanya membutuhkan solusi sederhana - tanpa menginstal apa pun. Dan karena helper = store tidak bekerja untuk saya, saya membuat helper dummy:
Buat skrip dan letakkan di folder nampan pengguna Anda, di sini bernama credfake , skrip ini akan memberikan nama pengguna dan kata sandi Anda:
membuatnya dapat dieksekusi:
kemudian konfigurasikan di git:
(atau gunakan tanpa --global hanya untuk satu repo)
dan - voilá - git akan menggunakan kata sandi + pengguna ini.
sumber
Token otentikasi harus digunakan sebagai ganti kata sandi akun. Buka Pengaturan / aplikasi GitHub dan kemudian buat token akses pribadi. Token dapat digunakan dengan cara yang sama seperti kata sandi digunakan.
Token dimaksudkan untuk memungkinkan pengguna tidak menggunakan kata sandi akun untuk pekerjaan proyek. Hanya gunakan kata sandi saat melakukan pekerjaan administrasi, seperti membuat token baru atau mencabut token lama.
Alih-alih token atau kata sandi yang memberikan akses penuh kepada pengguna ke akun GitHub, kunci penerapan khusus proyek dapat digunakan untuk memberikan akses ke repositori proyek tunggal. Proyek Git dapat dikonfigurasi untuk menggunakan kunci yang berbeda ini dalam langkah-langkah berikut ketika Anda masih dapat mengakses akun atau proyek Git lainnya dengan kredensial normal Anda:
Host
,IdentityFile
untuk kunci penggunaan, mungkinUserKnownHostsFile
, dan mungkinUser
(meskipun saya pikir Anda tidak memerlukannya).ssh -F /path/to/your/config $*
GIT_SSH=/path/to/your/wrapper
di depan perintah Git normal Anda. Di sinigit remote
(asal) harus menggunakan[email protected]:user/project.git
format.sumber
Lebih baik menggunakan kredensial untuk keamanan, tetapi Anda dapat menyimpannya untuk beberapa saat menggunakan cache:
Kredensial Anda akan disimpan selama 3600 detik.
sumber
--timeout
dan kredensial akan disimpan selamanya.windowsservercore
)?Hal-hal sedikit berbeda jika Anda menggunakan otentikasi dua faktor seperti saya. Karena saya tidak menemukan jawaban yang baik di tempat lain, saya akan menempel di sini sehingga mungkin saya bisa menemukannya nanti.
Jika Anda menggunakan otentikasi dua faktor, maka menentukan nama pengguna / kata sandi bahkan tidak akan berfungsi - Anda mendapat akses ditolak. Tetapi Anda dapat menggunakan token akses aplikasi dan menggunakan pembantu kredensial Git untuk menyimpannya untuk Anda. Berikut tautan terkait:
Dan saya tidak ingat di mana saya melihat ini, tetapi ketika Anda diminta untuk nama pengguna Anda - di situlah Anda menempel token akses aplikasi. Kemudian biarkan kata sandi kosong. Ini bekerja di Mac saya.
sumber
Ini berfungsi untuk saya, saya menggunakan Windows 10
sumber
Biasanya Anda memiliki URL jarak jauh, seperti ini,
Jika Anda ingin melewatkan nama pengguna dan kata sandi saat menggunakan
git push
, coba ini:Saya baru saja menambahkan URL yang sama (dengan detail pengguna termasuk kata sandi) ke asal.
CATATAN: Tidak berfungsi jika nama pengguna adalah Id email.
sumber
Saya mendapat jawaban dari gitcredentials (7) Manual Page . Untuk kasus saya, saya tidak memiliki cache kredensial di instalasi Windows saya; Saya menggunakan toko kredensial.
Setelah saya menggunakan kredensial-toko, nama pengguna / kata sandi disimpan dalam file [folder pengguna] /. Git-kredensial. Untuk menghapus nama pengguna / kata sandi, cukup hapus konten file.
sumber
git config --global credential.helper wincred
kata sandi toko ini secara permanen.Dokumentasi komposer menyebutkan bahwa Anda dapat mencegahnya menggunakan API GitHub, sehingga berfungsi seperti
git clone
:Jadi bagian akan terlihat seperti ini:
Perlu diingat bahwa API ada karena suatu alasan. Jadi ini harus menjadi metode terakhir tentang peningkatan beban di github.com.
sumber
Anda juga mengedit bashrc file dan menambahkan skrip di dalamnya.
Ini akan meminta kata sandi Anda sekali ketika Anda memulai Git dan kemudian mengingatnya sampai Anda keluar.
sumber
Jika Anda menggunakan
osxkeychain
dan memiliki token yang kedaluwarsa dan ingin memperbaruinya, ikuti langkah-langkah ini:Jalankan di terminal, lalu tekan enter dua kali.
Sekarang Anda harus diminta nama pengguna / kata sandi. Namun kadang-kadang tampaknya ini tidak 'mengambil' dan Anda harus tetap masuk kembali.
Jika demikian, nyalakan kembali komputer Anda . Sekarang saat berikutnya Anda menjalankan perintah git dan memasukkan nama pengguna / kata sandi Anda, itu akan disimpan.
sumber