Windows'ta Git Bash kullanırken her seferinde özel anahtarın şifresini çözmek için parolanın girilmesi gerekmesi nasıl engellenir?


125

Git özel deposundan indiren otomatik bir bina servisim var. Sorun, depoyu klonlamaya çalıştığında parolayı sağlaması gerektiğidir, çünkü parola hatırlanmaz; bu nedenle insan etkileşimi olmadığı için parolayı sonsuza kadar bekler. Onu id_rsa.pub'dan hatırlamaya nasıl zorlayabilirim?

Yanıtlar:


255

Windows kullanıcıları için, Git Bash ortamını, başlattığımda bir kez oturum açacak şekilde ayarladığımı not edin . Dosyamı düzenliyorum ~/.bashrc:

eval `ssh-agent`
ssh-add

Dolayısıyla Git Bash'i başlattığımda şöyle görünüyor:

Welcome to Git (version 1.7.8-preview20111206)
(etc)
Agent pid 3376
Enter passphrase for /c/Users/starmonkey/.ssh/id_dsa:
Identity added: /c/Users/starmonkey/.ssh/id_dsa (/c/Users/starmonkey/.ssh/id_dsa)

Ve şimdi her seferinde oturum açmadan diğer sunuculara ssh yapabiliyorum.


9
Bir ~ / .bashrc dosyanız yoksa, yeni bir metin dosyası (not defteri veya başka bir düzenleyici) oluşturun ve starmonkey'de belirtilen iki satırı ekleyin.
pbz

7
'~', "ana dizininiz" anlamına gelir. Windows'ta bunu bir komut kabuğu (cmd) açıp "echo% USERPROFILE%" yazarak bulabilirsiniz.
Hawkeye Parker

14
Benim için bu sözdizimi çalışmıyor. Onun eval $(ssh-agent)yerine yazmak zorunda kaldım .
çatışma

1
Sorunum, ssh-add'ın kullanması için dosyayı belirtmem gerektiğiydi. Muhtemelen birden fazlasına sahip olduğum ve varsayılan adı kullanmadığım için. Örnekssh-add ~/.ssh/myfile_rsa
Sözdizimi Hatası

1
copy > ~/.bashrcgit bash'da Windows'ta bashrc dosyasını oluşturmak için, hatayı görmezden
Ruben,

61

Bu cevap, GitHub kullanıcı adı ve şifresinin SSH anahtar şifresinin değil kalıcı olarak saklanmasını açıklar.

Windows'ta sadece çalıştırın

$ git config --global credential.helper wincred

Bu, bir dahaki sefere düğmesine bastığınızda, kullanıcı adınızı ve şifrenizi her zamanki gibi gireceğiniz, ancak Windows kimlik bilgilerine kaydedileceği anlamına gelir. Ondan sonra tekrar girmek zorunda kalmayacaksınız.

Olduğu gibi, her seferinde kullanıcı adı ve şifre girmeden GitHub'a itin (Windows'ta Git Bash) .


2
bu komuttan sonra kullanıcı adınızı ve şifrenizi yazmanız gerekir.
Stephen Tun Aung

5
Bu, SSH anahtarlarıyla mı yoksa yalnızca HTTPS (kullanıcı adı ve parola) kimlik doğrulamasıyla mı ilgili? Soru SSH anahtarlarını kullanmakla ilgili görünüyor.
Sean

Benim için mükemmel çalıştı, sanırım HTTPS (kullanıcı adı ve şifre) kimlik doğrulamasını kullanıyorum.
Jonatan

Bunu çalıştırmak hiç çıktı üretmedi.
user9993

@ user9993 Olmaz. Bu bir yapılandırma değişikliğidir, bu nedenle hiçbir çıktı yapılmayacak olsa gitda davranışını yapılandırma yönergesi kümesine göre değiştirecektir.
starbeamrainbowlabs

9

