Bagaimana saya menghindari spesifikasi nama pengguna dan kata sandi di setiap push git?

317

Saya git pushpekerjaan saya ke repositori Git jarak jauh.

Setiap orang pushakan meminta saya untuk memasukkan usernamedan password. Saya ingin menghindarinya untuk setiap dorongan, tetapi bagaimana mengonfigurasi untuk menghindarinya?

Leem.fin
sumber
6
Sebuah jawaban tersedia di sini: stackoverflow.com/questions/6565357/…
kbdjockey
3
Singkat cerita: Untuk github, Cukup ikuti dua tautan ini help.github.com/articles/generating-ssh-keys help.github.com/articles/changing-a-remote-s-url
JRun
untuk bitbucket silakan ikuti tautan ini
JDP

Jawaban:

346

1. Hasilkan kunci SSH

Linux / Mac

Buka terminal untuk membuat kunci ssh:

cd ~                 #Your home directory
ssh-keygen -t rsa    #Press enter for all values

Untuk Windows

(Hanya berfungsi jika program komit mampu menggunakan sertifikat / kunci ssh publik & publik)

  1. Gunakan Putty Gen untuk menghasilkan kunci
  2. Ekspor kunci sebagai kunci SSH terbuka

Berikut adalah langkah - langkah pada gen dempul untuk langkah-langkah di atas

2. Kaitkan kunci SSH dengan repositori jarak jauh

Langkah ini bervariasi, tergantung pada cara mengatur jarak jauh Anda.

  • Jika itu adalah repositori GitHub dan Anda memiliki hak administratif, buka pengaturan dan klik 'tambah kunci SSH'. Salin konten Anda ~/.ssh/id_rsa.pubke bidang yang berlabel 'Kunci'.

  • Jika repositori Anda dikelola oleh orang lain, berikan administrator Anda id_rsa.pub.

  • Jika repositori jarak jauh Anda dikelola oleh Anda, Anda dapat menggunakan perintah ini misalnya:

    scp ~/.ssh/id_rsa.pub YOUR_USER@YOUR_IP:~/.ssh/authorized_keys/id_rsa.pub

3. Setel URL jarak jauh Anda ke formulir yang mendukung SSH 1

Jika Anda telah melakukan langkah-langkah di atas dan masih mendapatkan prompt kata sandi, pastikan URL repo Anda ada dalam formulir

git+ssh://[email protected]/username/reponame.git

sebagai lawan

https://github.com/username/reponame.git

Untuk melihat URL repo Anda, jalankan:

git remote show origin

Anda dapat mengubah URL dengan:

git remote set-url origin git+ssh://[email protected]/username/reponame.git

[1] Bagian ini menggabungkan jawaban dari Eric P.

Zero Pertama
sumber
3
Saya menjalankan langkah 1 dan langkah 2 di ubuntu tetapi masih meminta saya untuk passwd u_id. Saya juga menjalankan: ssh -T [email protected]. Masih sama. Apa yang harus dilakukan?
Radhika
4
@ Rad Sudahkah Anda mencoba jawaban yang lain, oleh Eric P ?
yo '
2
@dialex Maksudnya seseorang yang mengelola repositori git jarak jauh.
selalerer
5
git remote set-url origin git + ssh: //[email protected]/username/reponame.git perintah ini sangat membantu saya.
Kecerdasan Artifisial
2
Ini berhasil untuk sayagit remote set-url origin [email protected]:/username/projectname.git
Kurt
181

Mengotentikasi secara permanen dengan repositori Git,

Jalankan perintah berikut untuk mengaktifkan caching kredensial.

$ git config credential.helper store
$ git push https://github.com/repo.git

Username for 'https://github.com': <USERNAME>
Password for 'https://[email protected]': <PASSWORD>

Gunakan juga harus menentukan caching berakhir ,

git config --global credential.helper 'cache --timeout 7200'

Setelah mengaktifkan cache kredensial, itu akan di-cache selama 7200 detik (2 jam) .

Catatan: Pembantu kredensial menyimpan kata sandi yang tidak terenkripsi pada disk lokal.

