2009-11-14
2009-10-29
Céu live in Frankfurt - Música Popular Brasileira in Hessen
Soeben noch live vor Ort gewesen, jetzt schon gebloggt:CéU war da! :) In der Brotfabrik (wo sonst?), zur Freude zahlreicher Gäste...
Musikalische Kostprobe:
Gute Nacht und bis zum nächsten Mal!
2009-09-17
SSH-Login ohne Passworteingabe via Publickey-Authentifizierung und angepasstem Servicemenü in Konqueror und Dolphin
Wenn man mit Skripten arbeitet und ein wenig diese zwecks Automatisierung häufiger Arbeitsschritte entweder per Cron-Job regelmäßig ausführt oder aber diese in anderen Bereichen verwenden/einbauen will (wie ich weiter unten zeigen werde...), stößt man recht häufig auf das Problem interaktiver Eingaben. Ein Skript arbeitet ja bekanntlich beliebig viele Arbeitsschritte ab. Wird es jedoch dadurch unterbrochen, dass der User bspw. Zusatzdaten (in aller Regel Passwörter u.ä.) eingeben muss kann ich das Skript eigentlich gar nicht richtig nutzen. Der Witz ist ja das das Skript AUTOMATISCH läuft - also ohne das jemand davor sitzt und irgendwas tippt...
Aber nun zum konkreten Problem bzw. meiner Lösungsidee.
In unserer Wohlstandsgesellschaft hat ja so gut wie jeder einen Rechner. Nicht selten auch zwei.
Arbeitet man nun auf Rechner A und möchte etwa eine Datei auf Rechner B kopieren tippt man auf der Konsole nen Befehl, danach das Passwort und fertig. Das nervt aber da zumindest ich nicht permanent auf der Konsole arbeite und dies auch nicht jedem zumutbar ist.
KDE liefert dankenswerterweise für den Konqueror eine entsprechende grafische Implementierung ("fish"). Aber auch da muss man erst Fenster aufmachen, URL tippen, Passwort... Ebenfalls nervig!
Die Lösung schien mir ganz einfach: Kleines Servicemenü basteln und dann mittels rechten Mausklick einfach die Datei(en) abschicken. Wollte ja eh schon immer mal mich bissl mit denServicemenüs vertraut machen nachdem ich eher zufällig auf diesen interessanten Blogeintrag gestoßen war.
Bevor es aber nun mit dem Servicemenü losgehen kann musste erstmal das Problem gelöst werden, das der Konsolenbefehl scp (fürs kopieren via ssh) nen Passwortprompt auslöst. Einzige Lösung dies zu umgehen (und damit auch gleichzeitig die Voraussetzung zum scripten zu schaffen...) ist die sogenannte Publickey-Authentifizierung. Das ist sowohl theoretisch wie praktisch recht simpel:
Theoretisch - User A an Rechner A erzeugt ein Schlüsselpaar und gibt den öffentlichen Schlüssel dem Rechner B. Jetzt können anstatt einer Passwortabfrage die Schlüssel zur Authentifizierung herangezogen werden.
Praktisch - sieht es dann in etwa so aus (s.a. http://www.linupedia.org/opensuse/Einrichten_von_public_keys_mit_ssh#Publickey-Authentifizierung)
User A auf Rechner A:
Das <user_b> bzw. <rechner_b> mit den entsprechnden Werten ersetzt werden muss versteht sich von selbst.
Nun geht man am besten mal in Ruhe zu Rechner B. Zum einen guckt man mal fix ob die authorized_keys auch wirklich nur Lese/Schreibrechte beim User besitzt. Wenn nicht einfach setzen:
Glücklich - das nun endlich geschafft zu haben widmen wir uns dem basteln des Servicemenüs. Um grob zu wissen worum es geht bzw. wie man sowas macht schaut bei der KDE-Website vorbei und zieht sich den Artikel von keinem geringeren als Aaron Seigo rein: http://developer.kde.org/documentation/tutorials/dot/servicemenus.html
Danach kann man auch ohne Probleme mein Serviemenu verstehen dessen Code ich hier exemplarisch für homeshareservicemenu_files.desktop poste (Bei homeshareservicemenu_folder.desktop ist lediglich der Link zum Skript anders).
Die *.desktop Dateien gehören bei KDE 3 nach /usr/share/apps/konqueror/servicemenus und bei KDE 4 nach /usr/share/kde4/services/ServiceMenus
Das einzige was nun noch fehlt sind die Skripte. Leider sind diese bei KDE3 und KDE4 etwas verschieden, da die Nutzung von dcop durch die dbus ersetzt werden muss.
Hier erstmal beide Skripte (Verbesserungen immer willkommen) für KDE3:
1. SecureFileCopy.sh (KDE3)

2. SecureFolderCopy.sh (KDE3)

Und nun noch für KDE4:
1. SecureFileCopy.sh (KDE4)
2. SecureFolderCopy.sh (KDE4)
Hoffe dieses "Howto"/"Tutorial" hat dem einen oder anderen geholfen. Für Feedback bin ich wie immer dankbar (etwa die Implementierung von "copy multiple (=selected) files" o.ä,)!
Aber nun zum konkreten Problem bzw. meiner Lösungsidee.
In unserer Wohlstandsgesellschaft hat ja so gut wie jeder einen Rechner. Nicht selten auch zwei.
Arbeitet man nun auf Rechner A und möchte etwa eine Datei auf Rechner B kopieren tippt man auf der Konsole nen Befehl, danach das Passwort und fertig. Das nervt aber da zumindest ich nicht permanent auf der Konsole arbeite und dies auch nicht jedem zumutbar ist.
KDE liefert dankenswerterweise für den Konqueror eine entsprechende grafische Implementierung ("fish"). Aber auch da muss man erst Fenster aufmachen, URL tippen, Passwort... Ebenfalls nervig!
Die Lösung schien mir ganz einfach: Kleines Servicemenü basteln und dann mittels rechten Mausklick einfach die Datei(en) abschicken. Wollte ja eh schon immer mal mich bissl mit denServicemenüs vertraut machen nachdem ich eher zufällig auf diesen interessanten Blogeintrag gestoßen war.
Bevor es aber nun mit dem Servicemenü losgehen kann musste erstmal das Problem gelöst werden, das der Konsolenbefehl scp (fürs kopieren via ssh) nen Passwortprompt auslöst. Einzige Lösung dies zu umgehen (und damit auch gleichzeitig die Voraussetzung zum scripten zu schaffen...) ist die sogenannte Publickey-Authentifizierung. Das ist sowohl theoretisch wie praktisch recht simpel:
Theoretisch - User A an Rechner A erzeugt ein Schlüsselpaar und gibt den öffentlichen Schlüssel dem Rechner B. Jetzt können anstatt einer Passwortabfrage die Schlüssel zur Authentifizierung herangezogen werden.
Praktisch - sieht es dann in etwa so aus (s.a. http://www.linupedia.org/opensuse/Einrichten_von_public_keys_mit_ssh#Publickey-Authentifizierung)
User A auf Rechner A:
cd ~/.sshJetzt solange ENTER drücken bis man wieder beim Eingabeprompt landet. Mittels ls -l kann man nun fix prüfen das auch tatsächlich die Schlüssel erzeugt wurden sind. Es gibt jetzt eine id_rsa (enthält den privaten Schlüssel) und eine id_rsa.pub (enthält den öffentlichen Schlüssel). Letztere muss nun noch auf Rechner B entsprechend platziert werden, etwa so:
ssh-keygen -b 2048 -t rsa
scp ~/.ssh/id_rsa.pub <user_b>@<rechner_b>:/home/<user_b>/.ssh/authorized_keys/
Das <user_b> bzw. <rechner_b> mit den entsprechnden Werten ersetzt werden muss versteht sich von selbst.
Nun geht man am besten mal in Ruhe zu Rechner B. Zum einen guckt man mal fix ob die authorized_keys auch wirklich nur Lese/Schreibrechte beim User besitzt. Wenn nicht einfach setzen:
chmod 600 ~/.ssh/authorized_keysAusserdem muss man als root nochmal gucken ob auch die Anmeldung via Publickey überhaupt in der Konfiguration erlaubt ist. Dazu dürfen folgende Zeilen nicht auskommentiert in der /etc/ssh/sshd_config stehen:
RSAAuthentication yesNun sollte man sich User A von Rechner A als User B auf Rechner B ohne Passworteingabe anmelden können bzw. Dateien ohne lästige Passwortabfrage kopieren dürfen. Wir checken das fix via:
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
ssh <user_b>@<rechner_b>Landen wir nun ohne Passworteingabe auf Rechner B ist der schwierigste Teil schon geschafft.
Glücklich - das nun endlich geschafft zu haben widmen wir uns dem basteln des Servicemenüs. Um grob zu wissen worum es geht bzw. wie man sowas macht schaut bei der KDE-Website vorbei und zieht sich den Artikel von keinem geringeren als Aaron Seigo rein: http://developer.kde.org/documentation/tutorials/dot/servicemenus.html
Danach kann man auch ohne Probleme mein Serviemenu verstehen dessen Code ich hier exemplarisch für homeshareservicemenu_files.desktop poste (Bei homeshareservicemenu_folder.desktop ist lediglich der Link zum Skript anders).
[Desktop Entry]
Encoding=UTF-8
X-KDE-Submenu=An anderen PC senden
ServiceTypes=all/allfiles
Actions=MoveToHomeShare1;MoveToHomeShare2;
ExcludeServiceTypes=kdedevice/*
[Desktop Action MoveToHomeShare1]
Name=openSuse10.3@Samsung (~/HomeShare)
Exec='/usr/share/apps/konqueror/servicemenus/scripts/SecureFileCopy.sh' %u 'MyUser1@111.222.333.1:/home/MyUser1/HomeShare'
Icon=folder_html
[Desktop Action MoveToHomeShare2]
Name=openSuse11.1@Fujitsu (~/HomeShare)
Exec='/usr/share/apps/konqueror/servicemenus/scripts/SecureFileCopy.sh' %u 'MyUser2@111.222.333.2:/home/MyUser2/HomeShare'
Icon=folder_html
Die *.desktop Dateien gehören bei KDE 3 nach /usr/share/apps/konqueror/servicemenus und bei KDE 4 nach /usr/share/kde4/services/ServiceMenus
Das einzige was nun noch fehlt sind die Skripte. Leider sind diese bei KDE3 und KDE4 etwas verschieden, da die Nutzung von dcop durch die dbus ersetzt werden muss.
Hier erstmal beide Skripte (Verbesserungen immer willkommen) für KDE3:
1. SecureFileCopy.sh (KDE3)

#! /bin/bash
# the file you've selected (%u)
FILE=${1}
# user and path of the remote pc (second parameter)
TO=${2}
dcopRef=`kdialog --title "Kopiervorgang" --progressbar "Kopiervorgang gestartet! Datei wird jetzt kopiert. Je nach Größe kann sowas dauern..." 1`
dcop $dcopRef showCancelButton true
sleep 1
if [ `dcop $dcopRef wasCancelled` == "false" ]
then
dcop $dcopRef setLabel "Kopiere ${FILE} ==> $TO"
inc=$((`dcop $dcopRef progress` + 1))
sleep 0.5
scp "${FILE}" $TO
dcop $dcopRef setProgress $inc
dcop $dcopRef setLabel "${FILE} erfolgreich kopiert"
dcop $dcopRef showCancelButton true
sleep 0.75
fi
dcop $dcopRef close
2. SecureFolderCopy.sh (KDE3)

#! /bin/bash
# the folder you've selected (%u)
FOLDER=${1}
# user and path of the remote pc (second parameter)
TO=${2}
# foldername (to create it remote)
FOLDERNAME=${FOLDER##*/}
# count files
CNT=`ls -l $FOLDER | grep ^- | awk '{print $9}' | wc -l`
dcopRef=`kdialog --title "Kopiervorgang" --progressbar "Kopiervorgang gestartet! Der Ordner wird jetzt kopiert. Je nach Größe kann sowas dauern..." $CNT`
dcop $dcopRef showCancelButton true
sleep 1
ssh MyUser2@111.222.333.2 "mkdir -p /home/MyUser2/HomeShare/$FOLDERNAME"
find $FOLDER -type f -print0 | while read -d $'\0' file
do
if [ `dcop $dcopRef wasCancelled` == "false" ]
then
dcop $dcopRef setLabel "Kopiere $file ==> $TO"
dcop $dcopRef showCancelButton true
inc=$((`dcop $dcopRef progress` + 1))
sleep 0.5
scp "$file" $TO/$FOLDERNAME
dcop $dcopRef setProgress $inc
dcop $dcopRef setLabel "$file erfolgreich kopiert"
dcop $dcopRef showCancelButton true
sleep 0.75
else
kdialog --title "Abbruch" --sorry "Vorgang abgebrochen!"
break
fi
done
dcop $dcopRef close
Und nun noch für KDE4:
1. SecureFileCopy.sh (KDE4)

#! /bin/bash
# the file you've selected (%u)
FILE=${1}
# user and path of the remote pc (second parameter)
TO=${2}
dbusRef=$(kdialog --title "Kopiervorgang" --progressbar "Kopiervorgang gestartet! Datei wird jetzt kopiert. Je nach Größe kann sowas dauern..." 1)
qdbus $dbusRef org.kde.kdialog.ProgressDialog.showCancelButton true
sleep 1
if [ $(qdbus $dbusRef org.kde.kdialog.ProgressDialog.wasCancelled) == "false" ]
then
qdbus $dbusRef org.kde.kdialog.ProgressDialog.setLabelText "Kopiere ${FILE} ==> $TO"
inc=$(($(qdbus $dbusRef org.kde.kdialog.ProgressDialog value) + 1))
sleep 0.5
scp "${FILE}" $TO
qdbus $dbusRef Set org.kde.kdialog.ProgressDialog value $inc
qdbus $dbusRef org.kde.kdialog.ProgressDialog.setLabelText "${FILE} erfolgreich kopiert"
qdbus $dbusRef org.kde.kdialog.ProgressDialog.showCancelButton true
sleep 0.75
fi
qdbus $dbusRef close
2. SecureFolderCopy.sh (KDE4)

#!/bin/bash
# the folder you've selected (%u)
FOLDER=${1}
# user and path of the remote pc (second parameter)
TO=${2}
# foldername (to create it remote)
FOLDERNAME=${FOLDER##*/}
# count files
CNT=$(ls -l $FOLDER | grep ^- | awk '{print $9}' | wc -l)
dbusRef=$(kdialog --title "Kopiervorgang" --progressbar "Kopiervorgang gestartet! Der Ordner wird jetzt kopiert. Je nach Größe kann sowas dauern..." $CNT)
qdbus $dbusRef org.kde.kdialog.ProgressDialog.showCancelButton true
sleep 1
ssh MyUser2@111.222.333.2 "mkdir -p /home/MyUser2/HomeShare/$FOLDERNAME"
inc=0
find $FOLDER -type f -print0 | while read -d $'\0' file
do
if [ $(qdbus $dbusRef org.kde.kdialog.ProgressDialog.wasCancelled) == "false" ]
then
qdbus $dbusRef org.kde.kdialog.ProgressDialog.setLabelText "Kopiere $file ==> $TO"
qdbus $dbusRef org.kde.kdialog.ProgressDialog.showCancelButton true
inc=$(expr $inc + 1)
sleep 0.5
scp "${file}" $TO/$FOLDERNAME
qdbus $dbusRef Set org.kde.kdialog.ProgressDialog value $inc
qdbus $dbusRef org.kde.kdialog.ProgressDialog.setLabelText "${file} erfolgreich kopiert"
qdbus $dbusRef org.kde.kdialog.ProgressDialog.showCancelButton true
sleep 1.75
else
kdialog --title "Abbruch" --sorry "Vorgang abgebrochen!"
break
fi
done
qdbus $dbusRef close
Hoffe dieses "Howto"/"Tutorial" hat dem einen oder anderen geholfen. Für Feedback bin ich wie immer dankbar (etwa die Implementierung von "copy multiple (=selected) files" o.ä,)!
2009-09-09
neue Wikipedia-Funktion - Buch erstellen
Also gut, so neu wahrscheinlich nicht mehr, aber bekanntlich ist ja alles relativ...
Und zwar wollte ich mich mal informieren über den Herrn von und zu Liszt, weshalb ich Wikipedia zu Rate zog. Da der Artikel aber so ewig lang war/ist und das lange Lesen am Bildschirm meine Augen ziemlich anstrengt, wollte ich einfach die Druckversion nehmen, aber diese sah weder schön aus noch wurden merklich Seiten eingespart. Es war also Zeit einmal die neue Funktionalität des Buch erstellen auszuprobieren...
War mir schon seit einiger Zeit aufgefallen, hatte dem aber nie große Bedeutung geschenkt bzw. dachte das ich den richtigen Anwendungszweck noch finden müsste. Nun - den schien ich ja nun zu haben.
Lange Rede kurzer Sinn: Einfach auf "Seite zum Buch hinzufügen" klicken, dann "Buch zeigen" und anschliessend "Herunterladen". Jetzt muss man ein wenig warten bis das PDF erstellt ist und nochmal "runterladen" klickern, danach dann einfach ausdrucken und zufrieden sein! :)
Zu guter Letzt noch der Link zu den Hilfeseiten: http://de.wikipedia.org/wiki/Hilfe:Buchfunktion
Und zwar wollte ich mich mal informieren über den Herrn von und zu Liszt, weshalb ich Wikipedia zu Rate zog. Da der Artikel aber so ewig lang war/ist und das lange Lesen am Bildschirm meine Augen ziemlich anstrengt, wollte ich einfach die Druckversion nehmen, aber diese sah weder schön aus noch wurden merklich Seiten eingespart. Es war also Zeit einmal die neue Funktionalität des Buch erstellen auszuprobieren...
War mir schon seit einiger Zeit aufgefallen, hatte dem aber nie große Bedeutung geschenkt bzw. dachte das ich den richtigen Anwendungszweck noch finden müsste. Nun - den schien ich ja nun zu haben.
Lange Rede kurzer Sinn: Einfach auf "Seite zum Buch hinzufügen" klicken, dann "Buch zeigen" und anschliessend "Herunterladen". Jetzt muss man ein wenig warten bis das PDF erstellt ist und nochmal "runterladen" klickern, danach dann einfach ausdrucken und zufrieden sein! :)
Zu guter Letzt noch der Link zu den Hilfeseiten: http://de.wikipedia.org/wiki/Hilfe:Buchfunktion
Hörtipp: Prof. Kliq
Ursprünglich via RadioTux auf den Professor Kliq aufmerksam geworden, hör ich das Album nun privat auch auf meinem Rechner regelmäßig. Legal versteht sich! Jamendo machts möglich...













