Her git anında kullanıcı adı ve parolanın belirtilmesini nasıl önleyebilirim?


317

ben git push uzak bir Git depo benim iş.

Her biri pushbeni girmemi isteyecek usernameve password. Ben her itme için önlemek istiyorum, ama önlemek için nasıl yapılandırmak için?


6
Burada bir yanıt bulabilirsiniz: stackoverflow.com/questions/6565357/…
kbdjockey

3

bitbucket için lütfen bu bağlantıyı
JDP

Yanıtlar:


346

1. Bir SSH anahtarı oluşturun

Linux / Mac

Ssh anahtarları oluşturmak için terminali açın:

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

Pencereler için

(Yalnızca taahhüt programı sertifikaları / özel ve genel ssh anahtarlarını kullanabiliyorsa çalışır)

  1. Anahtar oluşturmak için Putty Gen kullanma
  2. Anahtarı açık bir SSH anahtarı olarak dışa aktarma

İşte bir izlenecek yol yukarıdaki adımlar için macun gen üzerinde

2. SSH anahtarını uzak havuzla ilişkilendirin

Bu adım, uzaktan kumandanızın kurulumuna bağlı olarak değişir.

  • Bu bir GitHub veri havuzuysa ve yönetici ayrıcalıklarına sahipseniz, ayarlara gidin ve 'SSH anahtarı ekle'yi tıklayın. İçeriğinizi ~/.ssh/id_rsa.pub'Anahtar' etiketli alana kopyalayın .

  • Deponuz başka biri tarafından yönetiliyorsa, yöneticinize id_rsa.pub.

  • Uzak deponuz sizin tarafından yönetiliyorsa, bu komutu kullanabilirsiniz:

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

3. SSH destekleyen bir forma uzak URL ayarlayın 1

Yukarıdaki adımları uyguladıysanız ve hâlâ şifre istemi alıyorsanız, repo URL'nizin formda olduğundan emin olun

git+ssh://git@github.com/username/reponame.git

aksine

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

Repo URL'nizi görmek için şunu çalıştırın:

git remote show origin

URL'yi aşağıdakilerle değiştirebilirsiniz:

git remote set-url origin git+ssh://git@github.com/username/reponame.git

[1] Bu bölüm Eric P'nin cevabını içermektedir.


3
Ben ubuntu üzerinde adım 1 ve adım 2 koştu ama hala u_id passwd istiyor. Ben de koştum: ssh -T git@github.com. Hala aynı. Ne yapalım?
Radhika

4
@Rads Eric P'nin diğer cevabını denediniz mi?
yo'

2
@dialex Uzak git deposunu yöneten bir kişi demekti.
selalerer

5
git remote set-url origin git + ssh: //git@github.com/username/reponame.git bu komut benim için yararlı.
ArtificiallyIntelligence

2
Bu benim için çalıştıgit remote set-url origin git@github.com:/username/projectname.git
Kurt

181

Git depolarıyla kalıcı kimlik doğrulama,

Kimlik bilgileri önbelleğini etkinleştirmek için aşağıdaki komutu çalıştırın.

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

Username for 'https://github.com': <USERNAME>
Password for 'https://USERNAME@github.com': <PASSWORD>

Kullanım ayrıca önbellek kullanım süresini de belirtmelidir ,

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

Kimlik bilgileri önbelleğini etkinleştirdikten sonra 7200 saniye (2 saat) önbelleğe alınır .

Not: Yerel diskte şifrelenmemiş parolayı depolayan kimlik bilgisi yardımcısı.


4
Teşekkürler. Lütfen config komutunun ne yaptığını açıklayabilir misiniz? Bir repoya ilk kez bastığımda neden bir şifre bile istemediğini merak ediyorum.
HelloWorldNoDaha fazla

1
@vivoconunxino Muhtemelen doğal olarak güvensiz olduğu için. Gönderen gitman: "Lütfen şifreleri dosya sistemi izinleri sadece korunan, diskte şifrelenmemiş depolayacak bu yardımcı kullanma."
cmaster

15
Bu yanıtta storeparolayı şifrelenmemiş olarak saklayan kimlik bilgisi yardımcısı hakkında bir uyarı eksik .
cmaster

1
@DavidRTribble: önbellek olarak ayarladınız mı? Veya ilgili dosyayı kaldırın, bkz. Git-scm.com/docs/git-credential-store
serv-inc

1
@DavidRTribble: daha iyi:git config --unset credential.helper
serv-inc

116

Zaten SSH anahtarlarınız ayarlandıysa ve hâlâ şifre istemi alıyorsanız, repo URL'nizin formda olduğundan emin olun

git+ssh://git@github.com/username/reponame.git

aksine

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

Repo URL'nizi görmek için şunu çalıştırın:

