Jak uniknąć pytania o hasło za każdym razem, gdy wypycham Bitbucket


217

Skonfigurowałem moje rzeczy ssh za pomocą tego przewodnika i działało to dobrze (mogłem biegać hg pushbez pytania o hasło). Co mogło się zdarzyć od tego czasu do teraz, biorąc pod uwagę, że nadal korzystam z tego samego katalogu domowego.

$ cat .hg/hgrc 
[paths]
default = ssh://hg@bitbucket.org/tshepang/bloog

$ hg push
Enter passphrase for key '/home/wena/.ssh/id_rsa': 
pushing to ssh://hg@bitbucket.org/tshepang/bloog
searching for changes
...

Odpowiedzi:


337

Musisz użyć agenta ssh. Krótka odpowiedź: spróbuj

$ ssh-add

przed pchaniem. Na żądanie podaj hasło.

Jeśli nie korzystasz jeszcze z agenta ssh, pojawi się następujący komunikat:

Could not open a connection to your authentication agent.

W takiej sytuacji możesz go uruchomić i odpowiednio skonfigurować środowisko

eval $(ssh-agent)

Następnie powtórz ssh-addpolecenie.

Warto przyjrzeć się stronie man agenta ssh .


2
Jaki jest sens evalpisania po prostu ssh-agent?
James McMahon,

4
Wyświetla niektóre polecenia, które pozwalają ci z niego korzystać, i nie wykonuje ich za ciebie; evalrobi kalkulację.
tshepang

Nie ma związku z pierwotnym pytaniem, ale jeśli nadal masz te problemy w GitHub, Bitbucket itp., Upewnij się, że używasz adresu URL git / ssh, a nie http, który będzie wymagał podania nazwy użytkownika i hasła.
Czechnology

A jeśli nie masz domyślnego klucza lub chcesz dodać wielokrotności,ssh-add /path/to/key
hoosierEE

46

Sposób, aby rozwiązać ten problem jest z ssh-agenti ssh-add:

$ exec ssh-agent bash
$ ssh-add
Enter passphrase for ~/.ssh/id_rsa: 

Następnie hasło zostanie zapisane dla bieżącej sesji. i nie będę więcej pytany


7
Większość ludzi w ogóle nie chce być obrzucana błędami.
connexo

26

Używam pęku kluczy do zarządzania kluczami ssh. Jest także dostępny w Debianie i prawdopodobnie w Ubuntu

apt-get install keychain

Oto strona pakietu pęku kluczy Debiana . Jak widać, projekt nie jest zbyt aktywny, ale działa dla mnie. Skomentowałem też trochę na ten temat w innej odpowiedzi tutaj


2
//, To zadziałało dla mnie. Jest o wiele lepszy niż ssh-agent, ponieważ nie muszę wprowadzać hasła klucza ssh za każdym razem, gdy otwieram terminal .
Nathan Basanese,

@NathanBasane, czy mówisz, że używając pęku kluczy nie musisz wprowadzać hasła klucza SSH za każdym razem, gdy otwierasz terminal? Jak to skonfigurować? ponieważ pęku kluczy ciągle pyta o hasło za każdym razem, gdy otwieram terminal, tylko za pierwszym razem, gdy otwieram go po uruchomieniu, ale nadal. Nie chcę wprowadzać hasła za każdym razem.
m4l490n

@ m4l490n Nie, jeśli używasz pęku kluczy, nie musisz wprowadzać hasła klucza ssh za każdym razem, gdy otwierasz terminal. Ale musisz go wprowadzić raz po uruchomieniu. Hasło nie jest zapisywane na dysku - byłoby to niebezpieczne.
Faheem Mitha

Dla mnie pyta za każdym razem, gdy się loguję (mam repozytorium git + klucze ssh na zdalnym serwerze i za każdym razem, gdy wykonuję „git pull”, muszę wpisać hasło)
Martin Thoma,

@MartinThoma To wygląda źle. Sprawdź, czy poprawnie skonfigurowałeś .ssh. W szczególności, czy twoja powłoka jest poprawnie skonfigurowana? Jeśli nadal nie działa i nie możesz tego rozgryźć, możesz zadać pytanie.
Faheem Mitha

13

Utwórz (lub edytuj, jeśli istnieje) następujący plik ~ / .ssh / config:

Host *
    UseKeychain yes
    AddKeysToAgent yes
    IdentityFile ~/.ssh/id_rsa

Ale używam innej pary kluczy do każdej usługi ...
connexo

@connexo możesz zastąpić gwiazdkę wieloznaczną indywidualną nazwą hosta, a „id_rsa” odpowiednim kluczem prywatnym
ness-EE

1
Musiałem dodać IgnoreUnknown AddKeysToAgent,UseKeychaintuż powyżej UseKeychain yes.
consideRatio

