Jak sprawić, aby git nie pytał o hasło do klucza SSH w systemie Windows?

36

Używam git bash i konfiguruję klucz ssh za pomocą ssh-keygen i za każdym razem, gdy robię coś z git repo, pytaj mnie o hasło /c/Users/jankiewj/.ssh/id_rsa. Czy istnieje sposób na wyłączenie tego hasła?

jcubic
źródło
Ta strona na serverfault może pomóc serverfault.com/questions/194567/…
@Radoo to nie pomogło.
jcubic

Odpowiedzi:

52

Możesz uruchomić to w git bash:

eval `ssh-agent -s`
ssh-add ~/.ssh/*_rsa

poprosi o hasło w drugim poleceniu i to wszystko. Każda dodatkowa czynność, którą musisz wykonać (która kiedyś wymagała hasła), nie poprosi o hasło (patrz przykład na zrzucie ekranu poniżej):

dodanie frazy hasła w git bash w systemie Windows

jcubic
źródło
7
Muszę go wprowadzić ponownie, jak tylko zamknę git bash ... czy istnieje trwałe rozwiązanie?
Czarny
@Black to na sesję bash, włożyłem to, .bashrcwięc za każdym razem, gdy otwieram git bash, pojawia się monit i dla tej sesji jestem gotowy.
jcubic
Co dokładnie umieścisz w .bashrc? A gdzie jest .bashrc?
Black
Edycja: nieważne, musisz utworzyć plik yourselv, ~/.bashrca następnie wprowadzić do niego wiersze ze swojego postu i zapisać, to wszystko :) thx!
Czarny,
Zamiast używać powyższych wierszy, szczególnie w .bashrc, użyłbym skryptu i umieściłem go w .bash_profilelub .profile. Oto fragment głównej części mojej .bash_profile, powinien rozwiązać ten problem dla każdego, kto wciąż szuka odpowiedzi; jest podobny do odpowiedzi poniżej. Na początku skryptu ładuję mój .bashrc, który, jeśli nie ma zastosowania, po prostu go pomiń. Uwaga: musisz zmienić odniesienia do id_rsadowolnej nazwy prywatnego klucza SSH i być może ścieżki.
Rockin4Life33
7

Nieco lepszym i trwałym rozwiązaniem jest automatyczne uruchomienie ssh-agent podczas otwierania git bash w Windows. Możesz skopiować / wkleić poniżej w .profile lub .bashrc. Wolę umieścić go w pliku .profile

env=~/.ssh/agent.env

agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }

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

agent_load_env

# agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2= agent not running
agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)

if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
    agent_start
    ssh-add
elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
    ssh-add
fi

unset env

To rozwiązanie zostało zaczerpnięte z tego artykułu pomocy github

velval
źródło
Wstawiłem mój prosty kod .bashrc, czym różni się twoje rozwiązanie? W systemie Windows bash każda powłoka jest niezależna, więc agent nigdy nie działa po uruchomieniu powłoki.
jcubic
Rozwiązanie działa dobrze, umieszczając kod w .bashrc. Monitowanie hasła ssh tylko za pierwszym razem. Bezpiecznie moje życie. Dziękuję Ci.
Ben Asmussen
dzięki, to bardzo uratowało mi życie.
gumuruh
To powinna być naprawdę zaakceptowana odpowiedź, ponieważ przedstawia rozwiązanie, które jest trwałe i lepiej spełnia to, o co, moim zdaniem, wymagało PO.
Richard D
Co mam zrobić, jeśli podczas uruchamiania przypadkowo wpisałem nieprawidłowe hasło? Edycja: Na podstawie superuser.com/a/271673/647110 możesz ssh-add -Dusunąć wszystkie klucze.
Nils Guillermin
1

Nie jestem pewien, czy chcę go polecić, ale kiedy utworzysz klucz i poprosisz o ustawienie hasła, po prostu naciśnij Enter i pomiń hasło.

Spójrz na ten link, aby dowiedzieć się, jak używać ssh-keygen: https://help.github.com/articles/working-with-ssh-key-passphrases/

Być może ssh-agentmoże ci jakoś pomóc. Ale nie jestem pewien bez znajomości twojego obecnego systemu.

David Bern
źródło
zdecydowanie nie dobra odpowiedź
Kennet Celeste
-1

Wpisz to polecenie git w swojej lokalizacji repozytoriów „ ssh-keygen -p ”. Następnie pojawi się monit o podanie lokalizacji pliku kluczy , starego hasła i nowego hasła (które można pozostawić puste, aby nie było hasła). Nie wpisuj niczego w nowym haśle, spowoduje to usunięcie hasła

Bharti
źródło
Pozostawienie pustego hasła jest niepewne i wielu deweloperów korporacyjnych nie będzie mogło mieć pustego hasła z powodu ograniczeń. To kiepskie obejście, a nie rozwiązanie problemu PO.
cbaldan