git remote show origin

URL'yi şu şekilde değiştirebilirsiniz git remote set-url:

git remote set-url origin git+ssh://git@github.com/username/reponame.git

Bu, git inityerel olarak kullandıktan sonra sorunumu giderdikten sonra, GitHub web sitesinde yeni bir repodan uzaktan kumandayı ekledikten sonra itmeye çalıştım.
sheldonkreger

1
Bunun neden kabul edilen cevabın bir parçası olmadığından emin değilim. Teşekkürler!
jwalk

1
Kabul edilen cevap, asıl kabul edilen cevap PLUS'tan oluşmalıdır.
Puce

3
"Git + ssh: //" ' git@github.com/username/reponame.git
yi atlayıp

1
@IvanShulev Başlangıçta git + ssh olmadan denedim ve çalışmadı
Antonello

40

Sadece --repogit push komutu seçeneğini kullanın. Bunun gibi:

$ git push --repo https://name:password@bitbucket.org/name/repo.git

37
Veya bunu varsayılan olarakgit remote set-url origin https://name:password@github.com/repo.git
ACyclic

name@github.com/....gitHer seferinde şifre için nagging yapmazsanız URL'yi sadece bir işe ayarladığımı not ediyorum .
timday

Github kullanıcıları için, Uzatma git push --repo https://github.com/Username/repo olmadan çalışır.git
Pe Dro

24

Süresiz Kaydetme

Sen kullanabilirsiniz git-kimlik-store yoluyla

git config credential.helper store

hangi saklar şifre dosya sisteminde şifrelenmemiş :

Bu yardımcıyı kullandığınızda, şifreleriniz şifrelenmemiş olarak yalnızca dosya sistemi izinleriyle korunan bir diskte depolanır. Bu kabul edilebilir bir güvenlik dengesi değilse, git-credential-cache'yi deneyin veya işletim sisteminiz tarafından sağlanan güvenli depolama birimiyle entegre olan bir yardımcı bulun.

Zaman Aşımı ile

Varsayılan olarak parolayı 15 dakika boyunca depolayan git-credential-cache kullanın .

git config credential.helper cache

farklı bir zaman aşımı ayarlamak için kullanın --timeout(burada 5 dakika)

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

Süresiz Güvenli Kaydetme (OS X ve Windows)

  • Mac kullanıyorsanız Git , sistem hesabınıza eklenen güvenli anahtarlıktaki kimlik bilgilerini önbelleğe alan bir “osxkeychain” modu ile birlikte gelir . Bu yöntem kimlik bilgilerini diskte depolar ve süresi asla dolmaz, ancak HTTPS sertifikalarını ve Safari otomatik dolgularını depolayan aynı sistemle şifrelenir. Komut satırında aşağıdakileri çalıştırmak bu özelliği etkinleştirir:git config --global credential.helper osxkeychain . Kimlik bilgilerini Keychain uygulamasını kullanarak Keychain'de saklamanız gerekir.
  • Windows kullanıyorsanız, “Windows için Git Kimlik Bilgisi Yöneticisi” adlı bir yardımcı yükleyebilirsiniz. Bu, yukarıda açıklanan “osxkeychain” yardımcısına benzer, ancak hassas bilgileri denetlemek için Windows Kimlik Bilgisi Deposu'nu kullanır. Https://github.com/Microsoft/Git-Credential-Manager-for-Windows adresinde bulunabilir . [benimkini vurgular]

Windows için credential.helper cacheçalışmıyor. Olmalı git config --global credential.helper wincred.
Paulo Merson

1
Https kullanmak zorunda kaldığınızda bu yardımcı olur. Eğer ssh kullanırsam sunucudaki benim git kilitleniyor, bu yüzden SSH anahtarları seçeneğim yok.
Sridhar Sarnobat

8

Ben https://github.com/org/repo.gitssh link yerine https link ( ) kullanıyordum;

git@github.com:org/repo.git  

Değiştirme benim için sorunu çözdü!


6

Aşama 1 -

Aşağıdaki komutu kullanarak linux sisteminizde SSH anahtarları oluşturun

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

Parola ve dosya adını soracaktır (varsayılan ~ / .ssh / id_rsa, ~ / .ssh / id_rsa.pub olacaktır)

Adım 2 -

Dosyalar oluşturulduktan sonra github hesabı ssh bölümüne ortak anahtar id_rsa.pub ekleyin.

Aşama 3 -

Makinenizde aşağıdaki komutu kullanarak ssh-agent'a id_rsa özel anahtarını ekleyin

ssh-add ~/.ssh/id_rsa 

Adım 4 -

Şimdi aşağıdaki komutu kullanarak yerel git deponuza uzak url git@github.com: user_name / repo_name.git ekleyin.

