Pertanyaan Apakah ada cara untuk melewati pengetikan kata sandi saat menggunakan https: // di GitHub?


Saya baru saja beralih untuk menyinkronkan repositori saya ke https: // di GitHub (karena masalah firewall), dan ia meminta kata sandi setiap saat. Dulu saya punya SSH sertifikat, dan itu sudah cukup. Apakah ada cara untuk mem-bypass kata sandi dalam kasus saya (menggunakan http / https)?


1621
2018-03-17 17:47


asal


Jawaban:


Dengan Git versi 1.7.9 dan yang lebih baru

Sejak Git 1.7.9 (dirilis pada akhir Januari 2012), ada mekanisme yang rapi di Git untuk menghindari keharusan mengetikkan kata sandi Anda sepanjang waktu untuk HTTP / HTTPS, yang disebut pembantu kredensial. (Terimakasih untuk dazonic untuk menunjukkan fitur baru ini di komentar di bawah ini.)

Dengan Git 1.7.9 atau lebih baru, Anda cukup menggunakan salah satu dari mandator kredensial berikut:

git config --global credential.helper cache

... yang memberi tahu Git untuk menyimpan sandi Anda dalam cache untuk (secara default) 15 menit. Anda dapat menetapkan batas waktu yang lebih lama dengan:

git config --global credential.helper "cache --timeout=3600"

(Contoh itu disarankan dalam Halaman bantuan GitHub untuk Linux.) Anda juga dapat menyimpan kredensial Anda secara permanen jika diinginkan, lihat jawaban lain di bawah ini.

Bantuan GitHub juga menyarankan bahwa jika Anda menggunakan Mac OS X dan digunakan Homebrew untuk menginstal Git, Anda dapat menggunakan keystore Mac OS X asli dengan:

git config --global credential.helper osxkeychain

Untuk Windows, ada helper yang dipanggil Git Credential Manager untuk Windows atau wincred di msysgit.

git config --global credential.helper wincred # obsolete

Dengan Git untuk Windows 2.7.3+ (Maret 2016):

git config --global credential.helper manager

Untuk Linux, Anda bisa 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 Anda gunakan origin menggunakan remote untuk memasukkan kata sandi dalam mode ini:

https://you:password@github.com/you/example.git

... dengan kata lain dengan :password setelah nama pengguna dan sebelum @.

Anda dapat mengatur URL baru untuk Anda origin remote dengan:

git config remote.origin.url https://you:password@github.com/you/example.git

Pastikan Anda menggunakannya https dan Anda harus sadar bahwa jika Anda melakukan ini, kata sandi GitHub Anda akan disimpan dalam bentuk plaintext pada Anda .git direktori, yang jelas tidak diinginkan.

Dengan versi Git apa saja (yah, sejak versi 0.99)

Pendekatan alternatif adalah dengan memasukkan nama pengguna dan kata sandi Anda ~/.netrc file, meskipun, seperti dengan menjaga kata sandi di URL jarak jauh, ini berarti kata sandi Anda akan disimpan pada disk dalam teks biasa dan dengan demikian kurang aman dan tidak disarankan. Namun, jika Anda ingin menggunakan pendekatan ini, tambahkan baris berikut ke Anda ~/.netrc:

machine <hostname> login <username> password <password>

... mengganti <hostname> dengan nama host server, dan <username> dan <password> dengan nama pengguna dan kata sandi Anda. Juga ingat untuk mengatur izin sistem file yang membatasi pada file itu:

chmod 600 ~/.netrc

Perhatikan bahwa pada Windows, file ini harus dipanggil _netrc, dan Anda mungkin perlu menentukan variabel lingkungan% HOME% - untuk lebih jelasnya lihat:


2133
2018-03-17 17:54



Anda juga dapat meminta Git menyimpan kredensial Anda secara permanen menggunakan hal-hal berikut:

git config credential.helper store

