¿Cómo obtengo las contraseñas del llavero en la terminal para usarlas en scripts?

28

Cuando tiene una LUKSunidad encriptada en su computadora, Nautiluso la Nemomostrará debajo Devicescomo una unidad con un pequeño candado.

Cuando hace clic en él, debe ingresar una contraseña. Si lo desea remember this password forever, se guarda en su llavero. El próximo arranque, al hacer clic en la unidad, la montará inmediatamente.

¿Cómo puedo "montar inmediatamente" una unidad para la cual la frase de contraseña se almacena en el llavero, desde la terminal? Quiero tener una secuencia de comandos de inicio automático que montará mi unidad LUKS cuando inicie sesión. No quiero almacenar mi frase de contraseña en la secuencia de comandos, quiero usar la frase de contraseña del llavero:

Si vas a Passwords And Keys, hay un montón de claves sin nombre. En sus propiedades puede encontrar una descripción como gvfs-luks-uuid=xxxxxxxxxxxxy también la contraseña para esa unidad LUKS. Esto es lo que usa Ubuntu.

Una opción que pensé es python-gnomekeyringpero solo puede obtener el nombre de clave y la contraseña. Necesito lo que la GUI llama 'Detalles técnicos' para obtener la contraseña de un específico uuidporque el nombre de la clave siempre está vacío.

Redsandro
fuente

Respuestas:

29

Puede usar herramientas secretas para almacenar y recuperar la contraseña del llavero.

Para almacenar una nueva contraseña:

secret-tool store --label='Password for mydrive' drive mydrive

Te dejo comprobar en el llavero cómo aparece. Para buscarlo (este comando se puede insertar fácilmente en su script):

secret-tool lookup drive mydrive
Aurelien
fuente
¡Tenga en cuenta que el secreto de secret-tool es que no puede ser root para trabajar los ejemplos!
Paul Flint
1
Enlace muerto - launchpad.net/ubuntu/+source/libsecret - tl; drapt-get install libsecret-tools
Matthew
9

Creo que la única respuesta es a través python, pero hay dos errores que dificultan las cosas.

  1. Es necesario para dar forma manual los nombres de teclas (Seahorse: Descripción), porque los datos identificativos que utilizan otras aplicaciones no están disponibles en la versión pitón. He creado un informe de error aquí: https://bugs.launchpad.net/ubuntu/+source/gnome-python-desktop/+bug/1144781
  2. Estas descripciones están vacías en Seahorse en el caso específico de las claves LUKS, pero cambiar la descripción vacía en realidad cambia el nombre de la clave para que pueda buscarla en Python. He creado un informe de error aquí: https://bugs.launchpad.net/ubuntu/+source/seahorse/+bug/1144703

Si está trabajando con scripts y llaveros, mencione que estos errores también lo afectan.

En cuanto a la pythonparte, aquí hay un ejemplo:

#!/usr/bin/env python

import gnomekeyring as gk

keyring = 'login'
keyItems = gk.list_item_ids_sync(keyring)

for keyItem in keyItems:
    key = gk.item_get_info_sync(keyring, keyItem)
    if  key.get_display_name() == 'KeyName you are looking for':
        # Your script here using key.get_secret()
        print "Password:", key.get_secret()

Si conoce alguna otra forma, por ejemplo, mediante simples comandos bash, háganoslo saber.

Redsandro
fuente
1
¿Un ejemplo de python3?
Khurshid Alam
2

Utilice Python Keyring Lib

Tiene una CLI conveniente para usar en scripts de shell.

Instalación

pip install keyring

Configurar y obtener claves

$ keyring set system username
Password for 'username' in 'system':
$ keyring get system username
password
Harlem Ardilla
fuente