Git - Cara menggunakan file .netrc pada Windows untuk menghemat pengguna dan kata sandi

172

Apakah mungkin menggunakan file .netrc di Windows ketika saya menggunakan Git untuk mengkloning repositori jarak jauh dengan HTTP dan kata sandi pengguna?

Bernd Klaus
sumber

Jawaban:

203

Apakah mungkin untuk menggunakan .netrcberkas pada Windows?

Ya kamu harus:

  • mendefinisikan variabel lingkungan %HOME%(pra-Git 2.0, tidak diperlukan lagi dengan Git 2.0+)
  • masukkan _netrcfile%HOME%

Jika Anda menggunakan Windows 7/10, dalam suatu CMDsesi, ketikkan:

setx HOME %USERPROFILE%

dan %HOME%akan diatur ke ' C:\Users\"username"'.
Buka folder itu ( cd %HOME%) dan buat file bernama ' _netrc'

Catatan: Sekali lagi, untuk Windows, Anda memerlukan _netrcfile ' ', bukan.netrc file ' '.

Kontennya cukup standar (Ganti <examples>dengan nilai Anda):

machine <hostname1>
login <login1>
password <password1>
machine <hostname2>
login <login2>
password <password2>

Lukas menyebutkan dalam komentar:

Menggunakan versi terbaru msysgit pada Windows 7, saya tidak perlu mengatur HOMEvariabel lingkungan. The _netrcberkas saja melakukan trik.

Ini memang yang saya sebutkan di " Mencoba" install"github, .sshdir not there ":
git-cmd.battermasuk dalam msysgit yang mengatur %HOME%variabel lingkungan:

@if not exist "%HOME%" @set HOME=%HOMEDRIVE%%HOMEPATH%
@if not exist "%HOME%" @set HOME=%USERPROFILE%

爱国者 percaya pada komentar bahwa "sepertinya itu tidak akan berfungsi untuk protokol http"

Namun, saya menjawab yang netrcdigunakan oleh curl, dan berfungsi untuk protokol HTTP, seperti yang ditunjukkan dalam contoh ini (cari ' netrc' di halaman):. Juga digunakan dengan protokol HTTP di sini: " _netrc/ .netrcalternative tocURL ".


Perangkap umum dengan netrcdukungan pada Windows adalah bahwa git akan memotong menggunakannya jika url https asal menentukan nama pengguna.

Misalnya, jika .git/configfile Anda mengandung:

[asal "jarak jauh"]
     fetch = + ref / head / *: ref / remote / origin / *
     url = https: //[email protected]/p/my-project/

Git tidak akan menyelesaikan kredensial Anda melalui _netrc, untuk memperbaikinya hapus nama pengguna Anda, seperti:

[asal "jarak jauh"]
     fetch = + ref / head / *: ref / remote / origin / *
     url = https://code.google.com/p/my-project/

Solusi alternatif: Dengan git versi 1.7.9+ (Januari 2012): Jawaban dari Mark Longair ini merinci mekanisme cache kredensial yang juga memungkinkan Anda untuk tidak menyimpan kata sandi Anda dalam teks biasa seperti yang ditunjukkan di bawah ini.


Dengan Git 1.8.3 (April 2013):

Anda sekarang dapat menggunakan .netrc terenkripsi (dengan gpg).
Di Windows: %HOME%/_netrc( _, bukan ' .')

Sebuah read-only helper credential baru (di contrib/) untuk berinteraksi dengan .netrc/.authinfofile telah ditambahkan.

Skrip itu akan memungkinkan Anda untuk menggunakan file netrc terenkripsi gpg , menghindari masalah menyimpan kredensial Anda dalam file teks biasa.

File dengan .gpgekstensi akan didekripsi oleh GPG sebelum diuraikan.
Beragam -fargumen tidak masalah. Mereka diproses secara berurutan, dan entri yang cocok pertama kali ditemukan dikembalikan melalui protokol pembantu kredensial.

Bila tidak ada -fopsi yang diberikan, .authinfo.gpg, .netrc.gpg, .authinfo, dan .netrcfile dalam direktori home Anda digunakan dalam urutan ini.

Untuk mengaktifkan penolong kredensial ini:

git config credential.helper '$shortname -f AUTHFILE1 -f AUTHFILE2'

(Perhatikan bahwa Git akan menambahkan " git-credential-" ke nama helper dan mencarinya di path.)

# and if you want lots of debugging info:
git config credential.helper '$shortname -f AUTHFILE -d'

#or to see the files opened and data found:
git config credential.helper '$shortname -f AUTHFILE -v'

Lihat contoh lengkap di " Apakah ada cara untuk melewatkan pengetikan kata sandi saat menggunakanhttps:// github "


