¿Cómo puedo acceder al llavero de forma remota desde la línea de comandos?

20

Estoy almacenando varias contraseñas (por ejemplo, para servidores de correo electrónico remotos) en mi llavero. Desde la línea de comandos, cuando inicie sesión localmente, puedo recuperarlos a través de:

security unlock-keychain ~/Library/Keychains/login.keychain
<enter password>
security find-internet-password -s smtp.gmail.com -a [email protected]
<dumps keychain attributes, not including password>
security find-internet-password -s smtp.gmail.com -a [email protected] -g
<dumps keychain attributes, including password>

Sin embargo, los resultados no se pueden lograr cuando se ejecutan de forma remota (por ejemplo, caja de otro lugar):

security unlock-keychain ~/Library/Keychains/login.keychain
<enter password>
security find-internet-password -s smtp.gmail.com -a [email protected]
<dumps keychain attributes, not including password>
security find-internet-password -s smtp.gmail.com -a [email protected] -g
<nothing printed, to stdout or stderr>

Además, el valor de retorno del comando final (con -g) es 36.

He vaciado la salida de set de un inicio de sesión local y lo he comparado con un control remoto uno, y las variables de entorno que faltan son:

Apple_PubSub_Socket_Render
GPG_AGENT_INFO
SECURITYSESSIONID
TERM_PROGRAM
TERM_PROGRAM_VERSION
TERM_SESSION_ID
XPC_FLAGS
XPC_SERVICE_NAME

¿Qué me estoy perdiendo? Tengo SSH_AUTH_SOCK establecido en un valor válido (devuelto de ssh-agent ).

    
pregunta Ether 24.03.2015 - 22:15

3 respuestas

10

Al reproducir esto para investigar, me doy cuenta de que tengo mi llavero configurado para "Confirmar antes de permitir el acceso". Entonces, cuando realizo find-internet-password localmente con el indicador -g , aparece un cuadro de diálogo que dice security quiere usar su información confidencial almacenada en “smtp.gmail.com” en su llavero. Si hago clic en “Permitir”, entonces funciona, si hago clic en “Denegar”, falla de manera similar al caso ssh . con un código de retorno de 51 .

Cuandointentoelcomandodeformaremotaatravésdessh,-ginmediatamentefalla,conelestadode36queestáinformando.

Sospechoqueestosedebeaque,cuandossh,nohayformadequeelsistemamuestreuncuadrodediálogoquelepermitaconfirmarquedeseapermitirqueelcomandosecurityaccedaaestainformación.

Pudehacerqueelcomandofuncionaramientrasestabaconectadoporsshhaciendoclicenlaopción"Permitir siempre" cuando ejecuto el comando localmente. Esto actualiza los permisos en Keychain para que ya no tenga que responder al cuadro de diálogo (incluso localmente), lo que le permite trabajar de forma remota también.

No sé si esto será completamente útil para usted, sin embargo, ya que creo que significa que deberá otorgar de manera preventiva el acceso al programa security a cualquier elemento de llavero al que desee acceder de forma remota. ¿Es posible escribir un script para hacer esto?

Si está experimentando con esto manualmente y luego desea revocar este acceso, puede ir al elemento afectado en Keychain Access, seleccione Obtener información y vea Control de acceso pestaña. Verá una entrada para security allí, que puede eliminar:

    
respondido por el James Elliott 24.03.2015 - 23:07
3

security -i unlock-keychain

funciona para mí en MacOS 10.13.4 High Sierra.

Después de investigar la solución de Karthick, encontré esto. El comando -i hace que el comando sea interactivo y le solicita su contraseña en el terminal.

    
respondido por el Matt Clapp 23.05.2018 - 21:39
1

Mientras el llavero de seguridad esté en la ubicación predeterminada, puede ejecutar el siguiente comando para desbloquearlo. No solicita una contraseña. Funcionó de forma remota.

security unlock-keychain -p "enter password"

    
respondido por el karthick 22.02.2018 - 16:43

Lea otras preguntas en las etiquetas