Catatan: Meskipun ini nyaman, Git akan menyimpan kredensial Anda dalam teks yang jelas file lokal (.git-credentials) di bawah direktori proyek Anda (lihat di bawah untuk direktori "home"). Jika Anda tidak menyukai ini, hapus file ini dan beralihlah menggunakan opsi cache.

Jika Anda ingin Git melanjutkan untuk menanyakan kredensial Anda setiap kali diperlukan terhubung ke repositori jarak jauh, Anda dapat menjalankan perintah ini:

git config --unset credential.helper

Untuk menyimpan kata sandi .git-credentials di dalam kamu %HOME% direktori yang bertentangan dengan direktori proyek: gunakan --global bendera

git config --global credential.helper store

638
2017-09-03 01:14



TLDR; Gunakan sebuah file netrc terenkripsi dengan Git 1.8.3+.

Menyimpan kata sandi untuk repositori Git HTTPS URL dimungkinkan dengan a ~/.netrc (Unix) atau %HOME%/_netrc (perhatikan _) di Windows.

Tapi: File itu akan menyimpan kata sandi Anda dalam teks biasa.

Larutan: Enkripsikan file itu dengan GPG (GNU Privacy Guard), dan membuat Git mendekripnya setiap kali dibutuhkan 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 mengajukan.

Lihat lakukan 786ef50, lakukan f07eeed (12 Mei 2018) oleh Luis Marsano (``).
(Digabung oleh Junio ​​C Hamano - gitster - di lakukan 017b7c5, 30 Mei 2018) 

git-credential-netrc: terima gpg pilihan

git-credential-netrc dikodekan untuk mendekripsi dengan 'gpg' terlepas dari   opsi gpg.program.
  Ini adalah masalah pada distribusi seperti Debian yang memanggil GnuPG modern yang lain, seperti 'gpg2'


Petunjuk langkah demi langkah untuk Windows

Dengan Windows:

(Git punya gpg.exe dalam distribusinya, tetapi menggunakan instalasi GPG lengkap termasuk a gpg-agent.exe, yang akan menghafal kata sandi Anda yang terkait dengan kunci GPG Anda.)

  • Memasang gpg4Win Lite, antarmuka baris perintah gnupg minimum (ambil terbaru gpg4win-vanilla-2.X.Y-betaZZ.exe), dan selesaikan 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
    

(Perhatikan 'copy'perintah: Git akan membutuhkan skrip Bash untuk menjalankan perintah'gpg'. Sejak gpg4win-vanilla-2 datang dengan gpg2.exe, Anda perlu menduplikasinya.)

  • Buat atau impor kunci GPG, dan percayai:

    gpgp --import aKey
    # or
    gpg --gen-key
    

(Pastikan untuk memasukkan kata sandi ke kunci itu.)

  • Percayai kunci itu

  • Instal skrip pembantu kredensial dalam 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
    

(Ya, ini adalah skrip Bash, tetapi ini akan berfungsi di Windows karena akan dipanggil oleh Git.)

  • Buat file _netrc dalam teks yang jelas

    machine a_server.corp.com
    login a_login
    password a_password
    protocol https
    
    machine a_server2.corp.com
    login a_login2
    password a_password2
    protocol https
    

(Jangan lupa 'protocol'bagian:'http' atau 'https'tergantung pada URL yang akan Anda gunakan.)

  • Enkripsikan file itu:

    gpg -e -r a_recipient _netrc
    

(Anda sekarang bisa menghapus itu _netrc file, hanya menyimpan file _netrc.gpg terenkripsi.)

  • Gunakan file terenkripsi itu:

    git config --local credential.helper "netrc -f C:/path/to/_netrc.gpg -v"
    

(Perhatikan '/': C:\path\to... tidak akan berfungsi sama sekali.) (Anda dapat menggunakan pada awalnya -v -d untuk melihat apa yang sedang terjadi.)

