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?


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


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


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

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


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
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.