Yeni terminalleri açarken SSH parolamı yazmamayı tercih ederim; ne yazık ki starmonkey'in çözümü , her oturum için parolanın yazılmasını gerektiriyor. Bunun yerine dosyamda şu var .bash_profile:

# Note: ~/.ssh/environment should not be used, as it
#       already has a different purpose in SSH.

env=~/.ssh/agent.env

# Note: Don't bother checking SSH_AGENT_PID. It's not used
#       by SSH itself, and it might even be incorrect
#       (for example, when using agent-forwarding over SSH).

agent_is_running() {
    if [ "$SSH_AUTH_SOCK" ]; then
        # ssh-add returns:
        #   0 = agent running, has keys
        #   1 = agent running, no keys
        #   2 = agent not running
        ssh-add -l >/dev/null 2>&1 || [ $? -eq 1 ]
    else
        false
    fi
}

agent_has_keys() {
    ssh-add -l >/dev/null 2>&1
}

agent_load_env() {
    . "$env" >/dev/null
}

agent_start() {
    (umask 077; ssh-agent >"$env")
    . "$env" >/dev/null
}

if ! agent_is_running; then
    agent_load_env
fi

# If your keys are not stored in ~/.ssh/id_rsa or ~/.ssh/id_dsa, you'll need
# to paste the proper path after ssh-add
if ! agent_is_running; then
    agent_start
    ssh-add
elif ! agent_has_keys; then
    ssh-add
fi

unset env

Bu aynı zamanda yeni terminal oturumları için parolamı da hatırlayacaktır; Önyüklemeden sonra ilk terminalimi açtığımda yalnızca bir kez yazmam gerekiyor.

Bunu nereden aldığımı belirtmek isterim; bu başka birinin çalışmasının bir modifikasyonu, ama nereden geldiğini hatırlayamıyorum. Teşekkürler anonim yazar!

Güncelleme 2019-07-01: Tüm bunların gerekli olduğunu düşünmüyorum. Artık .bash_profiledosyamın ssh-agent'ı çalıştırmasını sağlayarak bunu sürekli olarak çalıştırıyorum:

eval $(ssh-agent)

Sonra şöyle bir sshyapılandırma dosyası oluşturdum:

touch ~/.ssh/config
chmod 600 ~/.ssh/config
echo 'AddKeysToAgent yes' >> ~/.ssh/config

Yine de her seferinde parolam soruluyor.
Ryan

1
@Ryan umarım az önce eklediğim güncelleme sorununuzu çözecektir. Conan.is/blogging/clojure-on-windows.html adresindeki bir blog gönderisinde bilgileri güncel tutuyorum ve aynı soruyu stackoverflow.com/questions/52423626/…
Conan

Teşekkürler, bunu kontrol edeceğim.
Ryan

@Conan Güncellenen çözüm bash oturumu başına çalışır. Çalışan bash oturumumu kapattıktan ve yeni bir tane açtıktan sonra, şifreyi tekrar girmem istendi.
Tushar Raj

5

Soruyu doğru anlarsam, yapı hizmetinde zaten yetkili bir SSH anahtarı kullanıyorsunuz, ancak her klon için parolayı yazmak zorunda kalmamak mı istiyorsunuz?

Bunu yapmanın iki yolunu düşünebilirim:

  1. Derleme hizmetiniz etkileşimli olarak başlatılıyorsa: Derleme hizmetini başlatmadan önce, ssh-agentyeterince uzun bir zaman aşımı ( -tseçenek) ile başlayın . Ardından ssh-add, yapı hizmetinizi başlatmadan önce ihtiyacınız olan tüm özel anahtarları eklemek için (msysGit bunlara sahip olmalıdır) kullanın. Yine de tüm parolaları yazmanız gerekir, ancak hizmet başlatma başına yalnızca bir kez.

  2. Parolaları yazmak zorunda kalmamak istiyorsanız, /server/50775/how-do-i-change-my- adresinde açıklandığı gibi her zaman SSH anahtarlarından parolaları kaldırabilirsiniz. özel anahtar parolası , boş yeni bir parola belirleyerek. Bu, parola istemini tamamen ortadan kaldırmalıdır, ancak önceki seçenekten daha az güvenlidir.