Jay Patel
sumber
4
Terima kasih. Bisakah Anda jelaskan apa yang dilakukan perintah konfigurasi? Saya bertanya-tanya mengapa itu bahkan tidak meminta saya untuk kata sandi saat pertama kali saya mendorong ke repo.
HelloWorldNoMore
1
@vivoconunxino Mungkin karena itu pada dasarnya tidak aman. Dari halaman gitmanual: "Menggunakan bantuan ini akan menyimpan kata sandi Anda yang tidak dienkripsi di disk, hanya dilindungi oleh izin sistem file."
cmaster - mengembalikan monica
15
Jawaban ini tidak memiliki peringatan tentang storepembantu kredensial yang menyimpan kata sandi pada disk yang tidak dienkripsi.
cmaster - mengembalikan monica
1
@ Davidvidribble: setel ke cache? Atau hapus file yang relevan, lihat git-scm.com/docs/git-credential-store
serv-inc
1
@ Davidvidribble: lebih baik:git config --unset credential.helper
serv-inc
116

Jika Anda sudah menyiapkan kunci SSH Anda dan masih mendapatkan prompt kata sandi, pastikan URL repo Anda ada dalam formulir

git+ssh://[email protected]/username/reponame.git

sebagai lawan

https://github.com/username/reponame.git

Untuk melihat URL repo Anda, jalankan:

git remote show origin

Anda dapat mengubah URL dengan git remote set-urlseperti:

git remote set-url origin git+ssh://[email protected]/username/reponame.git
Eric P.
sumber
Inilah yang memperbaiki masalah saya setelah saya gunakan git initsecara lokal, kemudian mencoba mendorong setelah menambahkan remote dari repo baru di situs web GitHub.
sheldonkreger
1
Tidak yakin mengapa ini bukan bagian dari jawaban yang diterima. Terima kasih!
jwalk
1
Jawaban yang diterima harus terdiri dari jawaban yang sebenarnya diterima, PLUS yang ini.
Puce
3
Anda dapat menghilangkan "git + ssh: //" dan cukup gunakan[email protected]/username/reponame.git
Ivan Shulev
1
@IvanShulev Saya memang mencoba awalnya tanpa git + ssh dan tidak berhasil
Antonello
40

Cukup gunakan --repoopsi untuk perintah git push. Seperti ini:

$ git push --repo https://name:[email protected]/name/repo.git
Pavel
sumber
37
Atau Anda dapat mengatur ini secara default dengangit remote set-url origin https://name:[email protected]/repo.git
ACyclic
Saya perhatikan mengatur URL menjadi hanya [email protected]/....gitberfungsi jika Anda tidak keberatan dimintai kata sandi setiap kali.
timday
Untuk pengguna github, git push --repo https://github.com/Username/repo Itu berfungsi tanpa .git ekstensi
Pe Dro
24

Hemat Tanpa Batas

Anda dapat menggunakan git-credential-store via

git config credential.helper store

yang menyimpan kata sandi Anda yang tidak dienkripsi dalam sistem file :

Menggunakan bantuan ini akan menyimpan kata sandi Anda yang tidak dienkripsi di disk, hanya dilindungi oleh izin sistem file. Jika ini bukan tradeoff keamanan yang dapat diterima, coba git-credential-cache, atau cari pembantu yang terintegrasi dengan penyimpanan aman yang disediakan oleh sistem operasi Anda.

Dengan Timeout

Gunakan cache git-credential-cache yang secara default menyimpan kata sandi selama 15 menit.

git config credential.helper cache

untuk mengatur batas waktu yang berbeda, gunakan --timeout(di sini 5 menit)

git config credential.helper 'cache --timeout=300'

