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.