Ich speichere verschiedene Passwörter (zB für entfernte E-Mail-Server) in meinem Schlüsselbund. Wenn ich lokal angemeldet bin, kann ich diese über die Befehlszeile abrufen:
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 aus der Ferne ausgeführt werden (ssh'in von einer anderen Stelle in die Box):
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
eines lokalen Logins ausgegeben und mit einer entfernten verglichen. 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
einen gültigen Wert festgelegt (zurückgegeben von ssh-agent
).
Antworten:
Beim Reproduzieren dieses Dokuments zur Untersuchung stelle ich fest, dass mein Schlüsselbund auf "Bestätigen, bevor der Zugriff zugelassen wird" konfiguriert ist. Wenn ich also die lokale Überprüfung
find-internet-password
mit der-g
Markierung durchführe, wird ein Dialogfeld mit der Meldung angezeigt, dass die in "smtp" gespeicherten vertraulichen Informationen verwendet werden sollen. gmail.com “in Ihrem Schlüsselbund. Wenn ich auf "Zulassen" klicke, funktioniert dies. Wenn ich auf "Verweigern" klicke, schlägt dies ähnlich wie imssh
Fall fehl , mit einem Rückkehrcode von51
.Wenn ich den Befehl aus der Ferne über versuche
ssh
, führt dies-g
sofort zu einem Fehler mit dem Status36
, den Sie melden.Ich vermute, dass dies daran liegt, dass
ssh
das System kein Dialogfeld öffnen kann, in dem Sie bestätigen können, dass Sie demsecurity
Befehl den Zugriff auf diese Informationen erlauben möchten .Ich konnte den Befehl zum Funktionieren bringen, indem ich
ssh
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 das Dialogfeld (auch nicht lokal) reagieren muss, sodass es auch remote funktionieren kann.Ich weiß jedoch nicht, ob dies für Sie ganz hilfreich sein wird, da Sie dem
security
Programm meines Erachtens vorab Zugriff auf alle Schlüsselbundelemente gewähren müssen, auf die Sie möglicherweise remote zugreifen möchten. Ist es möglich, ein Skript zu schreiben, um dies zu tun?Wenn Sie mit dieser manuell experimentieren und später wollen diesen Zugriff zu widerrufen, können Sie auf das betroffene Produkt in dem Schlüsselbund gehen, wählen Sie Get Info und Blick auf dem Access Control - Registerkarte. Dort sehen Sie einen Eintrag
security
, den Sie löschen können:quelle
security unlock-keychain ~/Library/Keychains/login.keychain
dass Sie das Programm unbedingt auch in der Remote-Sitzung ausführen müssen, in der Sie versuchen, den Schlüsselbund zu verwenden. Dadurch werden Sie zur Eingabe Ihres Kennworts aufgefordert, sodass Sie dies nicht in einem Skript ausführen können. Es kann Möglichkeiten geben, dies ohne ein Passwort zu erreichen, aber das ist nicht in den Rahmen dieser Frage zu stellen :)/Users/[user]/Library/Keychains/
, können Sie den vollständigen Pfad weglassen und einfach fortfahrenlogin.keychain
.security -i unlock-keychain
funktioniert bei mir unter MacOS 10.13.4 High Sierra.
Nachdem ich Karthicks Lösung untersucht hatte, fand ich dies. Das -i macht den Befehl interaktiv und fordert Sie im Terminal zur Eingabe Ihres Passworts auf.
quelle
Solange sich der Sicherheitsschlüsselbund am Standardspeicherort befindet, können Sie den folgenden Befehl ausführen, um ihn zu entsperren. Es wird nicht zur Eingabe eines Passworts aufgefordert. Es funktionierte aus der Ferne.
security unlock-keychain -p "enter password"
quelle