Come posso accedere al portachiavi in ​​remoto dalla riga di comando?


23

Sto memorizzando varie password (ad esempio per server di posta elettronica remoti) nel mio portachiavi. Dalla riga di comando, quando accedo localmente, posso recuperarli tramite:

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>

Tuttavia, i risultati non possono essere raggiunti se eseguiti in remoto (come nella casella da qualche altra parte):

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>

Inoltre, il valore di ritorno del comando finale (usando -g) è 36.

Ho scaricato l'output di setda un login locale e l'ho confrontato con uno remoto e le variabili di ambiente mancanti sono:

Apple_PubSub_Socket_Render
GPG_AGENT_INFO
SECURITYSESSIONID
TERM_PROGRAM
TERM_PROGRAM_VERSION
TERM_SESSION_ID
XPC_FLAGS
XPC_SERVICE_NAME

Cosa mi sto perdendo? Ho SSH_AUTH_SOCKimpostato un valore valido (restituito da ssh-agent).


Risposte:


11

Nel riprodurre questo per indagare, noto che ho il mio portachiavi configurato su "Conferma prima di consentire l'accesso". Quindi quando eseguo find-internet-passwordlocalmente con il -gflag, ricevo una finestra di dialogo che indica che la sicurezza vuole usare le tue informazioni confidenziali memorizzate in "smtp. gmail.com "nel tuo portachiavi. Se faccio clic su "Consenti", allora funziona, se faccio clic su "Nega" non funziona in modo simile al sshcaso, con un codice di ritorno di 51. Finestra di dialogo di conferma dell'accesso

Quando provo il comando da remoto tramite ssh, il -grisultato immediatamente si interrompe, con lo stato di 36quello che stai segnalando.

Ho il sospetto che ciò sia dovuto al fatto che, quando ci sshsi trova, il sistema non può aprire una finestra di dialogo che consente di confermare che si desidera consentire al securitycomando di accedere a queste informazioni.

Sono stato in grado di far funzionare il comando mentre ero connesso sshfacendo prima clic sull'opzione "Consenti sempre" quando eseguivo il comando localmente. Questo aggiorna le autorizzazioni in Keychain in modo che non ho più bisogno di rispondere alla finestra di dialogo (anche localmente), che consente anche a lavorare in remoto.

Non so se questo ti sarà completamente utile, poiché penso che significhi che dovrai concedere preventivamente al securityprogramma l'accesso a tutti gli elementi del portachiavi a cui potresti voler accedere da remoto. Potrebbe essere possibile scrivere una sceneggiatura per fare questo?

Se stai sperimentando questo manualmente e in seguito desideri revocare questo accesso, puoi andare all'elemento interessato in Accesso Portachiavi, scegliere Ottieni informazioni e guardare la scheda Controllo accesso . Vedrai una voce per securitylì, che puoi eliminare:Finestra di dialogo Controllo accessi


Ho fatto la stessa cosa - ho aggiunto il comando 'security' all'elenco "consenti sempre l'accesso" (che viene anche fatto facendo clic su "Consenti sempre" nel popup che appare quando si emette il comando localmente), ma non riesco ancora accedere successivamente all'elemento portachiavi in ​​remoto. Deve esserci un'altra impostazione da qualche parte che deve essere modificata, ma non riesco a trovarla.
Ether

1
ahahaha: questo funziona davvero, ma è necessario accedere con una nuova sessione dopo aver modificato le impostazioni nel Portachiavi affinché abbiano effetto. Evviva! (Aggiungerò una risposta a questa domanda se dovrò mai scoprire come modificare in remoto i privilegi di accesso, ma impostare le cose localmente in anticipo per il successivo uso remoto è accettabile per ora.)
Ether

2
Nota anche: è essenziale eseguire anche security unlock-keychain ~/Library/Keychains/login.keychainnella sessione remota in cui si sta tentando di utilizzare il portachiavi. Questo richiederà la tua password, quindi non puoi farlo in uno script. Potrebbero esserci dei modi per raggiungere questo obiettivo senza una password, ma non rientra nell'ambito di questa domanda :)
Ether

qualcuno sa se posso inserire la password nella riga di comando per il keychain di sblocco di sicurezza?
Tofutim,

1
@Ether Se il portachiavi si trova nel /Users/[user]/Library/Keychains/percorso predefinito , puoi omettere il percorso completo e procedere con Just login.keychain.
solgar

5

security -i unlock-keychain

funziona per me in MacOS 10.13.4 High Sierra.

Dopo aver studiato la soluzione di Karthick, ho trovato questo. -I rende il comando interattivo e richiede la password nel terminale.


3

Finché il portachiavi di sicurezza si trova nella posizione predefinita, è possibile eseguire il comando seguente per sbloccarlo. Non richiede una password. Ha funzionato da remoto.

security unlock-keychain -p "enter password"


Benvenuti a chiedere diverso! Stiamo cercando di trovare le risposte migliori e tali risposte forniranno informazioni di supporto sul perché siano le migliori. Le risposte dovrebbero essere autosufficienti, quindi spiega perché pensi che la risposta che hai fornito risolverà il problema o sia migliore di altre là fuori. Fornire collegamenti come informazioni di supporto può anche aiutare l'OP e altri, a trovare informazioni aggiuntive per se stessi. Vedi Come rispondere su come fornire una risposta di qualità. - Dalla recensione
fsb,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.