Mulai sekarang, setiap perintah Git menggunakan HTTP (S) URL yang membutuhkan otentikasi akan mendekripsi itu _netrc.gpgfile dan gunakan login / kata sandi yang terkait dengan server yang Anda hubungi. Pertama kali, GPG akan menanyakan Anda frasa sandi kunci GPG Anda, untuk mendekripsi file. Di lain waktu, agen gpg diluncurkan secara otomatis oleh panggilan GPG pertama akan memberikan kata sandi itu untuk Anda.

Dengan begitu, kamu bisa menghafal beberapa URL / login / kata sandi dalam satu file, dan menyimpannya pada 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 masing-masing layanan jarak jauh Anda, untuk kata sandi yang akan di-cache dalam memori.


85
2017-08-21 15:48



Ada cara mudah dan kuno untuk menyimpan kredensial pengguna di URL HTTPS:

https://user:password@github.com/...

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://user@github.com/...) yang setidaknya akan menghemat setengah kerumitan.

Anda mungkin lebih memilih untuk beralih ke SSH atau menggunakan perangkat lunak klien GitHub.


32
2018-01-06 16:43



Gunakan toko kredensial.

Untuk git 2.11+ on OSX dan linux, gunakan git yang dibangun di toko kredensial:

git config --global credential.helper libsecret

Untuk msysgit 1.7.9+ aktif Windows:

git config --global credential.helper wincred

Untuk Git 1.7.9+ di OS X gunakan:

git config --global credential.helper osxkeychain

30
2017-09-09 03:57



Anda bisa menggunakan

git config credential.helper store

Ketika Anda memasukkan kata sandi di lain waktu dengan menarik atau mendorongnya akan disimpan .git-credentials sebagai teks biasa (agak tidak aman, tetapi cukup taruh ke folder yang dilindungi)

Dan itu saja, sebagaimana tercantum di halaman ini:

https://git-scm.com/docs/git-credential-store


30
2017-09-21 13:03



Saya mungkin agak lamban, tetapi tidak jelas bagi saya bahwa saya perlu mengunduh pembantu terlebih dahulu! Saya menemukan unduhan credential.helper di Atlassian's secara permanen mengotentikasi dengan repositori Git, semoga itu membantu.

Kutipan:

Ikuti langkah-langkah ini jika Anda ingin menggunakan Git dengan cache kredensial di OSX:

Unduh binari-kredensial-osxkeychain biner.

Jalankan perintah di bawah untuk memastikan biner dapat dieksekusi:

chmod a+x git-credential-osxkeychain

Taruh di direktori / usr / local / bin.

Jalankan perintah di bawah ini:

git config --global credential.helper osxkeychain

18
2017-10-05 05:31



Pada pengaturan GNU / Linux, sebuah ~ / .netrc bekerja dengan cukup baik juga:

$ cat ~/.netrc
machine github.com login lot105 password howsyafather

Mungkin bergantung pada pustaka jaringan mana yang digunakan Git HTTPS mengangkut.


18
2017-12-05 13:28



Cukup sertakan kredensial masuk sebagai bagian dari URL:

git remote rm origin 
git remote add origin https://username:mypassword@github.com/path/to/repo.git

15
2017-07-03 07:13



Untuk Windows bisa Anda gunakan Manajer Kredensial Git (GCM) plugin. 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 dari git-for-windows dengan manajer kredensial yang ada di dalamnya. Ini memungkinkan otentikasi 2-faktor untuk github (dan server lain). Dan memiliki antarmuka grafis untuk awalnya masuk.

Untuk pengguna cygwin (atau pengguna yang sudah menggunakan git-for-windows resmi), Anda mungkin lebih suka menginstal manual. Unduh paket zip dari halaman rilis. Ekstrak paket lalu jalankan install.cmd. Ini akan menginstal ke Anda ~/bin map. (Pastikan Anda ~/bin direktori ada di PATH Anda.) Kemudian Anda mengkonfigurasinya menggunakan perintah ini:

git config --global credential.helper manager

Git kemudian akan menjalankan git-credential-manager.exe saat mengautentikasi ke server apa pun.


12
2018-05-24 07:49