Bagaimana cara memasukkan perintah dengan kata sandi untuk git pull?

141

Saya ingin melakukan perintah ini dalam satu baris:

git pull && [my passphrase]

Bagaimana cara melakukannya?

Anton Medvedev
sumber
Anda dapat mengubah frasa sandi Anda menjadi kosong dengan mengikuti ini: help.github.com/articles/working-with-ssh-key-passphrases
jacerate
1
Anda dapat menghindari kebutuhan untuk mengetikkan kata sandi jika Anda menjalankan ssh agent. Pertama kali Anda melakukan git pull, Anda melakukannya secara interaktif, dan agen ssh akan mengingat kunci pribadi Anda dan Anda dapat menjalankan git pull tanpa diminta.
Tim Finer

Jawaban:

168

Ini tidak persis seperti yang Anda minta, tetapi untuk http (s):

  • Anda dapat memasukkan kata sandi dalam file .netrc (_netrc di windows). Dari sana, itu akan diambil secara otomatis. Ini akan masuk ke folder rumah Anda dengan 600 izin.
  • Anda juga bisa mengkloning repo dengan https://user:pass@domain/repotetapi itu tidak benar-benar disarankan karena akan menunjukkan pengguna / pass Anda di banyak tempat ...
  • opsi baru adalah menggunakan pembantu kredensial . Perhatikan bahwa kredensial akan disimpan dalam teks biasa di konfigurasi lokal Anda menggunakan pembantu kredensial standar. credential-helper with wincred juga dapat digunakan di windows.

Contoh penggunaan pembantu kredensial

  • git config credential.helper store - menyimpan kredensial tanpa batas waktu.
  • git config credential.helper 'cache --timeout=3600'- simpan selama 60 menit

Untuk akses berbasis ssh, Anda akan menggunakan agen ssh yang akan menyediakan kunci ssh bila diperlukan. Ini akan membutuhkan pembuatan kunci di komputer Anda, menyimpan kunci publik di server jarak jauh dan menambahkan kunci pribadi ke keystore yang relevan.

eis
sumber
1
Bisakah Anda menguraikan bagian SSH? Saya mengonfigurasi instans EC2, dan saya ingin instans tersebut ditarik tanpa meminta kata sandi dan skala otomatis AWS. Skema publik / swasta ini sepertinya solusi yang bagus.
Pedro Dusso
1
@PedroDusso sepertinya utas ini adalah apa yang Anda cari
eis
2
saya akhirnya menggunakan mekanisme kunci penyebaran, yang tampaknya menjadi solusi yang baik. Terima kasih!
Pedro Dusso
138

Saya menemukan satu cara untuk memberikan kredensial untuk koneksi https pada baris perintah. Anda hanya perlu menentukan URL lengkap untuk git pull dan memasukkan kredensial di sana:

git pull https://username:[email protected]/my/repository

Anda tidak perlu memiliki repositori yang digandakan dengan kredensial sebelumnya, ini berarti kredensial Anda tidak akan masuk .git/config. (Tapi pastikan shell Anda tidak mengkhianati Anda dan menyimpan baris perintah dalam file sejarah.)

holgero
sumber
kata sandi tidak diperlukan, dan ini tidak aman untuk menulis kata sandi dengan cara ini
meteor
Bukankah ini salah satu hal yang saya cantumkan dalam jawaban yang diterima, sudah di tahun 2012?
eis
8
@eis: Tidak juga. Intinya adalah Anda tidak perlu menggandakan repositori dengan URL yang menyertakan kredensial, tetapi tetap dapat menarik dari URL dengan kredensial. Efeknya adalah kredensial tidak berakhir di file .git / config.
holgero
6
Jika Anda menghilangkan :passwordbagian tersebut, Anda akan diminta memasukkan kata sandi setelah menekan enter. Dengan begitu, kata sandi Anda tidak akan disimpan di riwayat bash.
Matthias Fischer
1
Ya, gunakan @PramodGarg - nama pengguna git pull : [email protected]/my/repository.git Cabang
PAVITRA
42

Tidak menjawab pertanyaan secara langsung, tetapi saya menemukan pertanyaan ini ketika mencari cara untuk, pada dasarnya, tidak memasukkan kembali kata sandi setiap kali saya menarik server jarak jauh .

Nah, gitmemungkinkan Anda untuk menyimpan kredensial Anda untuk waktu yang terbatas. Ini dapat disesuaikan git configdan halaman ini menjelaskannya dengan sangat baik:

https://help.github.com/articles/caching-your-github-password-in-git/#platform-linux

Di terminal, jalankan:

$ git config --global credential.helper cache
# Set git to use the credential memory cache

Untuk menyesuaikan waktu tunggu cache, Anda dapat melakukan:

$ git config --global credential.helper 'cache --timeout=3600'
# Set the cache to timeout after 1 hour (setting is in seconds)

Kredensial Anda kemudian akan disimpan dalam memori selama waktu yang diminta.

Jivan
sumber
5

Perhatikan bahwa cara "menyimpan" git credential helper menyimpan perubahan sandi yang tidak terenkripsi dengan Git 2.5+ (Q2 2014).
Lihat commit 17c7f4d oleh Junio ​​C Hamano ( gitster)

credential-xdg

Ubah sampel " store" backend kredensial pembantu untuk mengikuti lokasi file konfigurasi XDG saat ditentukan.

Dokter sekarang berkata:

Jika tidak ditentukan:

  • kredensial akan dicari dari ~/.git-credentialsdan $XDG_CONFIG_HOME/git/credentials, dan
  • kredensial akan ditulis ~/.git-credentialsjika ada, atau $XDG_CONFIG_HOME/git/credentialsjika ada dan yang sebelumnya tidak.
VonC
sumber
4

Di bawah cmd akan berfungsi jika kita tidak memiliki @ di kata sandi: git pull https://username:pass@[email protected]/my/repository Jika Anda memiliki @ di kata sandi, gantilah dengan% 40 seperti yang ditunjukkan di bawah ini: git pull https://username:pass%[email protected]/my/repository

Sagar Deshmukh
sumber
1

Jika Anda ingin melakukan ini dalam skrip CI / CD di Gitlab ( gitlab-ci.yml). Anda bisa menggunakan

git pull $CI_REPOSITORY_URL

yang akan diterjemahkan menjadi sesuatu seperti:

git pull https://gitlab-ci-token:[MASKED]@gitlab.com/gitlab-examples/ci-debug-trace.gi

Dan saya cukup yakin token yang digunakannya adalah token sementara / per pekerjaan - jadi celah keamanan dengan metode ini sangat berkurang.

MountainAsh
sumber
0

Anda cukup menggunakan nama pengguna tidak perlu menggunakan kata sandi karena kata sandi akan diminta di git bash.

git pull https://[email protected]/username/myrepo
Krishnamoorthy Acharya
sumber