2. seçenek için teşekkürler, buna ihtiyacım vardı.
Stanislav Verjikovskiy

1

Kodumu zorlamaya çalıştığımda aşağıdaki hatayı aldım:

$ git push origin dev

remote: Too many invalid password attempts. Try logging in through the website with your password.
fatal: unable to access 'https://naushadqamar-1@bitbucket.org/xxxx/xxxx-api.git/': The requested URL returned error: 403

Birkaç saatlik araştırmadan sonra, aşağıdaki komutu kullanmam gerektiğini fark ettim:

$ git config --global credential.helper cache

Yukarıdaki komutu yürüttükten sonra GitHub kullanıcı adımı ve parolamı girmem istendi. Doğru kimlik bilgilerini sağladıktan sonra kodumu zorlayabiliyorum.


Bu az önce "git: 'kimlik bilgisi-önbellek' bir git komutu değil" oluşturdu. Ancak "git config --global credential.helper store" işe yaradı - bu en iyisi olmayabilir, ancak tercih ettiğim SSH yerine HTTPS kullanmak zorunda kaldım ve sadece çalışmasını istiyorum.
Terry Brown

0

Doğru çözüm şudur:

  1. Windows varsayılan terminalini çalıştırın - cmd ve ana profilinizin dizinini alın

    echo %USERPROFILE%
    
  2. Yukarıdaki dizinde Git Bash'i çalıştırın .bashrcve komutla dosyayı oluşturun

    echo "" > .bashrc
    
  3. .bashrcsevdiğiniz metin editörü ile dosyayı ve yapıştırma GitHub Yardım kodu o dosyaya:

    env=~/.ssh/agent.env
    ...
    COPY WHOLE CODE FROM URL - I can't add it to Stack Overflow because it breaks layout... OMG!
    
  4. Git Bash'i yeniden başlatın ve sizden şifrenizi sorar (yalnızca ilk seferde) ve bitti. Tekrar rahatsız edici bir şifre yok.


-1

Arşiv sunucusuna bağlanacağınız kullanıcının klasörünün authorized_keysaltındaki dosyayı oluşturmanız gerekir .ssh. Örneğin, buildserviceüzerinde kullanıcı adı kullandığınızı varsayarsak şunları repo.serverçalıştırabilirsiniz:

cd ~buidservice
mkdir ./ssh
cat id_rsa.pub >> .ssh/authorized_keys

O zaman aşağıdakileri kontrol etmelisiniz:

  1. İlgili id_rsaözel anahtar, içinde sunulur builservice@build.server:~/.shh/id_rsa.

  2. Repo.server'ın bu parmak izi dosyada saklanır buildservice@build.server:~/.ssh/known_hosts. Tipik olarak bu, ilk sshbağlanma girişiminden sonra yapılır repo.server.


Söylemeyi unuttum. Windows altında ana dizininiz muhtemelen C: \ Users \ Kullanıcı Adı
beduin

5
Mmm .. Git bash her şeye sahip, sorunun başlığını daha dikkatli okuyun. Ayrıca sorudan, anahtar çiftinin zaten oluşturulmuş olduğunu varsaydım (çünkü repo sunucusunun id_rsa.pub'u hatırlaması için nasıl zorlanacağı soruldu.) Biçimlendirme için üzgünüm.
beduin

1
Tamam, daha önce 'git bash'ı hiç duymadım. Bunun için üzgünüm
sehe

Bunun msysgit kullandığını varsayıyorum. Etiketi ekliyorum.
Adam Dymitruk

3
Uyarı! Kullanımı cat id_rsa.pub > .ssh/authorized_keys, mevcut yetkili anahtarların üzerine yazacaktır. Kullanım >>yerine üzerine yazma ait ekleyin.
David Pärsson
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.