Bir komut dosyasında git klonuna kullanıcı adı / şifre nasıl verilir, ancak .git / config içinde kimlik bilgileri saklanmaz


31

Böyle bir komut dosyasında git deposunu klonluyorum:

git clone https://user:password@host.com/name/.git

Bu çalışır, ancak kullanıcı adım ve şifrem! şimdi orjinal URL adresinde saklanır .git/config.

Bunu nasıl önleyebilirim, ama yine de bunu bir komut dosyasında yapabilirim (bu yüzden manuel parola girişi yok)?


Muhtemelen menşei daha sonra güncelleyebilirsin:git remote set-url origin https://host.com/name/.git
ceejayoz

@ ceejayoz Evet, bu mümkün. Fikir için teşekkürler. Ben hala bir çözüm için umut ediyorum, bu bile geçici olarak kimlik bilgilerini saklamak değil.
Nathan

4
Elbette - bir anahtarla SSH tabanlı auth kullanın.
ceejayoz

2
SSH yerine https kullanmanızın bir nedeni var mı? SSH anahtarları destekler.
mzhaase

Soruyu anlıyorum, ancak neden betiğin içinde saklanan şifreye uyuyorsunuz? Bu eşit derecede kötü.
Martijn Courteaux

Yanıtlar:


20

Kullandığım yöntem aslında git pullbir klonun yerine kullanmaktır . Komut dosyası şöyle görünür:

mkdir repo
cd repo
git init
git config user.email "email"
git config user.name "user"
git pull https://user:password@github.com/name/repo.git master

Bu, kullanıcı adınızı veya şifrenizi içeride saklamaz .git/config. Ancak, başka adımlar atılmadıkça, düz metin kullanıcı adı ve parola, işlem mevcut işlemleri gösteren komutlardan (örn. ps) Çalışırken görünür olacaktır .

Yapacağım bir başka öneri (ssh kullanamıyorsanız) aslında biraz daha güvenli olduğu için düz metin kullanıcı adı / parola yerine OAuth belirteci kullanmaktır. Profil ayarlarınızdan bir OAuth belirteci oluşturabilirsiniz: https://github.com/settings/tokens .

Daha sonra bu belirteci kullanarak çekme komutu

git pull https://$OAUTH_TOKEN:x-oauth-basic@github.com/name/repo.git master

Ne yazık ki, kimlik belirteçleri kullanamıyorum. Github kullanmıyorum ama özel bir sunucu.
Nathan

3
Ayrıca kullanıcı adı ve şifre, örneğin görünür de, olacağı unutulmamalıdır psçekme çalışır (en azından sen birbirlerinin süreçleri görmesini engelledi sürece) ise
derobert

Yemin kullanımı için puan. Bu tam olarak üretim / aşamalandırma / dev konusunda ihtiyacım olan şeydi.
RobotHumans 11:18

Bir milyon sana teşekkür ederim dostum. harcanan saatler n saat n sonunda cevabınız yeniden geldi. : thumbsup
JasdeepSingh

17

IMO en iyi çözüm özel bir GIT_ASKPASSyardımcı kullanıyor ve şifreyi başka bir ortam değişkeni olarak teslim ediyor. Örneğin, bir dosyayı aşağıdaki git-askpass-helper.shgibi oluşturun:

#!/bin/sh
exec echo "$GIT_PASSWORD"

ve sonra git clone https://username@hostname/repoçevre değişkenleri GIT_ASKPASS=/path/to/git-askpass-helper.shve ile çalıştırın GIT_PASSWORD=nuclearlaunchcodes.

Bunun, işlem listesinde parolanın görünmemesi avantajı vardır.


Yaratıcı çözüm için +1. Bu, git pullçözümden biraz daha güvenli olacak ve düz metin şifresini, otomatik olarak seçilen dağıtım aracınızda gizli olarak saklamanıza izin verecektir.
FGreg

13

Bağlantı kimlik bilgilerinizi ~/.netrcdosyanıza girebilirsiniz . Çizgileri boyunca bir şey:

machine host.example.net
login bart
password eatmyshorts

Bu dosyayı 600'e kopyaladığınızdan emin olun. Windows kullanıyorsanız, aşağıdaki bağlantı yararlı olabilir: https://stackoverflow.com/questions/6031214/git-how-to-use-netrc-file-on- windows-to-kaydet-kullanıcı ve şifreyi

Şahsen, SSH anahtarlarını doğrulama amacıyla kullanma eğilimim var (izin veriliyorsa elbette).


Peki, bu şifremi ~ / .netrc içinde bırakacaktır. Ben de istemiyorum.
Nathan

2

Düzinelerce SO gönderi, blog vb. Konuştuktan sonra , her yöntemi denedim ve elde ettiğim şey bu. Her şeyi kapsar.

Bkz Git Kimlik ve Özel Paketleri Pardus

Bunlar, etkileşimli bir şifre istemi olmadan bir havuzu klonlamak için git'i güvenli bir şekilde doğrulayabilmeniz için tüm yollar ve araçlar .

  • SSH Genel Anahtarları
    • SSH_ASKPASS
  • API Erişim Simgeleri
    • GIT_ASKPASS
    • Bunun yerine .gitconfig
    • .gitconfig [kimlik bilgisi]
    • .git-kimlik
    • .netrc
  • Bonus: Özel Paketlerle Çalışır
    • node / npm package.json
    • python / pip / yumurta gereksinimleri.txt
    • yakut mücevherler
    • Golang GoMod

Düz metin depolama için en iyi seçenekler

Burada sorulanlardan SSH Anahtarları GIT_ASKPASSya git credential storeda OS Anahtarlık yöneticisini kullanmak en iyi seçenek olabilir.

GIT_ASKPASS muhtemelen 3'ün en az anlaşıldığı için, burada detaylarını vereceğim - ve diğerleri kopya sayfasında.

GIT_ASKPASS

Bir GIT_ASKPASSkomut dosyası nasıl oluşturulur :

echo 'echo $MY_GIT_TOKEN' > $HOME/.git-askpass

Bu nasıl kullanılır:

export MY_GIT_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
export GIT_ASKPASS=$HOME/.git-askpass
git clone https://token@code.example.com/project.git

Komut dosyası şu şekilde stdin alır:

Password for 'scheme://host.tld':

Bu komut dosyası gibi Git ENV'leri alır:

GIT_DIR=/Users/me/project/.git
GIT_EXEC_PATH=/usr/local/Cellar/git/2.19.0_1/libexec/git-core
GIT_PREFIX=

Hile sayfasında daha fazla detay .

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.