[PYTHON] Vorgehensweise zum Abrufen des KeePassX-Schlüssels mit einer Befehlszeile unter OSX

Ich wollte den KeePass X-Schlüssel in einer Umgebung erhalten, in der die GUI nicht verwendet werden kann, also habe ich es versucht.

Einführung von kptool

Wenn Sie suchen, wird sofort [Zusammenfassung der in Command Line Vol.2] verwendeten Tools (http://qiita.com/PSP_T/items/8fab37433f8b9606f75c) angezeigt. Bereiten Sie die Umgebung für die Ausführung von kptool mit Python vor.

GitHub shirou/kptool

$ 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

Mir wurde sofort gesagt, dass es keine Krypto gibt. Mit pip installieren.

$ pip install pycrypto 
-bash: pip: command not found

Mir wurde gesagt, dass es keinen Pip gibt. Installieren Sie 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

Die Installation der Rohrleitung ist abgeschlossen.

$ 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

Irgendwie ist ein Fehler in roten Buchstaben aufgetreten. Laufen Sie mit Sudo.

$ sudo pip install pycrypto
 
Successfully installed pycrypto
Cleaning up...

Es scheint funktioniert zu haben.

$ python kptool/kptool/kptool.py path/to/kdbfile
Enter password ['path/to/kdbfile']
Password: 
kptool> list

Wenn die Titelliste der in der entsprechenden kdb gespeicherten Einträge in der Liste angezeigt wird, ist dies erfolgreich.

Ändern Sie kptool

Ich wollte es auf einmal bekommen, also habe ich kptool durch Kopieren modifiziert.

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

erledigt! !!

Wenn mit der Option -p ein Kennwort angegeben wird, wird dieses Kennwort verwendet. Wenn es keine Option -p gibt, werden Sie aufgefordert, das Kennwort einzugeben. Ich drucke Daten, die notwendig erscheinen.

Holen Sie sich den Schlüssel von der Kommandozeile

#!/bin/sh

KEEPASS_SCRIPT=~/git/kptool/kptool/getentry.py
LOCAL_KDB_FILE=path/to/kdbfile
LOCAL_KDB_ENTRY=Titel des gewünschten Schlüssels

HOGE_PASSWORD=`python ${KEEPASS_SCRIPT} ${LOCAL_KDB_FILE} ${LOCAL_KDB_ENTRY} | grep password | cut -d ':' -f 2`
echo $KEEPASS_SCRIPT

Wenn Sie ein Shell-Skript wie dieses schreiben, können Sie es einfach durch Eingabe des Passworts erhalten. Ich spreche hier, aber bitte beachten Sie, dass das Echo des Passworts keine sehr korrekte Operation ist. Es fühlt sich gut an, es in ein geeignetes Programm aufzunehmen und zu verwenden.

des Weiteren...

Wenn die kdb-Datei beispielsweise eine sekundäre Verknüpfung einer anderen kdb-Datei ist, Die Option -p funktioniert.

#!/bin/sh

KEEPASS_SCRIPT=~/git/kptool/kptool/test.py
LOCAL_KDB_FILE=path/to/kdbfile
LOCAL_KDB_ENTRY=Titel des gewünschten Primärschlüssels
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`

Daten können einfach durch Eingabe des Primärschlüssels erfasst werden, wodurch die Effizienz verbessert wird! Wir konnten eine Umgebung erstellen, die funktioniert, indem wir nur das minimal erforderliche Passwort eingeben.

Das Gefühl ist genau Kachakachakacha ...

Das Ende

Recommended Posts

Vorgehensweise zum Abrufen des KeePassX-Schlüssels mit einer Befehlszeile unter OSX
Anweisungen zur Verwendung der AWS-Befehlszeilenschnittstelle (Python / awscli) unter Mac OS X.
So installieren Sie caffe unter OS X mit Macports
So installieren Sie Theano unter Mac OS X mit Homebrew
Erste Schritte mit dem Python-Framework Django unter Mac OS X.
Schritte, um Caffe im CPU-Modus in Mac OS X 10.10 zu integrieren
Hinweise zum Implementieren des Schlüssels unter Amazon S3 mit Boto 3, Implementierungsbeispiel, Hinweise
Konvertieren Sie XLSX in CSV in der Befehlszeile
Vorbereiten der Verwendung von aws cli unter Mac OS X.
So führen Sie mit OpenCV ein Null-Padding in einer Zeile durch
Sehr einfach, SciPy unter Mac OS X zu installieren
Yum-Befehl zum Zugriff auf MySQL mit Python 3 unter Linux
Schritte zum Messen der Abdeckung und zum Abrufen von Abzeichen auf codecov.io
Installieren Sie PyQt5 mit Homebrew unter Mac OS X Marvericks (10.9.2).
Schritte zum Installieren der neuesten Version von OpenCV unter OS X El Capitan ohne Homebrew
Memo, um den Wert auf der HTML-Javascript-Seite mit Jupiter zu erhalten
Verwenden Sie Python 3, das vom Befehlszeilentool unter macOS Catalina eingeführt wurde
Ich möchte eine Jupyter-Umgebung mit einem Befehl starten
Testen Sie Python mit Miniconda unter OS X und Linux mit travis-ci
Hinweise zur Vorbereitung der Python-Entwicklungsumgebung unter Mac OS X.
Erstellen Sie eine andere Version der Python-Conda-Umgebung mit einer Befehlszeile
So erhalten Sie eine Zeichenfolge aus einem Befehlszeilenargument in Python
So erhalten Sie den gesamten Datenverkehr über VPN mit OpenVPN unter Linux
Ich habe am Wochenende versucht, mit Bitcoin Systre zu beginnen
Ich habe versucht, die GUI auf einem Mac mit X Window System anzuzeigen
[Python] So erhalten Sie mit Enum einen Wert mit einem anderen Schlüssel als dem Wert
Installieren Sie lp_solve unter Mac OSX und rufen Sie es mit Python auf.
Konvertierung von GSI_DEM in Geotiff → UTM-Konvertierung → ASCII-Konvertierung nur in der Ubuntu-Befehlszeile
So installieren Sie Theano unter Mac OS X 10.10 (mit pyenv, anaconda)