Como obtenho senhas do chaveiro no terminal para uso em scripts?

28

Quando você possui uma LUKSunidade criptografada no computador Nautilusou Nemoa exibe Devicescomo uma unidade com um pequeno cadeado.

Quando você clica nele, é necessário inserir uma senha. Se você optar por remember this password forever, ele será salvo no seu chaveiro. Na próxima inicialização, clicar na unidade irá montá-la imediatamente.

Como montar 'imediatamente' uma unidade desse tipo na qual a senha está armazenada no chaveiro, a partir do terminal? Quero ter um script de inicialização automática que monte minha unidade LUKS ao efetuar o login. Não quero armazenar minha frase secreta no script, quero usar a frase secreta no chaveiro:

Se você for Passwords And Keys, há um monte de chaves sem nome. Em suas propriedades, você pode encontrar uma descrição como gvfs-luks-uuid=xxxxxxxxxxxxe também a senha para essa unidade LUKS. É isso que o Ubuntu usa.

Uma opção em que pensei é, python-gnomekeyringmas ela só pode obter o nome da chave e a senha. Eu preciso do que a GUI chama de 'Detalhes técnicos' para obter a senha de um específico, uuidporque o nome da chave está sempre vazio.

Redsandro
fonte

Respostas:

29

Você pode usar ferramentas secretas para armazenar e recuperar a senha do chaveiro.

Para armazenar uma nova senha:

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

Eu deixo você verificar no chaveiro como ele aparece. Para procurar (esse comando pode ser facilmente inserido no seu script):

secret-tool lookup drive mydrive
Aurelien
fonte
Observe que o segredo da ferramenta secreta é que você não pode ser root para trabalhar nos exemplos!
Paul Flint
1
Link morto - launchpad.net/ubuntu/+source/libsecret - tl; drapt-get install libsecret-tools
Matthew
9

Eu acho que a única resposta é completa python, mas existem dois erros que tornam as coisas difíceis.

  1. Você precisa fornecer manualmente os nomes das suas chaves (Seahorse: Descrições) porque a identificação de detalhes que outros aplicativos usam não está disponível na versão python. Eu criei um relatório de erro aqui: https://bugs.launchpad.net/ubuntu/+source/gnome-python-desktop/+bug/1144781
  2. Essas descrições estão vazias no Seahorse no caso específico das chaves LUKS, mas alterar a descrição vazia realmente altera o nome da chave para que você possa procurá-la em python. Eu criei um relatório de erro aqui: https://bugs.launchpad.net/ubuntu/+source/seahorse/+bug/1144703

Se você estiver trabalhando com scripts e chaveiros, mencione que esses bugs também o afetam.

Quanto à pythonparte, aqui está um exemplo:

#!/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()

Se você souber de outra maneira, por exemplo, através de comandos simples do bash, informe-nos.

Redsandro
fonte
1
Um exemplo python3?
Khurshid Alam
2

Usar Python Keyring Lib

Possui uma CLI conveniente para uso em scripts de shell.

Instalação

pip install keyring

Configurando e obtendo chaves

$ keyring set system username
Password for 'username' in 'system':
$ keyring get system username
password
HarlemSquirrel
fonte