Git bana sürekli ssh anahtar parolamı soruyor


538

Github öğreticisinde belirtildiği gibi anahtarlar oluşturdum, bunları github'a kaydettim ve ssh-agent'ı açıkça kullanmayı denedim - ancak git her çekiş veya itme yapmaya çalıştığımda parolamı sormaya devam ediyor.

Sebep ne olabilir?


Yanıtlar:


1039

SSH aracısını aşağıdakilerle başlattıktan sonra:

eval $(ssh-agent)
  1. Özel anahtarınızı buna eklemelisiniz:

    ssh-add
    

    Bu, parolanızı yalnızca bir kez soracaktır ve genel anahtarı Github'a yüklemeniz koşuluyla, itmenize izin verilmelidir.

  2. Anahtarı macOS'ta kalıcı olarak kaydetmek için:

    ssh-add -K  
    

    Bu, kapattıktan ve kullanıcının anahtarlığında saklayarak yeniden açtıktan sonra da devam edecektir.


16
sunucudan çıkış, ssh tekrar giriş, çalıştırma git pull, tekrar şifre sor.
cyber8200

35
ssh-add -K kapattıktan ve kullanıcının anahtarlığında saklayarak yeniden açtıktan sonra da devam edecektir.
Kirk

72
@Kirk ssh-add -Kaşağıdakileri verir:unknown option -- K usage: ssh-add [options] [file ...] Options: -l List fingerprints of all identities. -L List public key parameters of all identities. -k Load only keys and not certificates. -c Require confirmation to sign using identities -t life Set lifetime (in seconds) when adding identities. -d Delete identity. -D Delete all identities. -x Lock agent. -X Unlock agent. -s pkcs11 Add keys from PKCS#11 provider.
Sandeep C

13
Ne olursa olsun hala bir parola istenir.
IgorGanapolsky

21
-Kelmaya özgüdür. Bkz. Help.github.com/articles/…
bkdir

238

Bu, OS X El Capitan'dan (10.11) macOS Sierra'ya (10.12) yükseltme yapıldıktan sonra yeniden başlatıldıktan sonra başıma geliyor. ssh-addÇözelti geçici olarak çalıştı ama başka bir yeniden başlatma arasında varlığını olmaz.

Kalıcı çözüm seçeneği düzenlemek (veya oluşturmak) ~/.ssh/configve etkinleştirmektir UseKeychain.

Host *
    UseKeychain yes

İlişkili: macOS, Sierra'ya güncellediğimden beri ssh parolamı sormaya devam ediyor


1
benim için çalıştı teşekkürler ... Yapmıştım ... ssh-add -K /Users/***/.ssh/git/id_rsaama terminal yeniden başlatıldıktan sonra hala çalışmıyordu ... teşekkür ederim.
nawlbergs

2
Bunun neden olmasını ister misiniz? OpenSSH değişiklikleri üzerindeki teknik notu okuyun developer.apple.com/library/content/technotes/tn2449/…
samwize

62

Denediyseniz ssh-addve yine de parolanızı girmeniz istenirse kullanmayı deneyin ssh-add -K. Bu, parolanızı anahtarlığınıza ekler.

Güncelleme: macOS Sierra kullanıyorsanız, yukarıdakilerin artık çalışmayabileceği için muhtemelen başka bir adım atmanız gerekir. Aşağıdakileri kendinize ekleyin ~/.ssh/config:

Host *
  UseKeychain yes

2
Yine de benden bir parola istiyor.
IgorGanapolsky

@IgorGanapolsky macOS Sierra mı kullanıyorsunuz? Eğer öyleyse, cevaba ne eklediğimi kontrol edin. Umarım bu yardımcı olur.
Darryl Young

2
Evet, Sierra'dayım. Ancak, işte çalışan hat benim için de çalıştı: AddKeysToAgent evet
IgorGanapolsky

1
Bu aynı zamanda BitBucket Cloud ile de çalışır. GitKraken'de sorunlar yaşıyordum ve bu durum sorunlarımı çözdü.
Malachi

54

Aşağıdakileri deneyeceğim:

  1. GitBash'i başlat
  2. Düzenleyin ~/.bashrc dosyasını
  3. Aşağıdaki satırları dosyaya ekleyin

SSH_ENV=$HOME/.ssh/environment

