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

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 setvon 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_SOCKauf einen gültigen Wert gesetzt (zurückgegeben von ssh-agent).

Antworten (3)

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-passwordlokal mit dem -gFlag 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 sshFall fehl, mit einem Rückgabecode von 51.Zugriffsbestätigungsdialog

Wenn ich den Befehl remote ü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 beim Aufrufen keine Möglichkeit hat, ein Dialogfeld anzuzeigen, in dem Sie bestätigen können, dass Sie dem securityBefehl den Zugriff auf diese Informationen erlauben möchten.

Ich konnte den Befehl zum sshLaufen 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 securityProgramm 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:Dialogfeld „Zugriffssteuerung“.

Ich habe dasselbe getan – den Befehl „Sicherheit“ zur Liste „Zugriff immer zulassen“ hinzugefügt (was auch durch Klicken auf „Immer zulassen“ in dem Popup erfolgt, das erscheint, wenn der Befehl lokal ausgegeben wird), aber ich kann es immer noch nicht Greifen Sie danach aus der Ferne auf das Schlüsselbundelement zu. Irgendwo muss noch eine andere Einstellung geändert werden, aber ich kann sie nicht finden.
ahahaha - das funktioniert tatsächlich, aber man muss sich mit einer neuen Sitzung anmelden, nachdem man die Einstellungen im Schlüsselbund geändert hat, damit sie wirksam werden. Hurra! (Ich werde dieser Frage eine Antwort hinzufügen, wenn ich jemals herausfinde, wie ich die Zugriffsrechte aus der Ferne ändern kann, aber es ist vorerst akzeptabel, Dinge im Voraus lokal für die spätere Verwendung aus der Ferne einzurichten.)
Beachten Sie auch, dass es wichtig ist, auch security unlock-keychain ~/Library/Keychains/login.keychaindie 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 :)
Weiß jemand, ob ich das Passwort in der Befehlszeile für Security Unlock-Keychain eingeben kann?
Wenn jemand auf das Problem stößt - die Reihenfolge ist wichtig, muss der Sicherheitsschlüsselbund vor "eval $ (ssh-agent)" erfolgen.
@Ether Wenn sich der Schlüsselbund im Standardpfad befindet /Users/[user]/Library/Keychains/, können Sie den vollständigen Pfad weglassen und nur mit login.keychain.
@Ether Sie können die Option -p verwenden security unlock-keychain, um Ihr Passwort an den Befehl zu übergeben und die Eingabeaufforderung zu vermeiden

security -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"

Willkommen bei Ask Different! Wir versuchen, die besten Antworten zu finden, und diese Antworten liefern unterstützende Informationen darüber, warum sie die besten sind. Die Antworten sollten in sich geschlossen sein, also erklären Sie, warum Sie glauben, dass die von Ihnen gegebene Antwort das Problem lösen wird oder besser ist als andere da draußen. Die Bereitstellung von Links als unterstützende Informationen kann dem OP und anderen auch helfen, zusätzliche Informationen für sich selbst zu finden. Siehe Wie antworte ich , um eine qualitativ hochwertige Antwort zu geben. - Aus Bewertung