git remote remove origin
git remote add origin git@github.com:user_name/repo_name.git

Bu kadar.



5

Windows işletim sisteminde bunun yerine bunu kullanın, bu benim için çalışıyor:

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

Örneğin

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

5

Yukarıda birkaç kez bahsedilen çözüm hakkında bir şey belirtmek istedim:

git config credential.helper store

Bundan sonra şifre gerektiren herhangi bir komutu kullanabilirsiniz. Zorlamak zorunda değilsin. (örneğin çekebilirsiniz) Bundan sonra, kullanıcı adınızı / şifrenizi tekrar yazmanız gerekmez.


3

Pavel'in önerdiği cevabı kullandım ve benim için çalıştı. Farkım, uzaktan kumandayı bu şekilde eklerken yapmaktı:git remote add (alias) https://(name:password)@github.com/(the remote address).git


3

Aşağıdaki komutu çalıştırmak sorunu benim için çözdü.

git config --global credential.helper wincred

Lütfen aşağıdaki github belgelerine bakın:

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

3

Bildiğim kadarıyla, sadece iki güvenli yol vardır: bir anahtar deposu kullanılarak şifrelenmiş ssh veya passwd .

SSH

  1. Github'ınıza giriş yapın;
  2. Ziyaret edin: https://github.com/settings/keys ;
  3. Yeni SSH anahtarı;
  4. cat ~/.ssh/id_rsa.pub, buraya yapıştırın, adlandırın ve kaydedin (böyle bir dosyanız yoksa, kendiniz için bir tane oluşturun ssh-keygen -t rsa- tüm istemler için girin );
  5. Yerel deponuza gidin ve uzaktan kumandayı güncelleyin git remote set-url origin git+ssh://git@github.com/username/reponame.git- önce kontrol edebilirsiniz git remote -v);
  6. Buyurun, sadece touch t; git add t; git commit -m "test"; git pushve şifresiz dünyanın tadını çıkarmak için evet onaylayın .

passwd bir anahtar deposu kullanarak ŞİFRELİ

Yalnızca git config --global credential.helper storebelirtildiği gibi kullanırsanız , şifrelenmemiş parolalarınız, ~/.git-credentialsgöründüğü kadar güvenli olmayan düz bir metinde saklanır .

Deneyin şifrelemek olarak

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

Bu durumda kullanıyorsunuz https://git@github.com/username/reponame.git.


2

Windows'ta Çözümüm:

  1. Dizine sağ tıklayın ve "Git Bash Here" ı seçin.
  2. ssh-keygen -t rsa (Tüm değerler için enter tuşuna basın)
  3. Terminali kontrol edin: Your public key has been saved in /c/Users/<your_user_name_here>/.ssh/id_rsa.pub
  4. Ortak anahtarı belirtilen dosyadan kopyala.
  5. GitHub profilinize gidin => Ayarlar => SSH ve GPG tuşları => Yeni SSH anahtarı => SSH anahtarınızı oraya yapıştırın => Kaydet

2

Bilgisayarınız güvenliyse veya şifre güvenliği ile ilgilenmiyorsanız, bu çok basit bir şekilde gerçekleştirilebilir. Uzak deponun GitHub'da olduğunu ve uzak depo originiçin yerel adınız olduğunu varsayarsak, bu komutu kullanın

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

--pushBayrak Bunun için depo URL'sini değiştirir sağlar git pushsadece komuta. (Orijinal gönderide sorulan soru git pushyalnızca komutla ilgilidir. Yalnızca push işlemleri için bir kullanıcı adı + parola istemek GitHub'daki genel depolar için normal kurulumdur . GitHub'daki özel depoların çekme ve getirme işlemleri için bir kullanıcı adı + parolası gerektirdiğini unutmayın. , özel bir depo için kullanmak istemezsiniz --push flag...)

UYARI: Bu doğal olarak güvenli değildir, çünkü:

  1. İSS'niz veya ağ erişiminizi kaydeden herkes URL'de şifreyi düz metin olarak kolayca görebilir;

  2. PC'nize erişen herkes şifrenizi kullanarak görüntüleyebilir git remote show origin.

Bu yüzden SSH anahtarı kullanmak kabul edilen cevaptır.

Bir SSH anahtarı bile tamamen güvenli değildir . Örneğin, PC'nize erişen herkes yine de deponuzu enkaza uğratan veya kodunuzda ince değişiklikler yapan push komutları yapabilir. (Tüm aktarılan taahhütler GitHub'da açıkça görülebilir. Ancak birisi kodunuzu gizlice değiştirmek isterse --amend, taahhüt mesajını değiştirmeden önceki bir taahhüdü yapabilir ve ardından zorla itebilir. Bu, pratikte farkedilmesi zor ve oldukça zor olurdu. )

