Wie kann ich über die Befehlszeile remote auf den Schlüsselbund zugreifen?

23

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 seteines 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_SOCKeinen gültigen Wert festgelegt (zurückgegeben von ssh-agent).

Äther
quelle
Siehe auch
Kenorb

Antworten:

11

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-passwordmit der -gMarkierung 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 im sshFall fehl , mit einem Rückkehrcode von 51. Bestätigungsdialog aufrufen

Wenn ich den Befehl aus der Ferne über versuche ssh, führt dies -gsofort zu einem Fehler mit dem Status 36, den Sie melden.

Ich vermute, dass dies daran liegt, dass sshdas System kein Dialogfeld öffnen kann, in dem Sie bestätigen können, dass Sie dem securityBefehl den Zugriff auf diese Informationen erlauben möchten .

Ich konnte den Befehl zum Funktionieren bringen, indem ich sshzuerst 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 securityProgramm 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:Zugriffskontrolldialog

James Elliott
quelle
Ich habe das Gleiche getan - den Befehl 'security' zur Liste "Immer Zugriff gewähren" hinzugefügt (dies geschieht auch durch Klicken auf "Immer zulassen" im Popup, das angezeigt wird, wenn der Befehl lokal ausgegeben wird), kann dies aber immer noch nicht Greifen Sie anschließend remote auf den Schlüsselbund zu. Es muss irgendwo eine andere Einstellung geben, die geändert werden muss, aber ich kann sie nicht finden.
Ether
1
ahahaha - das funktioniert tatsächlich, aber man muss sich mit einer neuen Sitzung anmelden, nachdem die Einstellungen im Schlüsselbund geändert wurden, damit sie wirksam werden. Hurra! (Ich werde diese Frage beantworten, falls ich jemals herausfinden sollte, wie ich die Zugriffsrechte aus der Ferne ändern kann, aber es ist vorerst akzeptabel, die Einstellungen vor Ort für die spätere Verwendung aus der Ferne vorzunehmen.)
Ether
2
Beachten Sie auch, security unlock-keychain ~/Library/Keychains/login.keychaindass 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 :)
Ether
Weiß jemand, ob ich das Passwort in der Befehlszeile für den Sicherheits-Freischalt-Schlüsselbund eingeben kann?
bis zum
1
@Ether Wenn sich der Schlüsselbund im Standardpfad befindet /Users/[user]/Library/Keychains/, können Sie den vollständigen Pfad weglassen und einfach fortfahren login.keychain.
Solgar
5

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.

Matt Clapp
quelle
3

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"

karthick
quelle
Willkommen bei Ask Different! Wir versuchen, die besten Antworten zu finden. Diese Antworten liefern unterstützende Informationen darüber, warum sie die besten sind. Die Antworten sollten in sich geschlossen sein. Erklären Sie also, warum die von Ihnen angegebene Antwort das Problem löst oder besser ist als andere. Das Bereitstellen von Links als unterstützende Informationen kann auch dem OP helfen und anderen dabei, zusätzliche Informationen für sich selbst zu finden. Sehen Sie wie man Antwort auf , wie man eine Qualität Antwort zu geben. - Aus der Bewertung
fsb