Dengan Git 2.18+ (Juni 2018), Anda sekarang dapat menyesuaikan program GPG yang digunakan untuk mendekripsi .netrcfile terenkripsi .

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 gpgopsi

git-credential-netrctelah 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'

VONC
sumber
@Bernd: HOMEvariabel lingkungan penting, karena tidak didefinisikan secara default pada Windows. Anda dapat mengatur variabel itu ke direktori apa pun yang Anda inginkan (tidak harus C:\users\mylogin): misalnya, di kantor, saya mengaturnya ke disk jarak jauh pribadi saya yang terkait dengan akun Windows saya, yang memungkinkan saya untuk beralih desktop tanpa harus kehilangan pengaturan saya .sshatau _netrc.
VonC
@Bernd: periksa juga apakah repo Git Anda ada di server LAN atau WAN (internet). Anda mungkin perlu mendefinisikan http.proxyvariabel lingkungan Anda. Atau, sebaliknya, untuk menambahkan server Anda ke no_proxyvariabel, untuk menghindari mencoba mengakses server LAN melalui WAN.
VonC
Apa nama dan nilai untuk variabel lingkungan? Bisakah Anda menjadi lebih spesifik VonC
Dennis D
@DennisD: dua variabel lingkungan yang saya bicarakan dalam jawaban dan dalam komentar adalah HOME dan http_proxy. HOME akan merujuk pada direktori yang Anda inginkan. http_proxy akan merujuk alamat proxy jika Anda memilikinya.
VonC
Menggunakan versi terbaru msysgitpada Windows 7, saya tidak perlu mengatur HOMEvariabel lingkungan. The _netrcberkas saja melakukan trik.
Luke
35

Anda juga dapat menginstal Git Credential Manager untuk Windows untuk menyimpan kata sandi Git di pengelola kredensial Windows _netrc. Ini adalah cara yang lebih aman untuk menyimpan kata sandi.

KindDragon
sumber
8
Jawaban yang bagus, ini adalah satu-satunya jawaban yang saya temukan yang memungkinkan saya menjaga kesederhanaan nama pengguna / kata sandi (aman) tanpa harus berurusan dengan semua omong kosong SSH itu.
Kirk Woll
@KirkWoll lihat jawaban pembaruan saya di atas: Anda sekarang dapat menyimpan kredensial Anda dalam .netrcfile yang dienkripsi . Anda tidak perlu memasukkan kredensial itu bahkan sekali selama sesi.
VonC
11

Ini akan memungkinkan Git mengautentikasi pada HTTPS menggunakan .netrc:

  • File harus diberi nama _netrcdan terletak di c:\Users\<username>.
  • Anda perlu mengatur variabel lingkungan yang disebut HOME=%USERPROFILE%(mengatur variabel lingkungan sistem-lebar menggunakan opsi Sistem di panel kontrol. Tergantung pada versi Windows, Anda mungkin perlu memilih "Opsi Lanjutan".).
  • Kata sandi yang disimpan dalam _netrcfile tidak boleh berisi spasi (mengutip kata sandi tidak akan berfungsi).
EBlake
sumber
Solusi paling sederhana dan terbaik. Bekerja seperti pesona dengan Android Studio, Source Tree dan baris perintah Git. Saya harus menggunakan ini ketika Google merekomendasikan opsi Cloud SDK credential.helper gagal dan harus secara manual menghasilkan kredensial dan digunakan dengan file net rc. Dalam kasus saya, saya tidak memerlukan opsi 2 dan 3.
Hari
1

Saya memposting cara yang digunakan _netrcuntuk mengunduh materi dari situs www.course.com.

Jika seseorang akan menggunakan coursera-dl untuk mengunduh materi kelas terbuka di www.coursera.com, dan pada OS Windows seseorang ingin menggunakan file seperti ".netrc" yang mirip dengan-Unix OS untuk menambahkan pilihan -nbukan -U <username> -P <password>untuk kenyamanan. Ia dapat melakukannya seperti ini:

  1. Periksa jalur beranda pada OS Windows: setx HOME %USERPROFILE%(lihat jawaban VonC ). Ini akan menyimpan HOMEvariabel lingkungan sebagai C:\Users\"username".

  2. Temukan ke dalam direktori C:\Users\"username"dan buat nama file _netrc. CATATAN: TIDAK ada sufiks. kontennya seperti:machine coursera-dl login <user> password <pass>

  3. Gunakan perintah seperti coursera-dl -n --path PATH <course name>untuk mengunduh materi kelas. Lebih banyak opsi coursera-dl untuk halaman ini .

BO.LI
sumber