Jak mogę uzyskać dostęp do pęku kluczy zdalnie z wiersza poleceń?

23

W moim pęku kluczy przechowuję różne hasła (np. Do zdalnych serwerów e-mail). Po zalogowaniu się z wiersza poleceń mogę je pobrać za pomocą:

security unlock-keychain ~/Library/Keychains/login.keychain
<enter password>
security find-internet-password -s smtp.gmail.com -a foo@gmail.com
<dumps keychain attributes, not including password>
security find-internet-password -s smtp.gmail.com -a foo@gmail.com -g
<dumps keychain attributes, including password>

Jednak rezultatów nie można osiągnąć, uruchamiając zdalnie (ssh'ing do skrzynki z innego miejsca):

security unlock-keychain ~/Library/Keychains/login.keychain
<enter password>
security find-internet-password -s smtp.gmail.com -a foo@gmail.com
<dumps keychain attributes, not including password>
security find-internet-password -s smtp.gmail.com -a foo@gmail.com -g
<nothing printed, to stdout or stderr>

Ponadto zwracana wartość końcowego polecenia (przy użyciu -g) wynosi 36.

Zrzuciłem dane wyjściowe setz lokalnego logowania i porównałem je ze zdalnym, a brakujące zmienne środowiskowe to:

Apple_PubSub_Socket_Render
GPG_AGENT_INFO
SECURITYSESSIONID
TERM_PROGRAM
TERM_PROGRAM_VERSION
TERM_SESSION_ID
XPC_FLAGS
XPC_SERVICE_NAME

czego mi brakuje? Mam SSH_AUTH_SOCKustawioną prawidłową wartość (zwróconą z ssh-agent).

Eter
źródło

Odpowiedzi:

11

Powtarzając to w celu zbadania, zauważam, że mam skonfigurowany mój pęku kluczy, aby „Potwierdź przed zezwoleniem na dostęp”. Kiedy więc wykonuję find-internet-passwordlokalnie -gflagę, pojawia się okno dialogowe z informacją, że bezpieczeństwo chce użyć twoich poufnych informacji przechowywanych w „smtp. gmail.com ”w pęku kluczy. Jeśli kliknę „Pozwól”, to zadziała, jeśli kliknę „Odmów”, nie powiedzie się podobnie jak w sshprzypadku, z kodem powrotu 51. Okno dialogowe potwierdzenia dostępu

Gdy próbuję zdalnie wykonać polecenie ssh, -gnatychmiast powoduje to awarię, której status 36zgłaszasz.

Podejrzewam, że dzieje się tak, ponieważ kiedy jesteś sshw systemie, nie ma możliwości, aby system wyskoczył w oknie dialogowym umożliwiającym potwierdzenie, że chcesz zezwolić securitykomendzie na dostęp do tych informacji.

Udało mi się uruchomić polecenie podczas połączenia, sshklikając najpierw opcję „Zawsze zezwalaj” podczas uruchamiania polecenia lokalnie. To aktualizuje uprawnienia w pęku kluczy, dzięki czemu nie muszę już odpowiadać na okno dialogowe (nawet lokalnie), co pozwala mu również działać zdalnie.

Nie wiem jednak, czy będzie to dla Ciebie całkowicie pomocne, ponieważ myślę, że oznacza to, że musisz zapobiegawczo przyznać securityprogramowi dostęp do wszelkich elementów pęku kluczy, do których możesz chcieć uzyskać dostęp zdalny. Może być możliwe napisanie skryptu, aby to zrobić?

Jeśli eksperymentujesz z tym ręcznie, a później chcesz cofnąć ten dostęp, możesz przejść do odpowiedniego elementu w Dostępu do pęku kluczy, wybrać Uzyskaj informacje i spojrzeć na kartę Kontrola dostępu . Zobaczysz tam wpis security, który możesz usunąć:Okno dialogowe kontroli dostępu

James Elliott
źródło
Zrobiłem to samo - dodałem polecenie „bezpieczeństwo” do listy „zawsze zezwalaj na dostęp” (co również odbywa się poprzez kliknięcie „Zawsze zezwalaj” w wyskakującym okienku, które pojawia się przy wydawaniu polecenia lokalnie), ale nadal nie mogę uzyskać dostęp do elementu pęku kluczy zdalnie później. Musi być gdzieś inne ustawienie, które należy zmienić, ale nie mogę go znaleźć.
Ether
1
ahahaha - to robi rzeczywiście praca, ale trzeba się zalogować z nowej sesji po zmianie ustawień w pęku kluczy dla nich odniosły skutek. Brawo! (Dodam odpowiedź na to pytanie, jeśli kiedykolwiek dowiem się, jak zdalnie zmienić uprawnienia dostępu, ale na razie dopuszczalne jest wcześniejsze skonfigurowanie lokalnie do późniejszego zdalnego użycia).
Ether
2
Pamiętaj też - bardzo ważne jest, aby uruchomić także security unlock-keychain ~/Library/Keychains/login.keychainsesję zdalną, w której próbujesz użyć pęku kluczy. Spowoduje to monit o podanie hasła, więc nie możesz tego zrobić w skrypcie. Mogą istnieć sposoby na osiągnięcie tego bez hasła, ale to nie wchodzi w zakres tego pytania :)
Ether
czy ktoś wie, czy mogę wprowadzić hasło w wierszu polecenia odblokowania pęku kluczy bezpieczeństwa?
tofutim
1
@Ether Jeśli pęku kluczy jest domyślna /Users/[user]/Library/Keychains/ścieżka, możesz pominąć pełną ścieżkę i przejść z just login.keychain.
solgar
5

security -i unlock-keychain

działa dla mnie w MacOS 10.13.4 High Sierra.

Po zbadaniu rozwiązania karthicka znalazłem to. -I powoduje, że polecenie jest interaktywne i wyświetla monit o podanie hasła w terminalu.

Matt Clapp
źródło
3

Tak długo, jak pęku kluczy bezpieczeństwa znajduje się w domyślnej lokalizacji, można uruchomić poniższe polecenie, aby go odblokować. Nie monituje o podanie hasła. Działało zdalnie.

security unlock-keychain -p "enter password"

karthick
źródło
Witamy w Zapytaj inaczej! Staramy się znaleźć najlepsze odpowiedzi, które dostarczą dodatkowych informacji na temat tego, dlaczego są najlepsze. Odpowiedzi powinny być samodzielne, więc wyjaśnij, dlaczego uważasz, że udzielona odpowiedź rozwiąże problem lub jest lepsza od innych. Podanie linków jako informacji pomocniczych może również pomóc OP i innym osobom znaleźć dodatkowe informacje dla siebie. Zobacz Jak odpowiedzieć na pytanie, jak udzielić wysokiej jakości odpowiedzi. - Z recenzji
fsb