Penghematan Aman Tanpa Batas (OS X dan Windows)

  • Jika Anda menggunakan Mac, Git hadir dengan mode "osxkeychain" , yang menyimpan kredensial di gantungan kunci aman yang dilampirkan ke akun sistem Anda. Metode ini menyimpan kredensial pada disk, dan mereka tidak pernah kedaluwarsa, tetapi dienkripsi dengan sistem yang sama yang menyimpan sertifikat HTTPS dan pengisian otomatis Safari. Menjalankan berikut pada baris perintah akan mengaktifkan fitur ini: git config --global credential.helper osxkeychain. Anda harus menyimpan kredensial di Keychain menggunakan aplikasi Keychain juga.
  • Jika Anda menggunakan Windows, Anda dapat menginstal pembantu yang disebut "Git Credential Manager untuk Windows." Ini mirip dengan bantuan "osxkeychain" yang dijelaskan di atas, tetapi menggunakan Windows Credential Store untuk mengontrol informasi sensitif. Itu dapat ditemukan di https://github.com/Microsoft/Git-Credential-Manager-for-Windows . [menekankan milikku]
serv-inc
sumber
Untuk Windows credential.helper cacheTIDAK berfungsi. Seharusnya begitu git config --global credential.helper wincred.
Paulo Merson
1
Ini sangat membantu ketika Anda dipaksa untuk menggunakan https. Git saya di server hang jika saya menggunakan ssh, jadi saya tidak memiliki opsi kunci SSH.
Sridhar Sarnobat
8

