Je voulais obtenir la clé KeePass X dans un environnement où l'interface graphique ne peut pas être utilisée, alors je l'ai essayé.
Si vous recherchez, Résumé des outils utilisés dans la ligne de commande vol.2 apparaîtra immédiatement. Préparez l'environnement pour exécuter kptool avec Python.
$ git clone https://github.com/shirou/kptool.git
$ python kptool/kptool/kptool.py path/to/kdbfile
Traceback (most recent call last):
File "kptool/kptool/kptool.py", line 9, in <module>
from keepassdb import keepassdb
File "/Users/east/git/kptool/kptool/keepassdb/keepassdb.py", line 6, in <module>
from Crypto.Cipher import AES
ImportError: No module named Crypto.Cipher
On m'a immédiatement dit qu'il n'y avait pas de Crypto. Installez avec pip.
$ pip install pycrypto
-bash: pip: command not found
On m'a dit qu'il n'y avait pas de pip. Installez pip.
$ sudo easy_install pip
Searching for pip
Reading http://pypi.python.org/simple/pip/
Best match: pip 1.5.4
Downloading https://pypi.python.org/packages/source/p/pip/pip-1.5.4.tar.gz#md5=834b2904f92d46aaa333267fb1c922bb
Processing pip-1.5.4.tar.gz
Running pip-1.5.4/setup.py -q bdist_egg --dist-dir /tmp/easy_install-8UYX4X/pip-1.5.4/egg-dist-tmp-HXMDdl
warning: no files found matching 'pip/cacert.pem'
warning: no files found matching '*.html' under directory 'docs'
warning: no previously-included files matching '*.rst' found under directory 'docs/_build'
no previously-included directories found matching 'docs/_build/_sources'
Adding pip 1.5.4 to easy-install.pth file
Installing pip script to /usr/local/bin
Installing pip2.7 script to /usr/local/bin
Installing pip2 script to /usr/local/bin
Installed /Library/Python/2.7/site-packages/pip-1.5.4-py2.7.egg
Processing dependencies for pip
Finished processing dependencies for pip
L'installation de pip est terminée.
$ pip install pycrypto
Command /usr/bin/python -c "import setuptools, tokenize;__file__='/private/var/folders/47/lrzh0xp935z2ppgpth8cx44w0000gn/T/pip_build_east/pycrypto/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /var/folders/47/lrzh0xp935z2ppgpth8cx44w0000gn/T/pip-4slDJi-record/install-record.txt --single-version-externally-managed --compile failed with error code 1 in /private/var/folders/47/lrzh0xp935z2ppgpth8cx44w0000gn/T/pip_build_east/pycrypto
Storing debug log for failure in /Users/east/Library/Logs/pip.log
D'une manière ou d'une autre, une erreur s'est produite dans les lettres rouges. Exécutez avec sudo.
$ sudo pip install pycrypto
Successfully installed pycrypto
Cleaning up...
Cela semble avoir fonctionné.
$ python kptool/kptool/kptool.py path/to/kdbfile
Enter password ['path/to/kdbfile']
Password:
kptool> list
Si la liste des titres des entrées enregistrées dans le kdb correspondant apparaît dans la liste, cela réussit.
Je voulais l'obtenir en une seule fois, j'ai donc modifié kptool en copiant.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import argparse
import getpass
import datetime
import readline
from keepassdb import keepassdb
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='search entry from keepass DB')
parser.add_argument('kdb_file',
nargs=1,
help = 'keepass DB file path')
parser.add_argument('title',
nargs=1,
help = 'entry title')
parser.add_argument('-p', '--password')
args = parser.parse_args()
if (not args.password):
password = getpass.getpass()
else:
password = args.password
try:
k = keepassdb.KeepassDBv1(args.kdb_file[0], password)
except ValueError:
print("Invalid password.")
exit(1)
for e in k.get_entries():
title = e['title'].encode('utf-8')
if (title == args.title[0]):
print("id:%s" % e['id'].encode('utf-8'))
print("title:%s" % title)
print("url:%s" % e['url'].encode('utf-8'))
print("username:%s" % e['username'].encode('utf-8'))
print("password:%s" % e['password'].encode('utf-8'))
l'a fait! !!
Si vous donnez un mot de passe avec l'option -p, ce mot de passe sera utilisé. S'il n'y a pas d'option -p, vous serez invité à entrer le mot de passe. J'imprime des données qui me semblent nécessaires.
#!/bin/sh
KEEPASS_SCRIPT=~/git/kptool/kptool/getentry.py
LOCAL_KDB_FILE=path/to/kdbfile
LOCAL_KDB_ENTRY=Titre de la clé souhaitée
HOGE_PASSWORD=`python ${KEEPASS_SCRIPT} ${LOCAL_KDB_FILE} ${LOCAL_KDB_ENTRY} | grep password | cut -d ':' -f 2`
echo $KEEPASS_SCRIPT
Si vous écrivez un script shell comme celui-ci, vous pouvez facilement l'obtenir en entrant simplement le mot de passe. Je fais écho ici, mais veuillez noter que faire écho au mot de passe n'est pas une opération très correcte. Cela fait du bien de l'incorporer dans un programme approprié et de l'utiliser.
Par exemple, si le fichier kdb est une liaison secondaire d'un autre fichier kdb, L'option -p fonctionne.
#!/bin/sh
KEEPASS_SCRIPT=~/git/kptool/kptool/test.py
LOCAL_KDB_FILE=path/to/kdbfile
LOCAL_KDB_ENTRY=Titre de la clé primaire souhaitée
APP_KDB_FILE="$1"
APP_KDB_ENTRY='HogeApp (hoge) hogehoge'
if [ -z $APP_KDB_FILE ]
then
echo "Usage: $0 path/to/app.kdb"
exit 1
fi
APP_KDB_PASSWORD=`python ${KEEPASS_SCRIPT} ${LOCAL_KDB_FILE} ${LOCAL_KDB_ENTRY} | grep password | cut -d ':' -f 2`
APP_URL=`python ${KEEPASS_SCRIPT} ${APP_KDB_FILE} "${APP_KDB_ENTRY}" -p ${APP_KDB_PASSWORD} | grep url | head -n 1 |cut -d ':' -f 2`
APP_PASSWORD=`python ${KEEPASS_SCRIPT} ${APP_KDB_FILE} "${APP_KDB_ENTRY}" -p ${APP_KDB_PASSWORD} | grep password | head -n 1 |cut -d ':' -f 2`
Les données peuvent être facilement acquises en entrant simplement la clé primaire, ce qui améliore l'efficacité! Nous avons pu créer un environnement qui fonctionne en entrant simplement le mot de passe minimum requis.
Le sentiment est exactement Kachakachakacha ...
La fin
Recommended Posts