Apa cara yang benar untuk menggunakan git dengan repositori gnome-keyring dan http?

43

Saat ini, setiap kali saya git pullatau git pushke repositori http, saya mendapatkan yang berikut:

$ git pull
Username for 'https://gitrepos.reposdomain.com': [email protected]
Password for 'https://[email protected]@gitrepos.reposdomain.com': 

Ini ok untuk penggunaan yang jarang, tetapi mulai menjadi sangat menjengkelkan dengan sangat cepat. Sayangnya, beralih ke ssh bukan pilihan dalam kasus ini.

Saya telah membaca bahwa versi sebelumnya gitmenyediakan kredensial "toko" dan "cache", tetapi ini tidak disarankan karena menyimpan kata sandi dalam plaintext.

TAPI

Versi yang lebih baru gitrupanya menyimpan kredensial git di gnome-keyring, tetapi harus diatur dengan benar.

Saya sudah mencoba mengikuti jawaban (non-Ubuntu) lainnya di SO untuk mendapatkan ini berfungsi (yaitu yang ini ), tapi saya masih disajikan dengan nama pengguna dan kata sandi prompt.

Apa cara yang benar dan paling aman untuk menyimpan gitkredensial untuk repos http dan bagaimana cara membuatnya di Ubuntu?

tu-Reinstate Monica-dor duh
sumber
Anda harus menyebutkan metode yang Anda coba. Kalau tidak, Anda mungkin menemukan jawaban yang menyarankan hal itu.
muru
@muru Mengapa Anda menghapus penekanan yang saya tambahkan untuk keterbacaan? Sekarang hanya gumpalan teks dan alasan yang membedakan pertanyaan dari yang lain dan pertanyaan yang sebenarnya kurang jelas.
tu-Reinstate Monica-dor duh
Sebuah seluruh kalimat tebal dan huruf miring hampir tidak dapat dibaca.
muru
1
@uru saya mohon berbeda. Saya menemukan teks tebal dan dicetak miring memunculkan bagian penting dari pertanyaan.
tu-Reinstate Monica-dor duh

Jawaban:

45

gnome-credential-helper sekarang sudah ditinggalkan.

Sebagai gantinya, gunakan libsecret. Jika belum ada di Ubuntu Anda, gunakan prosedur berikut:

  1. Anda dapat menginstal libsecretdan perpustakaan pengembangan dengan:

    sudo apt-get install libsecret-1-0 libsecret-1-dev

  2. Maka Anda perlu membangun manajer kredensial

    cd /usr/share/doc/git/contrib/credential/libsecret

    sudo make

  3. Akhirnya, Anda harus mengarahkan git ke file yang baru dibuat di konfigurasi Anda:

    git config --global credential.helper /usr/share/doc/git/contrib/credential/libsecret/git-credential-libsecret

Lebih detail tentang https://stackoverflow.com/a/40312117/2017781

eddygeek
sumber
1
Anda mungkin ingin mencatat bahwa solusi ini hanya berlaku untuk versi git> = 2.11 (di mana direktori libsecret kemudian ditemukan)
Charles Roberto Canato
1
Apakah ini aman? Di mana rahasia disimpan? Apakah transmisi dan penyimpanannya aman? Apakah ada dokumentasi resmi? Rupanya, sesuai halaman ini dan halaman ini , ada di "Utama" dan dikelola oleh Debian / Ubuntu. Dan: "Ini berkomunikasi dengan 'Secret Service' menggunakan DBus."
caw
1
@caw: Di GNOME, "Secret Service" adalah gnome-keyring-daemon yang sama, hanya melalui API yang berbeda. (Rencana libsecret adalah untuk memungkinkan DE lain untuk membangun backend mereka sendiri yang mendukung API yang sama, misalnya KDE berencana untuk mengimplementasikan ini di kwalletd.)
grawity
5
Memperbarui jawaban pilihan saya karena saya dapat memverifikasi ini berfungsi pada 18,04. :)
tu-Reinstate Monica-dor duh
44

Anda perlu mengatur git credential helperdengan Gnome Keyring:

Instal dan kompilasi devel Gnome Keyring:

sudo apt-get install libgnome-keyring-dev
sudo make --directory=/usr/share/doc/git/contrib/credential/gnome-keyring

Dan siapkan kredensial:

git config --global credential.helper /usr/share/doc/git/contrib/credential/gnome-keyring/git-credential-gnome-keyring

sumber
Sangat aneh. Secara semantik, seharusnya tidak ada perbedaan antara jawaban di tautan dan jawaban ini. Tetapi untuk beberapa alasan jawaban ini bekerja di mana yang lain tidak.
tu-Reinstate Monica-dor duh
Kemudian jalankan git pushatau git pullseperti biasa dan pertama kali akan meminta toko ansd, dan setiap kali setelah itu akan mendapatkannya dari keyring. Untuk memverifikasinya, jalankan seahorse. Itu harus terdaftar di bawah "Kata Sandi" -> "Masuk".
tu-Reinstate Monica-dor duh
@tudor Aneh, saya tidak melihat perbedaan "konseptual" antara jawaban saya dan tautan. Senang itu bisa membantu.
Sepertinya aneh bagi saya bahwa Anda masih harus menjalankan perintah "make", tetapi langkah-langkah ini bekerja dengan baik. Terima kasih!
DaveTheScientist
2

Pendekatan sederhana ini tampaknya cukup di Ubuntu 18.04.1 saya dengan git 2.17.1:

git config --global credential.helper cache

Anda dapat menentukan batas waktu satu jam (= 3600 detik) seperti ini:

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

Bacaan lebih lanjut dalam manual yang bagus .

Stephan Henningsen
sumber