Saya menggunakan tautan https ( https://github.com/org/repo.git) alih-alih tautan ssh;

[email protected]:org/repo.git  

Switching memecahkan masalah untuk saya!

ishan
sumber
6

Langkah 1 -

Buat kunci SSH pada sistem linux Anda menggunakan perintah di bawah ini

ssh-keygen -t rsa -b 4096 -C "your_email"

Ia akan meminta frasa sandi dan nama file (standarnya adalah ~ / .ssh / id_rsa, ~ / .ssh / id_rsa.pub)

Langkah 2 -

Setelah file dibuat, tambahkan id_rsa.pub kunci publik ke bagian ssh akun github.

Langkah 3 -

Pada mesin Anda tambahkan id_rsa kunci pribadi ke ssh-agent menggunakan perintah di bawah ini

ssh-add ~/.ssh/id_rsa 

Langkah 4 -

Sekarang tambahkan remote url [email protected]: user_name / repo_name.git ke repo git lokal Anda menggunakan perintah di bawah ini.

git remote remove origin
git remote add origin [email protected]:user_name/repo_name.git

Itu dia.

Anil Agrawal
sumber
5

Sebaliknya, pada sistem operasi Windows, ini berfungsi untuk saya:

https://{Username}:{Password}@github.com/{Username}/{repo}.git

misalnya

git clone https://{Username}:{Password}@github.com/{Username}/{repo}.git

git pull https://{Username}:{Password}@github.com/{Username}/{repo}.git

git remote add origin https://{Username}:{Password}@github.com/{Username}/{repo}.git

git push origin master
Ayejuni Ilemobayo Kings
sumber
5

Hanya ingin menunjukkan sesuatu tentang solusi yang disebutkan di atas beberapa kali:

git config credential.helper store

Anda dapat menggunakan perintah apa pun yang memerlukan kata sandi setelah ini. Anda tidak perlu mendorong. (Anda juga dapat menarik misalnya) Setelah itu, Anda tidak perlu mengetikkan nama pengguna / kata sandi lagi.

TrollAxeThrower
sumber
3

Saya menggunakan jawaban yang disarankan Pavel dan itu berhasil untuk saya. Perbedaan saya adalah melakukannya ketika saya menambahkan remote seperti:git remote add (alias) https://(name:password)@github.com/(the remote address).git

dsmryder
sumber
3

Menjalankan perintah di bawah ini memecahkan masalah untuk saya.

git config --global credential.helper wincred

Silakan lihat dokumentasi github di bawah ini:

https://help.github.com/articles/caching-your-github-password-in-git/
Krishna
sumber
3

Sejauh yang saya tahu, hanya ada dua cara aman : ssh atau passwd dienkripsi menggunakan keystore .

SSH

  1. Masuk github Anda;
  2. Kunjungi: https://github.com/settings/keys ;
  3. Kunci SSH baru;
  4. cat ~/.ssh/id_rsa.pub, rekatkan di sana, beri nama dan simpan (jika Anda tidak memiliki file seperti itu, buat sendiri untuk Anda ssh-keygen -t rsa- cukup masukkan untuk semua petunjuk);
  5. Buka repositori lokal Anda dan perbarui remote Anda dengan git remote set-url origin git+ssh://[email protected]/username/reponame.git- Anda dapat memeriksanya terlebih dahulu dengan git remote -v);
  6. Ini dia, adil touch t; git add t; git commit -m "test"; git pushdan konfirmasikan ya untuk menikmati dunia tanpa kata sandi .

passwd DIENALKAN menggunakan keystore

Jika Anda hanya menggunakan git config --global credential.helper storeseperti yang disebutkan orang lain, kata sandi Anda yang tidak terenkripsi akan disimpan dalam teks biasa ~/.git-credentialsyang tidak aman seperti kedengarannya.

Cobalah untuk mengenkripsi sebagai

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

git config --global credential.helper store

Dalam hal ini, Anda menggunakan https://[email protected]/username/reponame.git.

Dengarkan
sumber
2

Solusi Saya di Windows:

  1. Klik kanan pada direktori untuk menekan dan pilih "Git Bash Here".
  2. ssh-keygen -t rsa (Tekan enter untuk semua nilai)
  3. Periksa terminal untuk: Your public key has been saved in /c/Users/<your_user_name_here>/.ssh/id_rsa.pub
  4. Salin kunci publik dari file yang ditentukan.
  5. Buka profil GitHub Anda => Pengaturan => Kunci SSH dan GPG => Kunci SSH Baru => Rekatkan kunci SSH Anda di sana => Simpan
Мони Мон
sumber
2

Jika PC Anda aman atau Anda tidak peduli dengan keamanan kata sandi, ini dapat dicapai dengan sangat sederhana. Dengan asumsi bahwa repositori jarak jauh ada di GitHub dan originnama lokal Anda untuk repositori jarak jauh, gunakan perintah ini

git remote set-url --push origin https://<username>:<password>@github.com/<repo>

The --pushflag memastikan ini mengubah URL dari repositori untuk git pushperintah saja. (Pertanyaan yang diajukan di posting asli hanya tentang git pushperintah. Memerlukan nama pengguna + kata sandi hanya untuk operasi push adalah pengaturan normal untuk repositori publik di GitHub. Perhatikan bahwa repositori pribadi di GitHub juga akan memerlukan nama pengguna + kata sandi untuk menarik dan mengambil operasi , jadi untuk repositori pribadi Anda tidak ingin menggunakan --push flag...)

PERINGATAN: Ini pada dasarnya tidak aman karena:

  1. ISP Anda, atau siapa pun yang masuk jaringan Anda, dapat dengan mudah melihat kata sandi dalam teks biasa di URL;

  2. siapa pun yang mendapatkan akses ke PC Anda dapat melihat kata sandi Anda menggunakan git remote show origin.

Itu sebabnya menggunakan kunci SSH adalah jawaban yang diterima.

Bahkan kunci SSH tidak sepenuhnya aman . Siapa pun yang mendapatkan akses ke PC Anda masih bisa, misalnya, membuat dorongan yang merusak repositori Anda atau - lebih buruk - dorongan berkomitmen membuat perubahan halus pada kode Anda. (Semua komit yang ditekan jelas sangat terlihat di GitHub. Tetapi jika seseorang ingin mengubah kode Anda secara diam-diam, mereka dapat --amendmelakukan komit sebelumnya tanpa mengubah pesan komit, dan kemudian memaksakannya. Itu akan menjadi sembunyi-sembunyi dan cukup sulit untuk diperhatikan dalam praktiknya. )

Tetapi mengungkapkan kata sandi Anda lebih buruk . Jika penyerang mendapatkan pengetahuan tentang nama pengguna + kata sandi Anda, mereka dapat melakukan hal-hal seperti mengunci Anda dari akun Anda sendiri, menghapus akun Anda, menghapus repositori secara permanen, dll.


Atau - untuk kesederhanaan dan keamanan - Anda hanya dapat memberikan nama pengguna Anda di URL, sehingga Anda harus mengetikkan kata sandi setiap kali Anda git pushtetapi Anda tidak harus memberikan nama pengguna setiap kali. (Saya sangat menyukai pendekatan ini, harus mengetikkan kata sandi memberi saya jeda untuk berpikir setiap kali saya git push, jadi saya tidak dapat secara tidak git pushsengaja.)

git remote set-url --push origin https://<username>@github.com/<repo>
Radfast
sumber
bagaimana jika kata sandi memiliki @, itu melanggar perintah kata sandi setelah @ sebagai bagian dari server git?
Pranav Singh
Jika kata sandi Anda mengandung '@' Anda sendirian di sini, maaf. Anda dapat mengubah kata sandi Anda?
radfast
Perlu meningkatkan permintaan untuk mengubah kata sandi karena saya melakukan otomatisasi untuk Continuous Integration yang memiliki akun layanan (bukan pribadi). Sekarang menggunakan SSH Keys untuk login aman
Pranav Singh
1

Semua ini muncul karena git tidak menyediakan opsi dalam perintah klon / tarik / tekan / ambil untuk mengirim kredensial melalui pipa. Meskipun memberikan credential.helper, ia menyimpan pada sistem file atau membuat daemon, dll. Seringkali, kredensial GIT adalah yang level sistem dan yang membuat kita tetap aman adalah pada aplikasi yang menjalankan perintah git. Memang sangat tidak aman.

Inilah yang harus saya kerjakan. 1. Versi git (git --version) harus lebih besar dari atau sama dengan 1.8.3.

GIT CLONE

Untuk kloning, gunakan "git clone URL" setelah mengubah URL dari format, http: // {myuser} @ {my_repo_ip_address} / {myrepo_name.git} ke http: // {myuser}: {mypwd} @ {my_repo_ip_address} /{myrepo_name.git}

Kemudian bersihkan repositori kata sandi seperti pada bagian selanjutnya.

PEMBELIAN

Sekarang, ini akan hilang dan

  1. menulis kata sandi di git remote origin. Ketik "git remote -v" untuk melihat kerusakan. Perbaiki ini dengan mengatur URL asal jarak jauh tanpa kata sandi. "git remote set_url asal http: // {myuser} @ {my_repo_ip_address} / {myrepo_name.git}"
  2. menulis kata sandi di .git / log di repositori. Ganti semua instance pwd menggunakan perintah unix seperti find .git / log -exec sed -i / {my_url_with_pwd} // g '{} \; Di sini, {my_url_with_pwd} adalah URL dengan kata sandi. Karena URL memiliki garis miring ke depan, URL harus diloloskan oleh dua garis miring ke belakang. Misalnya, untuk URL http: // kris: [email protected]/proj.git -> http: \\ / \\ / kris: [email protected] \\ / proj.git

Jika aplikasi Anda menggunakan Java untuk mengeluarkan perintah ini, gunakan ProcessBuilder alih-alih Runtime. Jika Anda harus menggunakan Runtime, gunakan getRunTime (). Exec yang menggunakan array String sebagai argumen dengan / bin / bash dan -c sebagai argumen daripada argumen yang menggunakan String tunggal sebagai argumen.

GIT FETCH / PULL / PUSH

  1. atur kata sandi di url git remote sebagai: "git remote set_url asal http: // {myuser}: {mypwd} @ {my_repo_ip_address} / {myrepo_name.git}"
  2. Keluarkan perintah git fetch / push / pull. Anda tidak akan dimintai kata sandi.
  3. Lakukan pembersihan seperti pada bagian sebelumnya. Jangan sampai ketinggalan.
Krishna
sumber
0

Anda harus mengatur kunci pribadi SSH, Anda dapat meninjau halaman ini , bagaimana melakukan pengaturan pada Mac, jika Anda menggunakan linux, panduannya harus hampir sama, pada Windows Anda memerlukan alat seperti MSYS .

RageZ
sumber
0

Tampak bahwa, setidaknya saat menggunakan TortoiseGIT pada Windows, dimungkinkan untuk membuat kunci SSH dan mentransfernya ke server GIT hanya menggunakan:

> ssh-keygen.exe
> ssh-copy-id [username]@[GIT_server]
EquipDev
sumber