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 set
z 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_SOCK
ustawioną prawidłową wartość (zwróconą z ssh-agent
).
Odpowiedzi:
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-password
lokalnie-g
flagę, 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 wssh
przypadku, z kodem powrotu51
.Gdy próbuję zdalnie wykonać polecenie
ssh
,-g
natychmiast powoduje to awarię, której status36
zgłaszasz.Podejrzewam, że dzieje się tak, ponieważ kiedy jesteś
ssh
w systemie, nie ma możliwości, aby system wyskoczył w oknie dialogowym umożliwiającym potwierdzenie, że chcesz zezwolićsecurity
komendzie na dostęp do tych informacji.Udało mi się uruchomić polecenie podczas połączenia,
ssh
klikają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ć
security
programowi 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ąć:źródło
security unlock-keychain ~/Library/Keychains/login.keychain
sesję 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 :)/Users/[user]/Library/Keychains/
ścieżka, możesz pominąć pełną ścieżkę i przejść z justlogin.keychain
.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.
źródło
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"
źródło