# start the ssh-agent
function start_agent {
    echo "Initializing new SSH agent..."
    # spawn ssh-agent
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > ${SSH_ENV}
    echo succeeded
    chmod 600 ${SSH_ENV}
    . ${SSH_ENV} > /dev/null
    /usr/bin/ssh-add
}

if [ -f "${SSH_ENV}" ]; then
     . ${SSH_ENV} > /dev/null
     ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
        start_agent;
    }
else
    start_agent;
fi
  1. Dosyayı kaydedip kapatın
  2. GitBash'i kapatın
  3. GitBash'i yeniden açın
  4. Parolanızı girin

4
İleride başvurmak için, bu ile de çalışır zsh. Sadece bunu ekle.zshrc
Arda

2
Bu, anahtar dosyanızın çağrıldığını varsayar id_rsa. Özel bir adınız varsa, örn. /usr/bin/ssh-add ~/.ssh/custom_filename
Juha Untinen

2
Bu senaryoya ne olduğunu açıklayabilir misiniz?
LeeR

2
@Zaten çalışmıyorsa ssh-ajanını başlatır, bu da her basışta (daha fazla veya daha az) ssh parolasını sormamanızı sağlayan şeydir.
Roland

Bu sadece ssh-agent'ı çalıştırır ve her girişte anahtarı ekler. Her giriş yaptığınızda yine de şifre girmeniz gerekiyor. Örneğin, ssh-ing komutlarınız varsa ve GIT komutları kullanıyorsanız, bu maalesef hiç de kullanışlı değildir.
trainoasis



6

Benzer bir sorunum vardı, ancak diğer cevaplar sorunumu çözmedi. Başkasının benim gibi berbat bir düzene sahip olması durumunda devam edeceğimi düşündüm.

Anlaşılan birden fazla anahtarım vardı ve Git önce yanlış olanı kullanıyor. Bana parolamı girmesini isterdi ve ben girerdim, o zaman Git işe yarayacak farklı bir anahtar kullanırdı (parolayı girmem gerekmiyordu).

Sadece bir parola istemek için kullandığı anahtarı sildim ve şimdi çalışıyor!


5

SSH-Agent'ın kendisiyle ilgili sorun yaşıyor olabileceğiniz anlaşılıyor. Bunu gidermeyi denerdim.

1) Anahtarınızı SSH'ye eklemek için ssh-add yaptınız mı?

2) Kullanımlar arasında terminal penceresini kapatıyor musunuz, çünkü pencereyi kapatırsanız yeniden açtığınızda şifreyi tekrar girmeniz gerekecektir.


2
İlk sorunun nasıl çözüleceği hakkında bilgi eklemek iyi olurdu Jeff Welling.
ranu

5

Yukarıdaki çözümler benim için işe yaramıyorsa, kontrol edilmesi gereken bir şey aslında ortak anahtara da sahip olmanızdır id_rsa.pub. Olmaması olağandışı, ama bu benim için sebepti.

Genel anahtarınızı özel anahtarınızdan oluşturmak için:

ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub

1

Farklı çözümler deniyorum ama hiçbir şey yardımcı değil. Ancak Bitbucket.com dikişlerinden bu adımlar ( GitBash SSH ortamım her zaman parolamı istiyor, ne yapabilirim? ) İyi çalışıyor:

Fikir:

  1. ~/.bashrcdosya oluştur

  2. takip komut dosyası ekle:

    SSH_ENV=$HOME/.ssh/environment
    
    # start the ssh-agent
        function start_agent {
        echo "Initializing new SSH agent..."
        # spawn ssh-agent
        /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
        echo succeeded
        chmod 600 "${SSH_ENV}"
        . "${SSH_ENV}" > /dev/null
        /usr/bin/ssh-add
    }
    
    if [ -f "${SSH_ENV}" ]; then
         . "${SSH_ENV}" > /dev/null
         ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
            start_agent;
        }
    else
        start_agent;
    fi
    
  3. Bash'i yeniden çalıştır


1

Yukarıda belirtilmeyen bir diğer olası çözüm, uzaktan kumandanızı aşağıdaki komutla kontrol etmektir:

git remote -v

Uzaktan kumanda git ile başlamıyor ancak https ile başlıyorsa, aşağıdaki örneği izleyerek onu git olarak değiştirmek isteyebilirsiniz.

git remote -v // origin is https://github.com/user/myrepo.git
git remote set-url origin git@github.com:user/myrepo.git
git remote -v // check if remote is changed
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.