Git ciągle pyta mnie o moje hasło klucza SSH


537

Utworzyłem klucze zgodnie z instrukcją github, zarejestrowałem je w github i spróbowałem jawnie użyć ssh-agent - jednak git nadal prosi mnie o moje hasło za każdym razem, gdy próbuję wykonać pull lub push.

Co może być przyczyną?


Odpowiedzi:


1038

Po uruchomieniu agenta SSH z:

eval $(ssh-agent)
  1. Musisz dodać do niego swój klucz prywatny:

    ssh-add
    

    Spowoduje to podanie hasła tylko raz, a następnie powinieneś mieć możliwość wypychania, pod warunkiem, że przesłałeś klucz publiczny do Github.

  2. Aby trwale zapisać klucz w systemie macOS:

    ssh-add -K  
    

    Spowoduje to utrwalenie go po zamknięciu i ponownym otwarciu poprzez zapisanie go w pęku kluczy użytkownika.


16
wyloguj się z serwera, ssh z powrotem, uruchom git pull, ponownie poproś mnie o hasło.
cyber8200

35
ssh-add -Kzachowa go po zamknięciu i ponownym otwarciu, przechowując go w pęku kluczy użytkownika.
Kirk

72
@Kirk ssh-add -Kpodaje: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
Mimo to wciąż pojawia się monit o hasło.
IgorGanapolsky

21
-Kjest specyficzny dla jabłek. Zobacz help.github.com/articles/…
bkdir

238

Zdarzyło mi się to po ponownym uruchomieniu od aktualizacji z OS X El Capitan (10.11) do macOS Sierra (10.12). ssh-addRozwiązanie pracował tymczasowo, ale nie utrzymują się na inny restarcie.

Stałym rozwiązaniem była edycja (lub tworzenie) ~/.ssh/configi włączenie UseKeychainopcji.

Host *
    UseKeychain yes

Powiązane: macOS ciągle pyta o moje hasło ssh od czasu aktualizacji do Sierra


1
działało dla mnie dzięki ... zrobiłem ... ssh-add -K /Users/***/.ssh/git/id_rsaale nadal nie działało po ponownym uruchomieniu terminala ... dziękuję.
nawlbergs,

2
Chcesz, dlaczego tak się stało? Przeczytaj notatkę techniczną na temat zmian w OpenSSH developer.apple.com/library/content/technotes/tn2449/…
samwize,

62

Jeśli próbowałeś ssh-addi nadal pojawia się monit o podanie hasła, spróbuj użyć ssh-add -K. To doda Twoje hasło do pęku kluczy.

Aktualizacja: jeśli używasz macOS Sierra, prawdopodobnie musisz zrobić kolejny krok, ponieważ powyższe może już nie działać. Dodaj następujące elementy do ~/.ssh/config:

Host *
  UseKeychain yes

2
Nadal monituje mnie o hasło.
IgorGanapolsky

@IgorGanapolsky Czy używasz macOS Sierra? Jeśli tak, sprawdź, co właśnie dodałem do odpowiedzi. Mam nadzieję że to pomogło.
Darryl Young,

2
Tak, jestem na Sierra. Jednak oto linia, która zadziałała, działała również dla mnie: AddKeysToAgent tak
IgorGanapolsky

1
Działa to również z BitBucket Cloud. Miałem problemy z GitKraken i to rozwiązało moje problemy.
Malachi

54

Spróbowałbym następujących rzeczy:

  1. Uruchom GitBash
  2. Edytuj swój ~/.bashrcplik
  3. Dodaj następujące wiersze do pliku

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. Zapisz i zamknij plik
  2. Zamknij GitBash
  3. Ponownie otwórz GitBash
  4. Wpisz swoje hasło

4
Dla przyszłego odniesienia, to również działa z zsh. Po prostu dodaj to do.zshrc
Arda,

2
Wydaje mi się, że zakłada się, że plik klucza jest nazywany id_rsa. Jeśli masz niestandardową nazwę, powinieneś użyć np. /usr/bin/ssh-add ~/.ssh/custom_filename
Juha Untinen,

2
Czy możesz wyjaśnić, co się stało z tym skryptem?
LeeR

2
@Lee uruchamia ssh-agent, jeśli jeszcze nie działa, co gwarantuje, że nie będziesz pytał o hasło ssh przy każdym wypychaniu (mniej więcej).
Roland

To po prostu uruchamia ssh-agent i dodaje klucz przy każdym logowaniu. Nadal musisz podać hasło przy każdym logowaniu. Na przykład, jeśli masz skrypty ssh-shing i wykonujące polecenia GIT, niestety nie jest to w ogóle przydatne.
Trainoasis



6

Miałem podobny problem, ale inne odpowiedzi nie rozwiązały mojego problemu. Pomyślałem, że pójdę naprzód i opublikuję to na wypadek, gdyby ktoś inny miał taką nieprzyzwoitą konfigurację jak ja.

Okazuje się, że miałem wiele kluczy, a Git najpierw używał niewłaściwego. Poprosiłoby mnie o podanie hasła i wpisałbym je, a następnie Git użyłby innego klucza, który działałby (że nie musiałem wpisywać hasła).

Właśnie usunąłem klucz, którego używał, aby poprosić mnie o hasło, a teraz działa!


5

Wygląda na to, że masz problemy z samym agentem SSH. Spróbuję to rozwiązać.

1) Czy zrobiłeś ssh-add, aby dodać swój klucz do SSH?

2) Czy zamykasz okno terminala między użytkami, ponieważ jeśli zamkniesz okno, będziesz musiał ponownie wprowadzić hasło po ponownym otwarciu.


2
Byłoby miło dodać informacje o tym, jak rozwiązać pierwszy problem Jeff Welling.
ranu

5

Jeśli powyższe rozwiązania nie działają dla mnie, jedną rzeczą do sprawdzenia jest to, czy faktycznie masz klucz publiczny (zwykle id_rsa.pub). Nie jest to niezwykłe, ale to było dla mnie przyczyną.

Aby utworzyć swój klucz publiczny z klucza prywatnego:

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

1

Próbuję różnych rozwiązań, ale nic nie pomaga. Ale te kroki ( Moje środowisko GitBash SSH zawsze pyta o moje hasło, co mogę zrobić? ) Ze szwów Bitbucket.com działa dobrze:

Chodzi o to:

  1. tworzysz ~/.bashrcplik

  2. dodaj skrypt śledzenia:

    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. uruchom ponownie Bash


1

Innym możliwym rozwiązaniem, o którym nie wspomniano powyżej, jest sprawdzenie pilota za pomocą następującego polecenia:

git remote -v

Jeśli pilot nie zaczyna się od git, ale zaczyna się od https, możesz zmienić go na git, postępując zgodnie z poniższym przykładem.

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.