1
Pojawia się błąd: „Zła opcja konfiguracji: usekeychain” w wierszu „UseKeychain tak”.
m4l490n

@ m4l490n: wygląda na to, że UseKeychainopcja została dodana w OpenSSH 7.1p2 (28.02.2016). Może masz poprzednią wersję. openssh.com/txt/release-7.2
chus

6

Dla wygody optymalną metodą jest połączenie odpowiedzi jmtd i Faheem .

Używanie ssh-agentsamego oznacza, że ssh-agentdla każdego otwieranego terminala należy utworzyć nową instancję . keychainpo zainicjowaniu poprosi o hasło dla kluczy prywatnych i zapisze je. W ten sposób Twój klucz prywatny jest chroniony hasłem, ale nie będziesz musiał wprowadzać hasła w kółko.

Arch wiki zaleca inicjowanie pęk kluczy z /etc/profile.d/lub swój profil powłoki, takie jak .bash_profilealbo .bashrc. Ma to tę wadę, że inicjalizuje pęku kluczy, jak tylko otworzysz terminal.

Bardziej elastycznym podejściem jest połączenie keychainz określoną tmuxsesją. Tak więc w .bash_profile:

tsess=$(tmux ls 2>&1)

if [[ "${tsess%%:*}" = "secured" ]] && 
   [[ -f $HOME/.keychain/$HOSTNAME-sh ]]; then
    # start keychain
    /usr/bin/keychain -Q -q --nogui ~/.ssh/id_rsa
    . $HOME/.keychain/$HOSTNAME-sh
fi

... a następnie jest to tylko przypadek rozpoczęcia zabezpieczonej tmuxsesji, gdy jest to wymagane (uruchamiane z naciśnięcia klawisza):

#!/bin/bash
PID=$(pgrep tmux)
new="tmux -f $HOME/.tmux/conf new -s secured"
old="tmux attach -t secured -d"

if [[ -z "$SSH_AUTH_SOCK" ]]; then
    eval `ssh-agent`
    trap "kill $SSH_AGENT_PID" 0
fi

if [[ -z "$PID" ]]; then
    urxvtc -title "SSH" -e sh -c "${new}"
else
    urxvtc -title "SSH" -e sh -c "${old}"
fi

ssh-add

Teraz Twój pęku kluczy zostanie zainicjowany tylko raz, gdy rozpoczniesz tę konkretną tmuxsesję. Tak długo, jak ta sesja będzie się powtarzać, będziesz mieć dostęp do tych sshkluczy i wypychaj swoje zdalne repozytoria.


Jak sprawiłbym, żeby działało na zdalnym komputerze? Zmodyfikowałem drugi skrypt, aby sprawdzić, czy $ SSH_CLIENT i jeśli istnieje, nie wykonuj urxvtc, po prostu tmux. To działa, ale problemem jest część .bash_profile. Kiedy po raz pierwszy loguję się do skrzynki, pojawia się komunikat „serwer nie znaleziony: odmowa połączenia”, co jest wynikiem działania „tmux ls”. Następnie, kiedy wykonuję drugi skrypt, tmux albo rozpoczyna nową sesję, albo dołącza do istniejącej, ale nie pojawia się monit o pęku kluczy. Następnie, kiedy wychodzę z sesji, pojawia się monit pęku kluczy.
jonyamo

Zaktualizowałem odpowiedź, aby wyciszyć wyjście tmux, jeśli nie ma sesji.
jasonwryan

Dziękuję, ale to nadal nie rozwiązało problemu z pękiem kluczy. tmux tworzy nową sesję, ale przechodzi bezpośrednio do dowolnego pustego monitu. Dopiero kiedy wychodzę z sesji tmux, pojawia się monit pęku kluczy z prośbą o moje hasło.
jonyamo

Chyba powinienem przestać mówić pęku kluczy, ponieważ pęku kluczy jest wykonywany tylko w .bash_profile. Problem polega na wykonaniu ssh-add. Chociaż jeśli uruchomię ssh-add ręcznie po utworzeniu sesji tmux, to działa.
jonyamo

1
Pomiń drugi skrypt i po prostu rozpocznij bezpieczną sesję tmux od .profile- w ten sposób otrzymasz monit o klucze, jak tylko się zalogujesz.
jasonwryan

0

Możesz użyć sshpass:

$ sudo apt-get install sshpass
$ sshpass -p 'password' ssh username@server

Musisz tylko dodać sshpass -p yourpassphraseprzed dołączeniem zwykłego sshpolecenia.


2
To brzmi jak naprawdę głupi pomysł. Czy to nie sprawi, że twoje hasło pojawi się jako zwykły tekst w historii twojej powłoki?
connexo

Dokładnie, ale czy nie powinieneś również chronić swojej sesji hasłem?
belka

1
Nawet jeśli tak, to jak często kolega siedzi obok ciebie i pomaga / uczy się od ciebie?
connexo
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.