2014-01-07 6 views
7

Ich hänge ein Python-Skript an, das mit Cron (unter Ubuntu 12.04) läuft - einfach genug. Außer für die Authentifizierung.Python, Keyring und Cron

Das Cron-Skript greift auf einige Dienste zu und muss Anmeldeinformationen bereitstellen. Das Speichern dieser Anmeldeinformationen mit keyring ist so einfach wie möglich - außer, wenn der Cron-Job tatsächlich ausgeführt wird, können die Anmeldeinformationen nicht abgerufen werden. Das Skript schlägt jedes Mal fehl.

So viel wie ich sagen kann, hat dies etwas mit der Umwelt Cron läuft. Ich habe eine Reihe von Posts aufgespürt, die darauf hindeuten, dass der Schlüssel das Skript DBUS_SESSION_BUS_ADDRESS exportieren. Alles gut und gut - ich kann diese Adresse bekommen und exportieren, und es ziemlich leicht von Python beziehen - aber es erzeugt einfach einen neuen Fehler: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11. Einstellung DISPLAY=:0 hat keine Wirkung.

So. Hat jemand herausgefunden, wie man gnome-keyring von Python, das auf einem Cron-Job unter Ubuntu 12.04 läuft, freischaltet?

Antwort

2

Es tut mir leid zu sagen, dass ich die Antwort nicht habe, aber ich denke, ich weiß ein bisschen was passiert, basierend auf einem Problem, mit dem ich es zu tun habe. Ich versuche, eine Webanwendung und ein Cron-Skript dazu zu bringen, einen Code zu verwenden, der ein OAUTH-Token für die API von Google mithilfe eines Python-Schlüsselbunds in einem Schlüsselbund speichert.

Egal was ich mache, etwas über die Umgebung, in der die Web-App und der Cron-Job ausgeführt werden, erfordert manuelle Eingriffe, um den Schlüsselring zu entsperren. Das ist ziemlich unmöglich, wenn der Code in einer nicht interaktiven Sitzung ausgeführt wird. Das Problem besteht weiterhin, wenn ich einige Tricks versuche, die in meinen Nachforschungen vorgeschlagen wurden, wie dem Prozesseigner ein Login-Passwort zu geben, das dem Schlüsselring-Passwort entspricht, und das Schlüsselring-Passwort auf einen leeren String zu setzen.

Ich werde fast garantieren, dass Ihr Fehler von Gnome-Keyring stammt, der versucht, eine interaktive (grafische) Eingabeaufforderung und Bombardierung zu starten, weil Sie das nicht von Cron aus tun können.

+0

Ja! Dies stimmt mit meinen Forschungen überein. Ich habe * einige * Hinweise aus dem Internet erhalten, dass es möglich ist, Dinge so zu konfigurieren, dass sie die (# $%! Graphical) interaktive Eingabe überspringen, aber ich habe es noch nicht erfolgreich geschafft. Am besten, ich habe eine gut geschützte, lokale Konfigurationsdatei für mein Skript. Unbefriedigend, um es milde auszudrücken. – Gastove

+0

Wir haben nie eine Lösung für http://elections.chicagotribune.com gefunden, indem wir unsere Tarbell (http://github.com/newsapps/flask-tarbell) Bibliothek verwendet haben, die oauth + keyring verwendet, um auf die Google Drive API zuzugreifen, also musste ich Mach ein "armes mans cron" aus einer interaktiven Hülle. –

+0

Unser derzeitiger Gedanke ist, dass wir Teile unserer Software neu schreiben werden, um die Anmeldeinformationen von Umgebungsvariablen/Befehlszeilenflags zusätzlich zum Schlüsselring zu erhalten.Es ist eine Herabstufung der Sicherheit, aber in der Umgebung, in der wir arbeiten, wäre es sicher genug - wir würden in Schwierigkeiten geraten, wenn jemand auf unsere Crontab zugreifen könnte, selbst wenn die Anmeldeinformationen nicht im Klartext gespeichert wären. –

0

keychain Install:

sudo apt-get install keychain 

Legen Sie es in Ihrem $ HOME/.bash_profile:

if [ -z "$SSH_AUTH_SOCK" ] ; then 
    eval `ssh-agent -s` 
fi 
eval `keychain --eval id_rsa` 

Es Ihr Passwort bei der ersten Anmeldung bitten wird, und speichert Ihre Anmeldeinformationen bis zum nächsten Neustart.

es am Anfang Ihres Cron-Skript einfügen:

source $HOME/.keychain/${HOSTNAME}-sh 

Wenn Sie andere Sprache verwenden, wie Python, es von einem Wrapper-Skript aufrufen.

Es funktioniert für mich, ich hoffe es hilft dir auch.