In meinem Schlüsselbund speichere ich verschiedene Passwörter (zB für entfernte E-Mail-Server). Wenn ich lokal angemeldet bin, kann ich diese über die Befehlszeile abrufen über:
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>
Die Ergebnisse können jedoch nicht erzielt werden, wenn sie remote ausgeführt werden (ssh'ing in die Box von woanders):
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>
Außerdem ist der Rückgabewert des letzten Befehls (mit -g) 36.
Ich habe die Ausgabe set
von einer lokalen Anmeldung ausgegeben und mit einer entfernten verglichen, und die fehlenden Umgebungsvariablen sind:
Apple_PubSub_Socket_Render
GPG_AGENT_INFO
SECURITYSESSIONID
TERM_PROGRAM
TERM_PROGRAM_VERSION
TERM_SESSION_ID
XPC_FLAGS
XPC_SERVICE_NAME
Was vermisse ich? Ich habe SSH_AUTH_SOCK
auf einen gültigen Wert gesetzt (zurückgegeben von ssh-agent
).
Als ich dies reproduziere, um dies zu untersuchen, bemerke ich, dass mein Schlüsselbund so konfiguriert ist, dass „Bestätigen, bevor der Zugriff gewährt wird“. Wenn ich also das find-internet-password
lokal mit dem -g
Flag durchführe, erhalte ich ein Dialogfeld, in dem steht, dass die Sicherheit Ihre vertraulichen Informationen verwenden möchte, die in „smtp.gmail.com“ in Ihrem Schlüsselbund gespeichert sind. Wenn ich auf "Erlauben" klicke, funktioniert es, wenn ich auf "Verweigern" klicke, schlägt es ähnlich wie in dem ssh
Fall fehl, mit einem Rückgabecode von 51
.
Wenn ich den Befehl remote über versuche ssh
, führt dies -g
sofort zu einem Fehler, mit dem Status 36
, den Sie melden.
Ich vermute, dass dies daran liegt, dass ssh
das System beim Aufrufen keine Möglichkeit hat, ein Dialogfeld anzuzeigen, in dem Sie bestätigen können, dass Sie dem security
Befehl den Zugriff auf diese Informationen erlauben möchten.
Ich konnte den Befehl zum ssh
Laufen bringen, während ich verbunden war, indem ich zuerst auf die Option „Immer zulassen“ klickte, wenn ich den Befehl lokal ausführte. Dadurch werden die Berechtigungen im Schlüsselbund aktualisiert, sodass ich nicht mehr auf den Dialog reagieren muss (auch nicht lokal), sodass er auch remote funktionieren kann.
Ich weiß jedoch nicht, ob dies für Sie völlig hilfreich sein wird, da ich denke, dass Sie dem security
Programm präventiv Zugriff auf alle Schlüsselbundelemente gewähren müssen, auf die Sie möglicherweise aus der Ferne zugreifen möchten. Kann man dazu vielleicht ein Script schreiben?
Wenn Sie damit manuell experimentieren und diesen Zugriff später widerrufen möchten, können Sie in der Schlüsselbundverwaltung zu dem betroffenen Element gehen, Informationen abrufen auswählen und auf die Registerkarte Zugriffskontrolle schauen . Dort sehen Sie einen Eintrag security
, den Sie löschen können:
security unlock-keychain ~/Library/Keychains/login.keychain
die Remotesitzung auszuführen, in der Sie versuchen, den Schlüsselbund zu verwenden. Dies wird Sie zur Eingabe Ihres Passworts auffordern, sodass Sie dies nicht in einem Skript tun können. Möglicherweise gibt es Möglichkeiten, dies ohne Passwort zu erreichen, aber das geht über den Rahmen dieser Frage hinaus :)/Users/[user]/Library/Keychains/
, können Sie den vollständigen Pfad weglassen und nur mit login.keychain
.security unlock-keychain
, um Ihr Passwort an den Befehl zu übergeben und die Eingabeaufforderung zu vermeidensecurity -i unlock-keychain
funktioniert bei mir unter MacOS 10.13.4 High Sierra.
Nachdem ich die Lösung von Karthick untersucht hatte, fand ich dies. Das -i macht den Befehl interaktiv und fordert Sie im Terminal zur Eingabe Ihres Passworts auf.
Solange sich der Sicherheitsschlüsselbund am Standardspeicherort befindet, können Sie den folgenden Befehl ausführen, um ihn zu entsperren. Es wird nicht nach einem Passwort gefragt. Es funktionierte aus der Ferne.
security unlock-keychain -p "enter password"
kenorb