Ancak şifrenizi açıklamak daha kötüdür . Bir saldırgan kullanıcı adınız + şifreniz hakkında bilgi edinirse, sizi kendi hesabınızdan kilitlemek, hesabınızı silmek, depoyu kalıcı olarak silmek vb.


Alternatif olarak - basitlik ve güvenlik için - URL'de yalnızca kullanıcı adınızı sağlayabilirsiniz , böylece her seferinde şifrenizi yazmanız gerekir, git pushancak her seferinde kullanıcı adınızı vermek zorunda kalmazsınız. (Bu yaklaşımı oldukça seviyorum, şifreyi yazmak zorunda kalmam her seferinde düşünmem için bir duraklama veriyor git push, bu yüzden git pushyanlışlıkla yapamam .)

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

ya şifre varsa @, git sunucusunun bir parçası olarak @ sonra komut düşünme şifresini kırıyor?
Pranav Singh

Eğer şifreniz '@' içeriyorsa, burada kendi başınasınız, üzgünüm. Parolanızı değiştirebilir misiniz?
radfast

Hizmet hesabına (kişisel değil) sahip Sürekli Entegrasyon için otomasyon yaparken parolayı değiştirme isteğini artırmam gerekiyor. Şimdi güvenli giriş için SSH Keys kullanılmış
Pranav Singh

1

Tüm bunlar, git klon / pull / push / fetch komutlarında kimlik bilgilerini bir kanaldan göndermek için bir seçenek sağlamadığı için ortaya çıkar. Bu, credential.helper verir, ancak dosya sisteminde depolar veya bir daemon vb oluşturur. Genellikle, GIT kimlik bilgileri sistem düzeyindedir ve onları güvende tutmak için git komutlarını çağıran uygulama üzerinde. Gerçekten çok güvensiz.

İşte etrafta çalışmak zorunda olduğum şey. 1. Git sürümü (git --version) 1.8.3 veya daha büyük olmalıdır.

GIT CLONE

Klonlama için, URL'yi şu biçimden değiştirdikten sonra "git clone URL" yi kullanın: http: // {myuser} @ {my_repo_ip_address} / {myrepo_name.git} için http: // {myuser}: {mypwd} @ {my_repo_ip_address} /{myrepo_name.git}

Ardından, sonraki bölümdeki gibi parola deposunu temizleyin.

EVLERDE

Şimdi, bu giderdi ve

  1. şifreyi git remote orijini ile yazdı. Hasarı görmek için "git remote -v" yazın. Uzak kaynak URL'sini şifresiz ayarlayarak düzeltin. "git remote set_url kökenli http: // {kullanıcım}} {{my_repo_ip_address} / {myrepo_name.git}"
  2. şifreyi depodaki .git / log dosyalarına yazdı. Pwd'nin tüm örneklerini find .git / logs -exec sed -i 's / {my_url_with_pwd} // g' {} \; gibi bir unix komutu kullanarak değiştirin. Burada, {my_url_with_pwd} şifreli URL'dir. URL'nin eğik çizgileri olduğundan, iki ters eğik çizgiden kaçması gerekir. Örneğin, http: // kris: passs123@192.168.0.1/proj.git -> http: \\ / \\ / kris: passs123@192.168.0.1 \\ / proj.git URL'si için

Uygulamanız bu komutları vermek için Java kullanıyorsa, Çalışma Zamanı yerine ProcessBuilder kullanın. Çalışma Zamanı'nı kullanmanız gerekiyorsa, String dizisini / bin / bash ve -c ile bağımsız değişken olarak bağımsız değişken olarak alan getRunTime (). Exec komutunu kullanın; bunun yerine tek bir String'i bağımsız değişken olarak alır.

GIT FETCH / ÇEKME / PUSH

  1. git remote url'sinde şifreyi şu şekilde ayarla: "git remote set_url origin http: // {myuser}: {mypwd} @ {my_repo_ip_address} / {myrepo_name.git}"
  2. Git fetch / push / pull komutunu verin. Daha sonra sizden şifre istenmez.
  3. Boşaltma işlemini bir önceki bölümdeki gibi yapın. Kaçırma.

0

Bir SSH özel anahtarı ayarlamanız gerekir, bu sayfayı gözden geçirebilirsiniz , Mac'te kurulum nasıl yapılır, linux üzerindeyseniz kılavuz neredeyse aynı olmalıdır, Windows'ta MSYS gibi bir araca ihtiyacınız olacaktır .


0

En azından Windows'ta TortoiseGIT kullanırken SSH anahtarları oluşturmanın ve bunları GIT sunucusuna basitçe kullanarak aktarmanın mümkün olduğu görülüyor:

> ssh-keygen.exe
> ssh-copy-id [username]@[GIT_server]
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.