Use Yubikey and Password-store for Ansible credentials

I spent some time over the last months to improve the security of servers and passwords. In doing so, I started to orchestrate my servers using a configuration management tool called Ansible. This allows me to spin-up fresh servers in a few seconds and to get rid of year-old, polluted and insecure system images.


My ’single password for everything‘ has been replaced by a new password policy which enforces individual passwords for every single service. This was easier than I previously expected:

To unlock the ‚paranoid‘ level, I additionally purchased a Yubikey Neo token to handle the decryption of my login credentials in tamper-proof hardware.
pass‚ is just a small shell script to glue several existing Unix tools together: Bash, pwgen, Git, xclip & GnuPG (obeying the Unix philosophy). The passwords are stored in simple text files which are encrypted by PGP and stored in a directory structure which is managed in a Git repository.

Yubikey Neo und Neo-n

There are already a tons of tutorials which present the tools I describes above. I do not want to repeat all that stuff. So, this post is dedicated to solve some smaller issues I encountered:

Use One-Time passwords across multiple servers

The Yubikey Neo can do much more than decrypting static passwords via GnuPG:

  • Generate passwords:
    • fixed string (insecure!)
    • with Yubico OTP algorithm
    • with OATH-HOTP algorithm
  • Do challenge response authentication
    • via FIDO’s U2F standard
    • with HMAC-SHA1 algorithm
    • with Yubico OTP algorithm

Some third-party services already support FIDO U2F standard or traditional OATH-{H,T}OTP TFA, like used by the Google authenticator app. I suggest to have a look at:

For private servers there are several PAM modules available to integrate OTP’s or Challenge Response (CR) methods. Unfortunately, support for CR is not widespread across different SSH- and mail clients.

So, you want to use OTP’s which leds to another problem: OTP’s rely on a synchronized counter between the hardware token and the server. Once you use multiple servers, those must be synchronized as well. I’m using a central Radius server to facilitate this.

Integrate ‚pass‘ into your Ansible workflow

Ansible uses SSH and Python scripts to manage several remote machines in parallel. You must use key-based SSH authentication, because you do not want to type every password manually! Additionally you need to get super user privileges for most of your administrative tasks on the remote machine.

The SSH authentication is handled by gpg-agents ‚–enable-ssh-support‘ option and a PGP key on your token.

To get super user privileges, I use the following variable declaration my Ansible „group_vars/all“ file:
ansible_sudo_pass: "{{ lookup('pipe', 'pass servers/' + inventory_hostname) }}"

There is a separate root password for every server (e.g. „pass servers/“). I wrote some ansible roles to easily and periodically roll those passwords.

Integrate ‚pass‘ into OS X

There are already several plugins and extensions to intergrate the ‚pass‘ password store into other Programs like Firefox and Android.

A prompt for the password you want

I added support for OS X by writing a small AppleScript which can be found here:

A notification with countdown

Casting between Qt and OpenCV primitives

opencv_qtAs a follow-up to the previous post, I’d like to present some code which I think might be helpful for other Qt / OpenCV projects as well.

This code was written for Pastie. Pastie is a piece of software I wrote as part my image processing seminar. It makes use of the well known libraries:

  • Qt for the graphical user interface
  • OpenCV for image processing and computer vision

I wrote a C++ header file to facilitate the co-operation of those two libraries. This file enables the conversion / casting of OpenCV and Qt types e.g.:

#include <QImage>
#include <cv/core.hpp>

QImage qimg("filename.png");
cv::Mat cvimg = toCv(qimg);

The source code is available at GitHub.

The following conversions are supported:

QImage cv::Mat
QTransform cv::Mat
QPoint cv::Point2i
QPointF cv::Point2f
QRect cv::Rect2i
QRectF cv::Rect2f
QSize cv::Size

You can find some examples in the real code here and here.


Ich sitze im Zug nach Hause. Komme von der letzten Vorlesung des 2. Semesters: Informatik. Eigentlich bin ich auf dem Weg in die Semester-„Ferien“, ständen da nicht für den nächsten Monat noch 4 Klausuren in meinem Kalender 😉

Informatik, Grundlagen des Digitalrechners. Klingt eigentlich recht trocken. Trotzdem ist es klar mein Favorit unter den Fächern dieses Semesters.
Als Ergänzung zur Vorlesung richtete unser Professor einen kleinen Wettbewerb aus.
Mein Beitrag zum Students Englightment Award ist ein Compiler Frontend für den GNU Compiler der Atmel AVRs.

Teil der Vorlesung war die Einführung des Mikrocontrollers ATMega8 von Atmel und dessen Programmierung mit Assembler. Dabei lernten wir zuerst die Schaltungstechnischen Grundlagen und die Minimierung von Schaltnetzen. Anschließend sind wir auf den Aufbau der Zentralen Recheneinheit eingegangen (Steuerwerk, ALU etc..).

transcode kompiliert/assembliert ANSI C und Assembler in Maschinencode und umgekehrt. Dabei wird mit Hilfe von Debugging Informationen ein Bezug zwischen Zeilen im C-Code und den Mnemonics hergestellt. Durch Auswählen von Zeilen werden Bezüge direkt durch Hervorhebungen dargestellt. Für die Darstellung des Maschinencodes lässt sich zwischen binär, dezimal & hexadezimaler Form wählen.

transcode weiterlesen

git SCM

Ich gehe mit der Zeit und wechsele mein Source Code Management System.

Obwohl SVN weiterhin entwickelt und gepflegt wird wurde es von git überholt. Das Design, die Idee, der dezentrale Ansatz von git ist SVN weit überlegen.

Nun verwalte ich meinen Quelltext mit git. Alle Projekte und Code-Schnipsel befinden sich in meinen git-Repositories:

Ich habe alle Verweise in meinem Blog nun auf das neue git-Repository aktualisiert.

Jedem der sich auch mit dem Thema beschäftigen möchte, empfehle ich diese Lektüre:


(bei Interesse bitte bei mir melden 😉

deviantART Wallpapers

326px-DeviantART_Logo.svgGelangweilt von meinem alten Wallpaper habe ich ein kleines Bash-Skript geschrieben, welches mir die aktuell populärsten Fotografien von herunterlädt und automatisch als Wallpaper einsetzt. Per Cron-Job wird es alle 10 Minuten gestartet. So bekomme ich regelmäßig ein neues Wallpaper 🙂 Das Skript benötigt die Programme: wget, xargs, grep, tail, head und gconftool-2 welche bei einer normalen Linuxdistribution alle enthalten sein sollten. Das Ersetzten des Wallpaper funktioniert hier nur mit einem Gnome Desktop. Solltest du eine andere Desktopumgebung benutzten, musst du die letzte Zeile für dein System anpassen. deviantART Wallpapers weiterlesen