Nie można odblokować pęku kluczy logowania na sierra w ssh

7

Mam skrypt, który przenosi ssh na komputer Mac. Oryginalny skrypt, który działał na El Capitan, odblokowuje pęku kluczy w ten sposób:

security unlock-keychain -p mypassword

Powyższe polecenie powoduje błąd w Sierra, więc zaktualizowałem go do tego:

security unlock-keychain -p mypassword ~/Library/Keychains/login.keychain

Wydaje się, że powyższe polecenie działa, ale kiedy wymieniam pęki kluczy, pęku kluczy logowania nadal nie ma i mój skrypt nie próbuje podpisać mojego kodu, ponieważ nie może dostać się do certyfikatów.

(~)$ security list-keychains
"/Library/Keychains/System.keychain"
"/Library/Keychains/System.keychain"

Wszystko działa idealnie w oknie terminala na hoście, ale potrzebuję go do pracy zdalnej w SSH.

Dziękujemy za wszelką pomoc lub sugestie.

Aktualizacja 10 października 2016 r .: Zmieniłem uwierzytelnianie ssh z hasła na klucz rsa i zaczęło działać. Po uzyskaniu dostępu do pęku kluczy logowania zacząłem pojawiać się błąd w powłoce ssh: SecKey API zwrócił: -25308 z kodu. Okazało się, że to błąd uprawnień. Kiedy wypróbowałem to na hoście w terminalu, pojawiło się okno dialogowe z pęku kluczy z prośbą o pozwolenie na dostęp.

mw2785
źródło
Brelok mógł zostać odblokowany, ale miał wyświetlać monit o interfejs użytkownika z prośbą o pozwolenie. Jestem uwięziony na podobnym problemie jak stackoverflow.com/questions/39868578/... . Czy znajdziesz jakieś rozwiązanie lub obejście?
jayatubi,

Odpowiedzi:

10

Twój brelok do logowania nie pojawia się na liście wyszukiwania, tzn. Gdy go zaznaczyłeś, pokazuje dwa razy brelok systemowy. Brak pęku kluczy logowania:

(~)$ security list-keychains
"/Library/Keychains/System.keychain"
"/Library/Keychains/System.keychain"
(~)$ security list-keychains -d user -s login.keychain
(~)$ security list-keychains
"/Users/USERNAME/Library/Keychains/login.keychain-db"
"/Library/Keychains/System.keychain"

Możesz użyć polecenia bezpieczeństwa, aby wyszukać kod błędu -25308. W takim przypadku jest napisane: „Interakcja użytkownika jest niedozwolona”. Jest to typowe, jeśli próbujesz podpisać swoją aplikację przez SSH (lub przez Jenkins).

security error -25308
Error: 0xFFFF9D24 -25308 User interaction is not allowed.

Musisz wykonać polecenie bezpieczeństwa, aby włączyć znakowanie aplikacji za pomocą nieinteraktywnej powłoki:

security set-key-partition-list -S apple: -k <Password> -D <Identity> -t private <your.keychain>

Oto „kompletny” przyjazny skrypt Jenkins / SSH do podpisywania aplikacji:

MY_KEYCHAIN="temp.keychain"
MY_KEYCHAIN_PASSWORD="secret"
CERT="certificate.p12"
CERT_PASSWORD="certificate secret"

security create-keychain -p "$MY_KEYCHAIN_PASSWORD" "$MY_KEYCHAIN" # Create temp keychain
security list-keychains -d user -s "$MY_KEYCHAIN" $(security list-keychains -d user | sed s/\"//g) # Append temp keychain to the user domain
security set-keychain-settings "$MY_KEYCHAIN" # Remove relock timeout
security unlock-keychain -p "$MY_KEYCHAIN_PASSWORD" "$MY_KEYCHAIN" # Unlock keychain
security import $CERT -k "$MY_KEYCHAIN" -P "$CERT_PASSWORD" -T "/usr/bin/codesign" # Add certificate to keychain
CERT_IDENTITY=$(security find-identity -v -p codesigning "$MY_KEYCHAIN" | head -1 | grep '"' | sed -e 's/[^"]*"//' -e 's/".*//') # Programmatically derive the identity
CERT_UUID=$(security find-identity -v -p codesigning "$MY_KEYCHAIN" | head -1 | grep '"' | awk '{print $2}') # Handy to have UUID (just in case)
security set-key-partition-list -S apple-tool:,apple: -s -k $MY_KEYCHAIN_PASSWORD -D "$CERT_IDENTITY" -t private $MY_KEYCHAIN # Enable codesigning from a non user interactive shell
### INSERT BUILD COMMANDS HERE ###
security delete-keychain "$MY_KEYCHAIN" # Delete temporary keychain

Wołaj do Bochun Bai za spędzenie 3 tygodni z pomocą Apple na znalezieniu rozwiązania problemu -25308 i opublikowaniu go na https://sinofool.net/blog/archives/322

Stephen Quan
źródło
Stephen, dziękuję za to wyjaśnienie. Mój pierwotny problem został rozwiązany, kiedy przełączyłem się na klucz RSA zamiast hasła w SSH, ale jestem wdzięczny, że w końcu zrozumiałem, co się dzieje, i poznaj metody debugowania podobnych problemów w przyszłości - jeśli i kiedy Apple wprowadzi zmiany związane z bezpieczeństwem.
mw2785
Dzięki, Stephen, w moim przypadku było to errSecInternalComponent na znakach na kompilacji Jenkins. security set-key-partition-listwykonał lewę!
Grigory Entin