ben git push
uzak bir Git depo benim iş.
Her biri push
beni girmemi isteyecek username
ve password
. Ben her itme için önlemek istiyorum, ama önlemek için nasıl yapılandırmak için?
ben git push
uzak bir Git depo benim iş.
Her biri push
beni girmemi isteyecek username
ve password
. Ben her itme için önlemek istiyorum, ama önlemek için nasıl yapılandırmak için?
Yanıtlar:
Ssh anahtarları oluşturmak için terminali açın:
cd ~ #Your home directory
ssh-keygen -t rsa #Press enter for all values
(Yalnızca taahhüt programı sertifikaları / özel ve genel ssh anahtarlarını kullanabiliyorsa çalışır)
İşte bir izlenecek yol yukarıdaki adımlar için macun gen üzerinde
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
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.
git remote set-url origin git@github.com:/username/projectname.git
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ı.
git
man: "Lütfen şifreleri dosya sistemi izinleri sadece korunan, diskte şifrelenmemiş depolayacak bu yardımcı kullanma."
store
parolayı şifrelenmemiş olarak saklayan kimlik bilgisi yardımcısı hakkında bir uyarı eksik .
git config --unset credential.helper
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
git init
yerel olarak kullandıktan sonra sorunumu giderdikten sonra, GitHub web sitesinde yeni bir repodan uzaktan kumandayı ekledikten sonra itmeye çalıştım.
git@github.com/username/reponame.git
Sadece --repo
git push komutu seçeneğini kullanın. Bunun gibi:
$ git push --repo https://name:password@bitbucket.org/name/repo.git
git remote set-url origin https://name:password@github.com/repo.git
name@github.com/....git
Her seferinde şifre için nagging yapmazsanız URL'yi sadece bir işe ayarladığımı not ediyorum .
git push --repo https://github.com/Username/repo
olmadan çalışır.git
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.
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'
- 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]
credential.helper cache
çalışmıyor. Olmalı git config --global credential.helper wincred
.
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.
Git istemcinizi OS kimlik deponuza bağlayın. Örneğin, Windows'da kimlik bilgisi yardımcısını wincred'a bağlarsınız:
git config --global credential.helper wincred
GitHub'da https: // kullanırken şifre yazmayı atlamanın bir yolu var mı?
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
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.
Bildiğim kadarıyla, sadece iki güvenli yol vardır: bir anahtar deposu kullanılarak şifrelenmiş ssh veya passwd .
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 );git remote set-url origin git+ssh://git@github.com/username/reponame.git
- önce kontrol edebilirsiniz git remote -v
);touch t; git add t; git commit -m "test"; git push
ve şifresiz dünyanın tadını çıkarmak için evet onaylayın .Yalnızca git config --global credential.helper store
belirtildiği gibi kullanırsanız , şifrelenmemiş parolalarınız, ~/.git-credentials
gö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
.
Windows'ta Çözümüm:
ssh-keygen -t rsa
(Tüm değerler için enter tuşuna basın)Your public key has been saved in /c/Users/<your_user_name_here>/.ssh/id_rsa.pub
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 origin
için yerel adınız olduğunu varsayarsak, bu komutu kullanın
git remote set-url --push origin https://<username>:<password>@github.com/<repo>
--push
Bayrak Bunun için depo URL'sini değiştirir sağlar git push
sadece komuta. (Orijinal gönderide sorulan soru git push
yalnı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ü:
İSS'niz veya ağ erişiminizi kaydeden herkes URL'de şifreyi düz metin olarak kolayca görebilir;
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 push
ancak 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 push
yanlışlıkla yapamam .)
git remote set-url --push origin https://<username>@github.com/<repo>
@
, git sunucusunun bir parçası olarak @ sonra komut düşünme şifresini kırıyor?
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
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