Używam Mac OS X Lion i loguję zdalnych hostów przez SSH każdego dnia. Pomimo faktu, że używam pary kluczy SSH do zdalnego uwierzytelniania i nie muszę zmotoryzować frazy logowania każdego hosta, nadal bardzo denerwujące jest to, że terminal prosi o podanie hasła dostępu do mojego prywatnego klucza SSH.
Myślę, że ze względów bezpieczeństwa konieczne jest hasło dostępu do prywatnego klucza SSH. Czy istnieje sposób, który sprawia, że terminal pyta o frazę tylko raz podczas uruchamiania, a następnie zapamiętuje ją i automatycznie używa mojego klucza prywatnego w późniejszych sesjach SSH?
Istnieje skrypt o nazwie, keychain
który działa dobrze w Gentoo Linux. Ale nigdy nie wymyśliłem tego na Mac OS X Lion. Co więcej, istnieje tak wiele zastraszające terminy, takie jak ssh-agent
, ssh-add
. Po przeczytaniu różnych materiałów na temat tych zestawów narzędzi SSH i przeprowadzeniu sfrustrowanych eksperymentów stałem się bardziej zdezorientowany.
Dlatego przyszedłem do StackExchange, szukając porady na następujące pytania.
- Jakie są
ssh-agent
,ssh-add
,keychain
,Keychain Access.app
i jak współdziałają one ze sobą? - Jak mogę wprowadzić hasło dla mojego klucza prywatnego SSH raz podczas logowania i używać go swobodnie przy późniejszym tworzeniu sesji SSH?
- Errr ... Co jest nie tak
Keychain Access.app
? Nie przechowuje wyrażenia SSH tak jak wcześniej.
Wymieniam to, co tutaj zrobiłem. Mam nadzieję, że istnieją wskazówki na temat kroków, które przegapiłem.
Krok 1. Utwórz parę kluczy SSH na moim komputerze Mac.
$ ssh-keygen -t rsa -C "[email protected]"
# Set a passphrase for accessing the private key.
Krok 2. Skopiuj mój klucz publiczny SSH na zdalny host. Na przykład kopiuję klucz do localhost, Mac.
$ ssh-copy-id USER@localhost
# Enter the login password for USER at localhost, not my SSH passphrase
Krok 3. Następnie spróbuj połączyć się ze zdalnym hostem (tutaj host lokalny), poprzez uwierzytelnianie parą kluczy SSH.
$ ssh USER@locahost
Enter passphrase for key '/Users/YOUR_ACCOUNT/.ssh/id_rsa':
# Enter my SSH passphrase, not the login password.
Krok 4. Wyloguj się ze zdalnego hosta i spróbuj połączyć się z nim ponownie. Cholera, terminal znów prosi o zwrot SSH.
Często zadawane pytanie brzmi: „Czy ssh-agent działa dobrze na komputerze Mac?”. Szczerze mówiąc, nie mam pojęcia, co się dzieje z tymi rzeczami. Tutaj pokaż niektóre wyniki biegania.
$ echo $SSH_AUTH_SOCK
/tmp/launch-M48niA/Listeners
$ echo $SSH_AUTH_PID
(EMPTY)
$ ssh-add -l
Could not open a connection to your authentication agent.
$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-Z54zXukQiP/agent.26769; export SSH_AUTH_SOCK;
SSH_AGENT_PID=26770; export SSH_AGENT_PID;
echo Agent pid 26770;
$ ssh-add -l
Could not open a connection to your authentication agent.
$ echo $SSH_AUTH_SOCK
/tmp/launch-M48niA/Listeners
$ echo $SSH_AUTH_PID
(STILL EMPTY)
$ ssh-agent # Oh no, anther ssh-agent with different PID
SSH_AUTH_SOCK=/tmp/ssh-cx0B4FUX8B/agent.26898; export SSH_AUTH_SOCK;
SSH_AGENT_PID=26899; export SSH_AGENT_PID;
echo Agent pid 26899;
$ ps -e | grep -i ssh
26769 ?? 0:00.03 ssh-agent
26899 ?? 0:00.02 ssh-agent
Wszelkie opinie są mile widziane. Dzięki!
Odpowiedzi:
ssh-agent
to kawałek, który chcesz zacząć, ponieważ robi dokładnie to, o co pytasz. Agent działa jako demon, a kiedy „dodasz” do niego klucz prywatny, zapamiętuje ten klucz i automatycznie przekazuje go do pilotasshd
podczas pierwszego połączenia. (ssh-add
to po prostu polecenie uruchamiane w celu ręcznego dodania klucza prywatnegossh-agent
).W systemie OS X od Leoparda nie powinno się nigdy uruchamiać
ssh-agent
anissh-add
ręcznie. Powinno to „po prostu się zdarzyć”, gdy próbujesz połączyć się z serwerem. Raz na klucz, wyświetli się okno dialogowe hasła interfejsu użytkownika, które (między innymi) pozwoli ci automatycznie dodać klucz do,ssh-agent
więc nigdy więcej nie pojawi się monit.Jest to obsługiwane przez
launchd
konfigurację, która nasłuchuje połączeń w$SSH_AUTH_SOCK
gnieździe i automatycznie uruchamia się,ssh-agent
gdy najpierw będzie to konieczne; po tymssh-agent
monituje o podanie poświadczeń tylko wtedy, gdy trzeba otworzyć nowy klucz.Jeśli to nie działa, upewnij się, że masz prawidłowy
launchd
plik konfiguracyjny:Jeśli z jakiegoś powodu to nadal nie działa, oto „stary” sposób ręcznego działania:
http://timesinker.blogspot.com/2007/08/getting-ssh-agent-going-on-mac-osx.html
Jest też ta aplikacja, z której przestałem korzystać od czasu pojawienia się Leoparda, ale zasadniczo zrobiłem to samo w poprzednich wersjach Mac OS X:
http://www.sshkeychain.org/
źródło
~/tmp
wskazujące/tmp/
i uruchamiam zadanie crona do czyszczenia~/tmp
co 2 godziny, co również usunęło gniazdo ssh-agent. O rany, nienawidzę siebie.W trakcie procesu rozwiązywania „problemu”, mam googled kilka podobnych tematów i zanotować kilka uwag o tym, jak
ssh-agent
,ssh-add
,keychain
,KeyChain Access.app
pracy. W końcu okazuje się, że ten problem wcale nie jest problemem, zamiast tego chodzi o mnie, a tak zwane ssh-login-without-ask-passsphrase-za każdym razem działa doskonale na komputerze Mac po wyjęciu z pudełka.Jednak ten proces daje mi pewne doświadczenia. Zapisuję tutaj swoje notatki w nadziei, że pomogą komuś pomylić te warunki.
Dwa hasła:
passphrase
odnosi się do wymaganej frazy podczas uzyskiwania dostępu do klucza prywatnego SSH.password
odnosi się do wymaganej frazy, aby zalogować się na komputerze Mac.Teraz mogę dowiedzieć się, co zrobić te zestawy narzędzi, to znaczy
ssh-agent
,ssh-add
,keychain
,Keychain Access.app
na Mac.ssh-agent
jest kluczową usługą umożliwiającą używanie klucza prywatnego SSH bez wpisywania hasła SSH.ssh-agent
działa w ten sposób. Najpierw przechowuje lub buforuje klucz prywatny SSH w pamięci głównej. Następnie, w późniejszym czasie tej sesji, gdy prywatny klucz SSH SSH jest potrzebny do zdalnego uwierzytelnienia,ssh-agent
znajdzie Twój klucz prywatny w pamięci głównej i przekaże go zdalnemu procesowi. Jedyną szansą na wpisanie hasła SSH jest to, żessh-agent
początkowo dodawany jest klucz prywatny .ssh-add
jest częściąssh-agent
kolekcji, która pomaga zarządzać kluczami SSH wssh-agent
. Używamyssh-add
polecenia, aby wyświetlić, dodać, usunąć klucze prywatne w breloku ssh-agent. Następniessh-add
komunikuje się zssh-agent
serwisem w celu wykonania zadań.keychain
jest skryptem do znalezieniassh-agent
usługi (jeśli nie istnieje, uruchom nowy) i wywołania,ssh-add
aby dodać klucze prywatne SSH.keychain
ma prosty i bezpośredni pomysł, działający dobrze w systemie Linux, gdzie ssh-agent zwykle nie uruchamia się automatycznie.Keychain Access.app
wydaje się być najbardziej skomplikowanym elementem. Jest to uniwersalna usługa przechowywania tokenów w systemie Mac OS X. Przechowuje różne tokeny, takie jak hasła, certyfikaty i in., I służy jako agent tokenów dla aplikacji, które żądają tokenów. W naszym przypadku klucza prywatnego SSH najpierw uwzględnia żądanie dostępu do klucza prywatnego SSH i wyświetla okno z prośbą o zapisanie hasła klucza SSH, które jest rodzajem tokena, wKeychain Access.app
breloku. Następnym razem, gdy chcesz użyć kluczy prywatnych do uwierzytelnienia, ponownieKeychain Access.app
pojawi się okno z pytaniem, czy przyznać uprawnienia. Po otrzymaniu dużego „tak”keychain Access.app
dodaje swój prywatny klucz dossh-agent
pamięci.Dwie rzeczy zasługują na uwagę:
ssh-agent
usługę podczas uruchamiania, nasłuchując na gnieździe poniżej/tmp
.Keychain Access.app
przechowuje twoje hasło SSH, dzięki czemu może dodać Twój klucz prywatnyssh-agent
bez przerywania ci. Tak, nie musisz wpisywać frazy SSH, ale musisz wpisać hasło logowania do konta Mac, aby nadać uprawnienia podczas tworzenia tego wpisu po raz pierwszy.Podsumowując, SSH-login-bez-pytania-hasło powinno działać na Mac OS X od razu po wyjęciu z pudełka.
źródło
W przypadku, gdy inne rozwiązania tutaj nie działają dla ludzi, następujące działały dla mnie.
Dla każdego klucza prywatnego w katalogu ~ / .ssh upewnij się, że odpowiedni klucz publiczny jest również obecny. Upewnij się, że klucz publiczny jest nazwany dokładnie tak samo jak klucz prywatny, ale z
.pub
na końcu. Jeśli masz już odpowiedni klucz publiczny, spróbuj go ponownie wygenerować.Jeśli chcesz ponownie utworzyć klucze publiczne, możesz to zrobić z łatwością: -
zastępując
my_key
czymkolwiek, jak nazywa się twój klucz.Następnie MacOS zapamiętuje hasło klucza w pęku kluczy, tak jak powinno.
Uwaga - wpisanie hasła i zapisanie go pęku kluczy jest teraz jednorazową czynnością (nie raz na sesję logowania zgodnie z życzeniem OP), ale przy założeniu, że logowanie do Maca jest chronione hasłem, wówczas twoje hasło jest chronione tym hasłem logowania. Ponadto to rozwiązanie nie ma dla mnie sensu ... klucz publiczny nie powinien być wymagany oprócz klucza prywatnego, ale z jakiegoś powodu MacOSX tego wymaga.
(pierwotnie od odpowiedzi na podobne pytanie na Apple Stack Exchange)
źródło
Jedyną rzeczą, o której rzadko wspominam podczas konfigurowania
~/.ssh
folderu, jest ograniczenie uprawnień do katalogu.Aby włączyć ssh, aby uniknąć pytania o hasło, zawsze musiałem ustawić uprawnienia do katalogu domowego użytkownika
700
, a także~/.ssh
uprawnienia do folderu700
.W przeciwnym razie nadal prosi mnie o hasło, nawet jeśli wszystkie klucze zostały wygenerowane i poprawnie skopiowane. W dziennikach uwierzytelniania generowany jest komunikat o błędzie, ale w większości przypadków jest to niewidoczne dla użytkownika końcowego.
źródło
Inną rzeczą, którą mogłeś wypróbować, byłoby zastąpienie
ssh-copy-id
czegoś takiegok="$(cat ~/.ssh/id_rsa.pub)"; ssh [email protected] "umask 0077; mkdir -p ~/.ssh; echo "$k" >> ~/.ssh/authorized_keys2"
.źródło
Ta odpowiedź nieco nie stanowi rozwiązania tego pytania; jednak jest bardzo blisko (skończyłem na tym pytaniu, szukając rozwiązania mojego problemu).
Robię też dużo SSH do zdalnych serwerów na moim komputerze Mac, jak opisano w tym pytaniu, jednak
Keychain Access.app
aplikacja zapisała hasło i nie muszę go wpisywać za każdym razem, gdy potrzebuję klucza do uwierzytelnienia na serwerze SSH.Jednak włączyłem serwer SSH na moim komputerze Mac, aby móc się z nim połączyć zdalnie. Gdy zdalnie zalogowałem się na moim Macu, hasło zawsze było pytane, kiedy chciałem SSH na innym hoście.
Znalazłem rozwiązanie, które pozwala zapisać hasło dla bieżącej sesji. Myślałem, że to może być przydatne dla kogoś, stąd ten post / odpowiedź.
źródło
Zastanawiam się nad tym problemem. ssh działa na każdej maszynie w naszym dziale Z WYJĄTKIEM dla jabłek (MacBooki i iMacs nie ma znaczenia). W końcu zmęczyło mnie pisanie haseł i postanowiłem to debugować.
Poszedłem do mojego iMaca i wyłączyłem sshd w panelu preferencji udostępniania. Następnie suu do rootowania i wpisałem „/ usr / sbin / sshd -d”, aby uruchomić sshd w trybie debugowania. Następnie spróbowałem ssh na tym komputerze i natychmiast spróbowałem użyć protokołu 2, który wydaje się, że wszystko działa dobrze, ale sshd natychmiast poinformował, że nie może znaleźć „uprawnionych_kluczy”. Miałem plik autoryzowanego_kluczy2, który wszystkie moje Linux-y, solaris, ty-name-it unix akceptują dobrze. Po prostu skopiowałem klucze autoryzowane2 do kluczy autoryzowanych i BOOM. Działa idealnie teraz.
Dlaczego * klucze zamiast * klucze2 są nieznane. Szczególnie, gdy os x jest całkiem zadowolony ze znanego hosta2.
W każdym razie teraz wszystkie nasze skrzynki z jabłkami mogą być zalogowane lub wykonane na nich zdalne polecenia bez tego przeklętego hasła: monit ...
źródło