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?
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)
Gunakan Putty Gen untuk menghasilkan kunci
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:
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>
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.
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:
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.
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]
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;
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.
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
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);
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);
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.
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
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:
ISP Anda, atau siapa pun yang masuk jaringan Anda, dapat dengan mudah melihat kata sandi dalam teks biasa di URL;
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.)
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
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}"
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
atur kata sandi di url git remote sebagai: "git remote set_url asal http: // {myuser}: {mypwd} @ {my_repo_ip_address} / {myrepo_name.git}"
Keluarkan perintah git fetch / push / pull. Anda tidak akan dimintai kata sandi.
Lakukan pembersihan seperti pada bagian sebelumnya. Jangan sampai ketinggalan.
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 .
Tampak bahwa, setidaknya saat menggunakan TortoiseGIT pada Windows, dimungkinkan untuk membuat kunci SSH dan mentransfernya ke server GIT hanya menggunakan:
Jawaban:
1. Hasilkan kunci SSH
Linux / Mac
Buka terminal untuk membuat kunci ssh:
Untuk Windows
(Hanya berfungsi jika program komit mampu menggunakan sertifikat / kunci ssh publik & publik)
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.pub
ke 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
sebagai lawan
Untuk melihat URL repo Anda, jalankan:
Anda dapat mengubah URL dengan:
[1] Bagian ini menggabungkan jawaban dari Eric P.
sumber
git remote set-url origin [email protected]:/username/projectname.git
Mengotentikasi secara permanen dengan repositori Git,
Jalankan perintah berikut untuk mengaktifkan caching kredensial.
Gunakan juga harus menentukan caching berakhir ,
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.
sumber
git
manual: "Menggunakan bantuan ini akan menyimpan kata sandi Anda yang tidak dienkripsi di disk, hanya dilindungi oleh izin sistem file."store
pembantu kredensial yang menyimpan kata sandi pada disk yang tidak dienkripsi.git config --unset credential.helper
Jika Anda sudah menyiapkan kunci SSH Anda dan masih mendapatkan prompt kata sandi, pastikan URL repo Anda ada dalam formulir
sebagai lawan
Untuk melihat URL repo Anda, jalankan:
Anda dapat mengubah URL dengan
git remote set-url
seperti:sumber
git init
secara lokal, kemudian mencoba mendorong setelah menambahkan remote dari repo baru di situs web GitHub.[email protected]/username/reponame.git
Cukup gunakan
--repo
opsi untuk perintah git push. Seperti ini:sumber
git remote set-url origin https://name:[email protected]/repo.git
[email protected]/....git
berfungsi jika Anda tidak keberatan dimintai kata sandi setiap kali.git push --repo https://github.com/Username/repo
Itu berfungsi tanpa.git
ekstensiHemat Tanpa Batas
Anda dapat menggunakan git-credential-store via
yang menyimpan kata sandi Anda yang tidak dienkripsi dalam sistem file :
Dengan Timeout
Gunakan cache git-credential-cache yang secara default menyimpan kata sandi selama 15 menit.
untuk mengatur batas waktu yang berbeda, gunakan
--timeout
(di sini 5 menit)Penghematan Aman Tanpa Batas (OS X dan Windows)
sumber
credential.helper cache
TIDAK berfungsi. Seharusnya begitugit config --global credential.helper wincred
.Saya menggunakan tautan https (
https://github.com/org/repo.git
) alih-alih tautan ssh;Switching memecahkan masalah untuk saya!
sumber
Langkah 1 -
Buat kunci SSH pada sistem linux Anda menggunakan perintah di bawah ini
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
Langkah 4 -
Sekarang tambahkan remote url [email protected]: user_name / repo_name.git ke repo git lokal Anda menggunakan perintah di bawah ini.
Itu dia.
sumber
Kawat klien git Anda ke toko kredensial OS Anda. Misalnya di Windows Anda mengikat pembantu kredensial untuk meringis:
Apakah ada cara untuk melewatkan pengetikan kata sandi saat menggunakan https: // di GitHub?
sumber
Sebaliknya, pada sistem operasi Windows, ini berfungsi untuk saya:
misalnya
sumber
Hanya ingin menunjukkan sesuatu tentang solusi yang disebutkan di atas beberapa kali:
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.
sumber
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
sumber
Menjalankan perintah di bawah ini memecahkan masalah untuk saya.
Silakan lihat dokumentasi github di bawah ini:
sumber
Sejauh yang saya tahu, hanya ada dua cara aman : ssh atau passwd dienkripsi menggunakan keystore .
SSH
cat ~/.ssh/id_rsa.pub
, rekatkan di sana, beri nama dan simpan (jika Anda tidak memiliki file seperti itu, buat sendiri untuk Andassh-keygen -t rsa
- cukup masukkan untuk semua petunjuk);git remote set-url origin git+ssh://[email protected]/username/reponame.git
- Anda dapat memeriksanya terlebih dahulu dengangit remote -v
);touch t; git add t; git commit -m "test"; git push
dan konfirmasikan ya untuk menikmati dunia tanpa kata sandi .passwd DIENALKAN menggunakan keystore
Jika Anda hanya menggunakan
git config --global credential.helper store
seperti yang disebutkan orang lain, kata sandi Anda yang tidak terenkripsi akan disimpan dalam teks biasa~/.git-credentials
yang tidak aman seperti kedengarannya.Cobalah untuk mengenkripsi sebagai
sumber
Solusi Saya di Windows:
ssh-keygen -t rsa
(Tekan enter untuk semua nilai)Your public key has been saved in /c/Users/<your_user_name_here>/.ssh/id_rsa.pub
sumber
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
origin
nama lokal Anda untuk repositori jarak jauh, gunakan perintah iniThe
--push
flag memastikan ini mengubah URL dari repositori untukgit push
perintah saja. (Pertanyaan yang diajukan di posting asli hanya tentanggit push
perintah. 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:
ISP Anda, atau siapa pun yang masuk jaringan Anda, dapat dengan mudah melihat kata sandi dalam teks biasa di URL;
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
--amend
melakukan 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 push
tetapi Anda tidak harus memberikan nama pengguna setiap kali. (Saya sangat menyukai pendekatan ini, harus mengetikkan kata sandi memberi saya jeda untuk berpikir setiap kali sayagit push
, jadi saya tidak dapat secara tidakgit push
sengaja.)sumber
@
, itu melanggar perintah kata sandi setelah @ sebagai bagian dari server git?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
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
sumber
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 .
sumber
Tampak bahwa, setidaknya saat menggunakan TortoiseGIT pada Windows, dimungkinkan untuk membuat kunci SSH dan mentransfernya ke server GIT hanya menggunakan:
sumber