Archiv September 2013

Freitag, 27. September 2013

Mit PHPs SimpleXML auf XML-Namespaces zugreifen

Das klappt tatsächlich, auch wenn der Code damit nicht mehr so simpel wird.

XML

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:georss="http://www.georss.org/georss">
<channel>
<title>foursquare checkin history for Mario A.</title>
<description>foursquare checkin history for Mario A.</description>
<link>https://foursquare.com/emeidi</link>
<atom:link type="application/rss+xml" rel="self" href="https://feeds.foursquare.com/history/.rss" />
<item>
<title>Migros</title>
<description>@ Migros</description>
<link>https://foursquare.com/emeidi/checkin/</link>
<pubDate>Fri, 27 Sep 13 17:22:13 +0000</pubDate>
<guid isPermaLink="false"></guid>
<georss:point>46.9490403456011 7.440057740911321</georss:point>
</item>
<item>
<title>Bahnhof Bern</title>
<description>@ Bahnhof Bern</description>
<link>https://foursquare.com/emeidi/checkin/</link>
<pubDate>Fri, 27 Sep 13 17:21:57 +0000</pubDate>
<guid isPermaLink="false"></guid>
<georss:point>46.94901360281286 7.440102388543716</georss:point>
</item>
<item>
...

PHP

...
foreach($xml->channel->item as $item) {
    $coords = $item->children('http://www.georss.org/georss')->point;
}
...

Via: SimpleXML and namespaces

Tags: , ,
Labels: Programmierung

Keine Kommentare | neuen Kommentar verfassen

Mittwoch, 25. September 2013

Das Mac OS X Terminal mit dem aktuellen Finder-Pfad öffnen

Wer sich fliessend zwischen den zwei Welten — dem OS X GUI und dem Unix-Terminal — bewegt, wird die Minimalapplikation Go2Shell äusserst nützlich finden. Nachdem man sie als Button in die Finder Button-Leiste gezogen hat, kann man auf Knopfdruck das Mac OS X Terminal (Unix-Shell) öffnen und findet sich im selben Ordner wieder, welchen man gerade im Finder sieht.

Die umgekehrte Variante sei hier selbstverständlich auch noch am Rande erwähnt:

$ open .

öffnet ein Finder-Fenster mit dem Verzeichnis, in welchem sich der Shell-Benutzer gerade befindet.

Tags: , , , , , ,
Labels: Apple

Keine Kommentare | neuen Kommentar verfassen

Mittwoch, 18. September 2013

Den Raspberry Pi mit rsync über SSH auf die Synology DiskStation sichern

Als Gedankenstütze nachfolgend einige Lösungen für Probleme, die sich mir in den Weg stellten:

Mac OS X

$ ssh-keygen -t rsa -b 2048 -f id_rsa_dashboard_vault

Die Aufforderung, ein Passwort für den Private Key zu generieren, bestätigt man mit ENTER — der Private Key wird so nicht zusätzlich mit einem Passwort geschützt, weil dies den automatisierten Login von Raspberry Pi auf die DiskStation verhindern würde.

Der Befehl erstellt zwei Dateien:

  • id_rsa_dashboard_vault
  • id_rsa_dashboard_vault.pub

Synology DiskStation

Als erstes richtet man sich über die Web-Oberfläche einen normalen Benutzer dashboard ein, in dessen Home-Verzeichnis die Backup-Daten geschrieben werden.

Hierzu müssen dem Benutzer Schreibrechte auf /homes gegeben werden. Ansonsten sieht man sich beim Starten des Backup-Scripts (s. unten) mit folgender Fehlermeldung gegenüber:

ERROR: module is read only

Quelle: Rsync over ssh: “ERROR: module is read only” suddenly appeared

Wichtig ist weiter, dass der SSH-Zugang über die Web-Oberfläche aktiviert wurde.

/etc/passwd

Dem neu erstellten Benutzer müssen wir nun eine gültige Login-Shell zuweisen:

...
dashboard:x:1029:100::/var/services/homes/dashboard:/bin/ash

Erfasst man hier ein nicht existierendes Login-Shell, kriegt man beim Debugging des publickey SSH-Logins folgende komische Infos ans Gesicht geworfen:

...
Authentication succeeded
...
Permission denied
...

Um sicher zu gehen, dass die Login-Shell richtig konfiguriert ist, macht man als auf der DiskStation eingeloggter User root folgendes:

# su dashboard

Wechselt man in ein neues Shell, ist /etc/passwd korrekt konfiguriert.

/var/services/homes/dashboard/.ssh/authorized_keys

In dieser Datei legen wir den Public Key ab (id_rsa_dashboard_vault.pub).

/etc/ssh/sshd_config

Wahrscheinlich müsste man hier gar nichts anpassen, beim Debugging habe ich es dann doch getan (wohl unnötigerweise):

$ cat sshd_config | grep -v "^#" | sort
AllowTcpForwarding no
AuthorizedKeysFile	.ssh/authorized_keys
ChallengeResponseAuthentication no
ChrootDirectory none
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_rsa_key
LogLevel INFO
Match User root
    AllowTcpForwarding yes
Protocol 2
PubkeyAuthentication yes
Subsystem       sftp    internal-sftp -f DAEMON -u 000
SyslogFacility AUTH
UseDNS no
UsePAM yes

Raspberry Pi

/root/.ssh/config

Host vault
   Hostname 10.0.44.44
   User dashboard
   IdentityFile ~/.ssh/id_rsa_dashboard_vault

In der Datei ~/.ssh/id_rsa_dashboard_vault legt man den Private Key ab.

Login überprüfen

Dies sollte nun ohne Eingabe eines Passwortes möglich sein:

$ ssh vault

Bei einer Fehlermeldung helfen die Optionen -v, -vv und -vvv weiter:

$ ssh -v vault

/usr/local/bin/backup.sh

Folgendes Script sichert / (root) des Raspberry Pis auf den Host vault in den Pfad /volume1/homes/dashboard/backups/. Auf dem Raspberry Pi nicht mehr vorhandene Dateien werden auf der DiskStation gelöscht.

#!/bin/sh

RSYNC=`which rsync`

if [ ! -e "$RSYNC" ]
then
	echo "rsync binary not found: '$RSYNC'"
	exit 1
fi

TODAY=`date +"%F_%T"`
SNAPSHOTFILE="/var/log/rsync/$TODAY.snapshot.txt"
#touch "$SNAPSHOTFILE"
echo "$TODAY" > "$SNAPSHOTFILE"

if [ ! -f "$SNAPSHOTFILE" ]
then
	echo "Could not create snapshotfile '$SNAPSHOTFILE'"
else
	echo "Snapshotfile created at:"
	ls -l "$SNAPSHOTFILE"
fi

LOGFILE="/var/log/rsync/$TODAY.log.txt"
EXCLUDEFILE="/usr/local/bin/backup-exclude.txt"

SOURCE="/"
DEST="vault:/volume1/homes/dashboard/backups/"

echo "Running rsync ..."
$RSYNC -avz --log-file="$LOGFILE" --exclude-from="$EXCLUDEFILE" --delete -e ssh "$SOURCE" "$DEST" 
echo "Backup complete."

exit 0

/usr/local/bin/backup-exclude.txt

proc/*
sys/*
dev/*
tmp/*
run/*
mnt/*

Quelle: Can a Raspberry Pi be used to create a backup of itself?

/etc/crontab

...
4 0 * * *	root	/usr/local/bin/backup.sh

Hiermit wird das Backup-Script täglich um 4 Uhr morgens ausgeführt.

Links

Tags: , , , ,
Labels: Linux

1 Kommentar | neuen Kommentar verfassen

Mittwoch, 18. September 2013

Hostpoint: Immer mal wieder zickt die Datenbank …

Irgendwann ab den frühen 2000ern habe ich alle meine Web-Projekte über das Shared Hosting von Hostpoint AG im Internet bereitgestellt, und dort sind sie in den meisten Fällen noch heute.

Spätestens seit ich diese mit eMeidi.smt laufenden Web-Sites jede Minute mit Pingdom überwache, realisiere ich, wie instabil Hostpoints Hosting ist. Verglichen mit einem an der Uni Bern gehosteten virtualisierten Root-Server (Debian und VMware ESX) und eMeidi.com, welches beim Hoster meines Vertrauens Cyon GmbH in Basel läuft, haben wir es bei Hostpoint mit einem hostingmässigen Drittwelt-Land zu tun.

Dank den vom eMeidi.smt im Dateisystem abgelegten Fehlermeldungen lässt sich rückwirkend jeweils rasch eruieren, wo denn das Problem des Pingdom-Alarms lag. Als Beispiel sei hier der Ausfall vom 13. September 2013 zwischen 8:47 und 9:23 erwähnt:

#2003: Can't connect to MySQL server on 'sekneueg.mysql.db.internal' (13) in /home/sekneueg/public_html/irgendwo/mysql.class.php:240 for URI </> with referer <unknown>

Tjach, dumm gelaufen, ne? In den letzten 30 Tagen betrug die Uptime für diese spezifische Web-Site nur 99.68%, was Ausfällen von insgesamt 2 Stunden und 21 Minuten entspricht. Die längsten Ausfälle fanden am 26. August (57 Minuten), 13. September (36 Minuten) und am 22. August (11 Minuten) statt. Erbärmlich, zumal es sich dabei nicht etwa um Wartungsarbeiten mitten in der Nacht gehandelt hat, sondern um Ausfälle während Bürozeiten.

Der Fall ist klar: Die Profis von heute hosten bei der Cyon GmbH. Da hilft es auch nichts, wenn der Ausfall-anfällige Konkurrenzhoster aus Rapperswil-Jona den bloggenden Tom anheuert – dessen Lohn (sorry, Tom!) würde man lieber in bessere und stabilere Hard- und Software stecken als unnütze Gutfühl-PR.

Tags: , ,
Labels: Web

3 Kommentare | neuen Kommentar verfassen

Freitag, 13. September 2013

RAMShop: Hände weg von diesem Anbieter

Nachfolgend ein Mail, das ich an diesen auf Ricardo.ch präsenten Versandhändlers auf Grund des Kaufs eines Kabels vom Typ Samsung APCBS10UBE gesendet habe:

Guten Tag

Es freut mich, von jemanden Antwort zu erhalten der sich in ganzen deutschen Sätzen ausdrücken kann.

On 10.09.2013 13:53, ricardo.ch-Dept., RAMshop wrote:
> Ich musste ebenfalls
> feststellen, dass Ihre Angaben korrekt sind!

Sag‘ ich doch schon lange …

> Dies ist natürlich ein Fehler!

Schön, dass Sie zum selben Schluss kommen.

> Ich habe noch ein Kabel mit der korrekten Angabe gefunden!
> Ich werde Ihnen noch heute dieses Kabel mit A-Post zusenden!

Das Kabel ist gestern angekommen. Es handelt sich nun um das korrekte Modell, welches tadellos funktioniert.

Die Ware kam in einem Plastic-Umschlag der Post an. Ein Hinweiskleber teilte mir mit, dass der Brief bei der Verarbeitung kaputt gegangen ist. Bereits die erste Sendung kam in diesem Zustand an, weshalb ich mich schon fragen muss, ob sie effektiv keine geeignete Versandmaterialien haben (bspw. gepolsterter Umschlag)? Aber wahrscheinlich ist das ein Resultat der von Ihnen betriebenen Gewinnmaximierung.

> Darf ich Sie bitten, uns das falsche Kabel wieder zurück zusenden?
> Verwenden Sie dafür bitte unsere Rückversandmarke
> welche Sie im Anhang an dieses Mail finden.

Das Kabel ist unterwegs zurück an Sie – in einem geeigneten Umschlag, welcher nicht kaputt gehen kann.

Ein schaler Nachgeschmack bleibt: Wieso versenden Sie Waren an Kunden mit 1 Franken-Porto, verlangen auf Ricardo aber 2.50 CHF Versandgebühren und senden mir für die Rücksendung des Kabels eine Rückversandmarke im Wert von über 3 Franken?

Gruss
Mario Aeby

Tags: , , , ,
Labels: Shopping

20 Kommentare | neuen Kommentar verfassen

Mittwoch, 11. September 2013

Küchenuhr TFA 38.2021: Schnell kaputt

Im April 2013 haben wir uns ein digitale Küchenuhr von TFA gekauft. Obwohl ich das Produkt auf Galaxus ursprünglich als gut bewertet habe, ging die Plastic-Halterung am Rücken des Produkts nach wenigen Wochen kaputt. Die Uhr hat – mit dem Magneten am Backofen angeheftet – so zuviel Spiel, was bei der Betätigung der Tasten klar unhandlich ist.

Ansonsten überzeugt das Produkt: Grosses Display, grosse Buttons und einfachste Bedienung sind garantiert:

TFA 38.2021 elektronischer Timer mit Stoppuhr (Affiliate-Link)

Tags: , , , , ,
Labels: Shopping

Keine Kommentare | neuen Kommentar verfassen

Mittwoch, 11. September 2013

incase Sports Armband Pro: Unbrauchbar

Vor einiger Zeit habe ich mir bei einer Reise in die USA folgendes Accessoire gekauft, um mein iPhone 4S während Trainings im Fitness-Center und beim Jogging am Arm zu tragen und Musik zu hören:

Incase iPhone 5 Sportsarmband Pro, black (Affiliate-Link)

Das Armband verrichtete seinen Dienst im Grunde zufriedenstellend – bis zu dem Tag im Sommer, an welchem ich es auf unserem Balkon in die Sonne zum Trocknen hinlegte und es ein oder zwei Tage später erst wieder abholte. Seither ist die durchsichtige Plasticfolie an der Front gewellt, was die händische Bedienung des iPhones durch die Folie hindurch zu einem Geduldsspiel werden lässt:

incase Sports Armband Pro
image-5547

Von einem Sportarmband erwarte ich gerade in diesem Bereich eine deutlich bessere Materialwahl, als es incase an den Tag legt.

Tags: , , ,
Labels: Shopping

Keine Kommentare | neuen Kommentar verfassen

Mittwoch, 11. September 2013

Wieso Touch ID für iOS-Geräte wirklich revolutionär wird

Innerhalb weniger Monate durfte ich in diesem Jahr sowohl meinem Vater als auch meiner Mutter bei der Inbetriebnahme ihrer iPads (iPad 4 resp. iPad mini) helfen. Als ich die beiden dabei beobachtete, wie sie die ersten zaghaften Schritte auf den Geräten vollführten, fiel mir insbesondere folgende Punkte auf:

Himmelheiland, das Passwort des iTunes Accounts muss ja bei der Verwendung des iPads andauernd eingegeben werden!

Uns Vertretern der jungen Generation ist es anerzogen, sich für die Anmeldung an Dutzende Internet-Services mit Unmengen an Passwörtern herumzuschlagen. Wobei ich zugeben muss, dass ich erst seit einem Jahr KeePass zur Verwaltung meiner Passwörter einsetze und so endlich über das ganze Internet hinweg komplexe – und vor allem: unterschiedliche! – Passwörter einsetze. Die ältere Generation hat hingegen immer noch massive Probleme mit dem Umgang mit Passwörtern.

Sollten meine Eltern dereinst Touch ID-fähige Apple-Geräte anschaffen, werden solche Kapriolen ein Problem der Vergangenheit sein: Ab sofort werden sie sich mit ihren Fingerabdrücken am Gerät anmelden und Käufe im iTunes Store autorisieren können. Vorbei die Fragen à la „Muss ich jetzt mein E-Mail-Passwort oder mein iTunes-Passwort eingeben?“ Auch der PIN zum Entsperren des Gerätes wird entfallen. Vertipper gehören der Vergangenheit an – der Finger wird entweder erkannt oder nicht. Neu wird der Bildschirm den Benutzern sagen, welches „Passwort“ sie „eingeben“ müssen: „Bitte den Fingerabdruck einlesen“. Vorbei auch die Befürchtungen zur Passwortkomplexität.

Ich hoffe zudem, dass durch diese Massnahme auch das Phishing von Passwörtern des iTunes-Accounts erschwert wird, indem die Leute dieses Passwort mit der Zeit vergessen – oder der Kauf von Titeln bald eine Zwei-Faktor-Authentifizierung erfordert.

Schnüffelnder Lebenspartner

Ausserdem wird Touch ID für alle Generationen ein wirksames Mittel sein, um den Partner vom herumschnüffeln im Gerät abzuhalten (ausser man erfasst deren Fingerabdruck als einen der fünf im Gerät hinterlegbaren Fingerabdrücke). Ich werde wohl Stephanies Fingerabdruck ebenfalls erfassen, denn es kommt immer wieder vor, dass wir bspw. während einer Autofahrt gegenseitig auf unsere Geräte zugreifen, um Anrufe zu tätigen oder etwas nachzuschlagen.

Sicherheit biometrischer Daten

Im Promotionsvideo betont ein Apple-Mitarbeiter zudem, dass der Fingerabdruck ausschliesslich in einem hochsicheren Bereich des Telefons abgelegt wird – weder Applikationen haben darauf Zugriff, noch werden Fingerabdrücke. Diese Beteuerungen wird man als -bemühungen im Zuge der NSA-Affäre zu deuten haben.

Finger verloren – was nun?

Ich gehe davon aus, dass die Möglichkeit besteht, den Zugriff auf das Telefon entweder mittels einer Rücksetz-Aktion über den iTunes-Account freizugeben, oder aber es besteht die Möglichkeit, zusätzlich einen vierstelligen PIN-Code – oder noch besser: ein langes alphanumerisches Passwort – (für Notfälle) zu hinterlegen.

Letzte Frage: Macs?

Wann kriegen die Apple Macintosh-Computer dieses Lesegerät? Falls der Fingerabdruckscanner wirklich hält, was es verspricht, haben wir in Bälde erstmals eine brauchbare Zwei-Faktor-Authentifizierung in Consumer-Geräten. Corporate IT wird sich freuen.

Nachtrag

Gruber hat heute (d.h. am 18. September 2013, 5 Tage nach dem Erscheinen dieses Blog-Posts) das iPhone 5S gründlich getestet. Sein Fazit zum Touch ID-Sensor:

In practice, Touch ID has proved incredibly convenient. I always knew that entering my lock screen passcode and App Store password dozens of times a day, every day, was a hassle, but I had no idea how much of a hassle it was until I didn’t have to do it any longer.

Tags: , , ,
Labels: Apple

Keine Kommentare | neuen Kommentar verfassen

Montag, 9. September 2013

Fujitsu ScanSnap ix500: Dokumente zu Hause schnell und qualitativ perfekt scannen

Über Jahre hinweg machte ich mir die Multifunktionsgeräte (insbesondere den Ricoh NRG MC4500) meiner Arbeitgeber zu Nutzen, um auf wochenbasis Rechnungen, Quittungen und sonstigen Briefverkehr ins PDF-Format zu digitalisieren und auf dem heimischen PC abzulegen. Da ich mir während des Studiums zudem Adobe CS2 geleistet hatte, konnte ich mit Adobe Acrobat zusätzlich auch noch die OCR Texterkennung auf den gescannten PDFs durchführen. Dies erlaubt mir, Dokumente wiederzufinden, welche sich in der ausgeklügelten Ordnerhierarchie in meinem Dokumenten-Verzeichnis verirrt haben.

Auf Grund eines Stellenwechsels im Sommer dieses Jahres habe ich mir Gedanken über den Digitalisierungsprozess gemacht und basierend auf hochfliegenden Testberichten entschieden, privat einen Dokumentenscanner anzuschaffen. Meine Wahl fiel auf folgendes Gerät:

Fujitsu ScanSnap iX500 Scanner (600dpi, WLAN, USB 3.0) (Affiliate-Link)

Wichtig war mir, dass Mac OS X nicht stiefmütterlich unterstützt wird. Die ScanSnap-Applikation – einmal eingerichtet – ist klein, handlich und tut genau das, was man von ihr verlangt. Der Scanner steht sofort nach dem Einschalten bereit, ein oder mehrere Blatt Papier einzulesen. Dank guter Motoren erfolgt der Einzug kaum mit Problemen. Der Scanner ist so intelligent, dass er doppelseitig bedruckte Dokumente erkennt und diese ohne manuelle Intervention doppelseitig einscannt. Der Einzug ist flexibel einstellbar, um auch kleinere Dokumentenformate scannen zu können (bspw. die Kaufquittungen von internationalen Zugbillets). Gestern habe ich zudem auch die etwas dickere Kartonverpackung meines Velolichts eingescannt – beim zweiten Anlauf klappte es problemlos. Belege mit angeheftetem Debitkarten-Beleg laufen in der Regel auch problemlos durch. Für kleine Kaufquittungen auf dünnem Thermopapier liegt zudem noch ein Plasticmäppchen bei, in welches man alle fragilen Dokumentenformate einlegen und beidseitig scannen kann.

Mittlerweile habe ich damit über 2500 Dokumente gescannt und bin wunschlos glücklich. Das papierlose Privatbüro rutscht so in Greifweite.

Tags: , , , , ,
Labels: Shopping

Keine Kommentare | neuen Kommentar verfassen

Samstag, 7. September 2013

Unter Mac OS X auf den Avocent SwitchView IP 1010 zugreifen

Seit mein privater Linux Entwicklungsserver im Juli auf Grund eines Ausfalls des Kabelmodems und einem Wackelkontakt des Switch-Netzteils länger als erwartet offline war, habe ich drei verschiedene Massnahmen ergriffen, damit solche Probleme nicht mehr auftreten können:

  • Der Server ist nun mit zwei Netzwerkkabeln mit dem Intranet verbunden; eines über den besagten Gigabit-Switch, eines direkt am Internet-Router
  • Der Server soll dereinst zudem noch mit einem ZYXEL NWD2205 Ultra Compact Wireless N USB Adapter NWD2205 WLAN Client (Affiliate-Link) als dritter Netzwerk-Fallback funktionieren; bisher hatte ich aber noch nicht Zeit, den USB-Stick zu konfigurieren (stecken tut er vorerst einmal an einem freien USB-Port)
  • Der Server hängt nun an einem iKVM-Switch, d.h. ein netzwerkbasiertes Gerät, welches das analoge Bild des VGA-Ausganges nimmt, es digitalisiert und per VNC an eine Client-Software weitergibt.

Letzte Massnahme dient uns dann, wenn der Server bspw. nach einem apt-get dist-upgrade nicht mehr hochkommt und keine Möglichkeit besteht, per SSH auf den Server zuzugreifen. Mit dem iKVM-Switch kann ich den Bootprozess aus der Ferne überwachen.

Ich habe mich über Ricardo.ch für 150 CHF mit einem (notabene völlig veralteten) Avocent SwitchView IP 1010 eingedeckt (Nachfolgemodell: Avocent SVIP1020 – 202 SwitchView IP, Affiliate-Link).

Gestern nun nahm ich mir die Zeit, um das Teil in das Intranet zu integrieren. Der Aufwand war leider grösser als erwartet, doch nun klappt der Zugriff von meinem Mac mini hier in Bern auf den iKVM-Switch in Neuenegg:

SVIP Viewer Mac OS X Wine
image-5532

Nachfolgend sei das Vorgehen beschrieben:

Inbetriebnahme Hardware

Leider erhielt ich den iKVM–Switch per Ricardo.ch ohne das dem Gerät normalerweise beliegenden KVM-Kabel, welches PS/2-Schnittstellen und VGA-Anschluss vereint und vom Server zum Switch führt. Dumm gelaufen!

Jedenfalls war ich nicht bereit, zusätzlich noch ein Heidengeld für dieses Kabel auszugeben. Meine Shopping-Liste sah dementsprechend folgendermassen aus:

Den LCD-Monitor (15 Zoll) und die Mini-Tastatur (leider mit deutschem Layout) besass ich bereits. Beides schloss ich direkt an den iKVM-Switch an.

Werkseinstellungen und IP-Konfiguration

Zuerst setzte ich das Gerät auf Werkseinstellungen zurück, was dazu führte, dass es neu die IP 192.168.1.254 trug — in meinem Subnetz verwende ich aber 192.168.0! Ich verband deshalb mein MacBook Air mit einem Ethernetkabel mittels Apple USB-Ethernet-Adapter direkt mit dem iKVM-Switch. Anschliessend änderte ich die IP-Adresse meines MacBooks auf 192.168.1.1 und setzte dieselbe IP als Gateway.

Nun konnte ich den Web-Browser öffnen und auf https://192.168.1.254/ zeigen lassen. Mittels HTTP Basic Auth authentifiziert man sich als admin mit dem Passwort password (liebe Grüsse vom IT-Auditor). Bevor der Konfigurationsspass beginnen kann, muss man den Popup-Blocker des Browsers (bei mir für solche Fälle Firefox) deaktivieren.

Erst so gelangt man in die äusserst hässliche Java-Konfigurationsoberfläche. Die Netzwerkeinstellungen befinden sich unter

  1. Settings
  2. Global
  3. Network

Wer dem iKVM-Switch die IP-Adresse per DHCP übergeben will, findet in der Anzeige auch die MAC-Adresse des Gerätes. Wer auf Nummer sicher gehen will, konfiguriert die Adresse statisch, damit man auch beim Ausfall des DHCP-Servers auf das Gerät zugreifen kann. Mittels OK bestätigen, und schwups kann der Switch nun direkt mit dem Intranet verbunden werden.

In der weiteren Konfiguration deaktivierte ich unter

  1. Settings
  2. Global
  3. Sessions

die erzwungene SSL-Verschlüsselung ([ ] SSL connections only (must use https://) sowie [x] Allow Telnet and FTP connections. Ersteres bringt die Zertifikatswarnungen in den Web-Browsern weg, zweiteres eröffnet einem Telnet-Zugang auf das auf dem iKVM-Switch laufende FreeBSD-System. Natürlich sollte man die Aktivierung/Deaktivierung dieser Optionen in einem Unternehmensnetzwerk hinterfragen — im heimischen Netzwerk nehme ich die Sicherheitsrisiken gerne in Kauf.

Schlussendlich änderte ich auch noch das Administrator-Passwort und erstelle einen zusätzlichen Benutzer ohne Administrationsrechten.

VNC-Client in Gang bringen

Als der Switch auf den Markt gelassen wurde, sah die Systemlandschaft von iKVM-Benutzern noch deutlich anders aus als heute. Leider bietet der Switch nur eine Zugriffsmöglichkeit über den vpclient.exe, dem über die Web-Oberfläche zwei Sicherheitstoken mitgegeben werden. Folglich benötigt man nicht nur installiertes Java, sondern auch den Microsoft Internet Explorer und natürlich Windows, welche das Win32-Binary ausführen kann.

Glücklicherweise hat ein findiger Hacker (für mich nur via Google Cache erreichbar; lokales Backup) für das offenbar mehr oder weniger baugleiche APC AP5456 IP Gateway for Analog KVM ein bash Shell-Script entwickelt, mit welchem man die Tokens via cURL über die Web-Oberfläche des Switches abfrägt und damit die EXE-Datei aufruft (via wine).

wine

Zu Beginn sollte man Kaffee und Pop-Corn bereithalten, denn zuerst installiert man sich mit MacPorts das Paket wine:

# port install wine

Nach gefühlten vier Stunden Kompiliererei liegt wine als ausführbare Binärdatei vor.

vpclient.exe

Als nächstes lädt man sich vom Web-Server des iKVM-Switches die .cab-Datei herunter, welche die unter Windows ausführbare vpclient.exe und anderes Geschmäus enthält. Im Grunde kann man sich das weiter unten aufgeführte Script zu Nutze machen — aber etwas manuelle Arbeit schadet ja auch nichts. Deshalb logge ich mich per Telnet auf dem Switch ein und führe anschliessend folgenden Befehl aus, welcher mir den Namen der .cab-Datei nennt:

$ telnet 192.168.1.254
...
$ find /web -name "*.cab"
/web/vpclient4102.cab

Bei meinem iKVM-Switch mit Firmware-Version 1.0.5.6 und Build 04.09.07.1 handelt es sich um folgende URL:

192.168.1.254/vpclient4102.cab

ikvm.sh

Die .cab-Datei entpackt man danach in einem frei wählbaren Ordner; ich verwende hierzu The Unarchiver. Ins selbe Verzeichnis lädt man sich auch das Script von Chris, welches im oben genannten Cache vorgehalten wird. Der Vollständigkeit halber poste ich das Script hier auch noch:

#!/bin/bash

# A script to access an APC brand model AP5456 IP Gateway for Analog KVM 
# In Linux, using Wine

USERNAME="apc"
PASSWORD=""
KVM_SERVER=""

VIEWER_PATH=""

while [ -z "$KVM_SERVER" ]
do
    echo -n "FQDN of KVM Server (not including https://): "
    read KVM_SERVER
done

while [ -z "$USERNAME" ]
do
        echo -n "Username: "
        read USERNAME
done

while [ -z "$PASSWORD" ]
do
        echo -n "Password: "
        tput invis
        read PASSWORD
        tput sgr0
done

get_cab_name () {
    while read line
    do
        if [ "${line/'OBJECT CODEBASE'/}" != "$line" ]; then
            cab_name="${line##*'<OBJECT CODEBASE="'}"
            cab_name="${cab_name%%'"'*}"
            echo "$cab_name"
        fi
    done
}

get_cmd_args () {
    while read line
    do
        if [ "${line/PARAM/}" != "$line" ]; then
            ipaddr="${line##*'<PARAM NAME="ipaddr" VALUE="'}"
            ipaddr="${ipaddr%%'"'*}"

            sessionkey="${line##*'<PARAM NAME="sessionkey" VALUE="'}"
            sessionkey="${sessionkey%%'"'*}"

            encryptionkey="${line##*'<PARAM NAME="encryptionkey" VALUE="'}"
            encryptionkey="${encryptionkey%%'"'*}"
        fi
    done
    if [ -n "$sessionkey" ] && [ -n "$encryptionkey" ] && [ -n "$ipaddr" ]; then
        echo "-k $sessionkey -e $encryptionkey $ipaddr"
    fi

}

wine="`which wine`"
if [ -z "$wine" ]; then
    echo "Wine was not found, but is required.  Can not continue without it." >&2
    exit 1
fi

cd "`dirname $0`"
#If a path to vpclient.exe wasn't specified, and we can't find it, use /tmp
#as a place to download it to
if [ -z "$VIEWER_PATH" ] && ! [ -f "vpclient.exe" ]; then
    mkdir -p "/tmp/vpclient"
    VIEWER_PATH="/tmp/vpclient"
fi

#If a full path wasn't specified, prepend current working directory
if [ "${VIEWER_PATH:0:1}" != "/" ]; then
    VIEWER_PATH="`pwd`/$VIEWER_PATH"
fi

if ! [ -f "$VIEWER_PATH/vpclient.exe" ]; then

    cab_url="`curl -s --insecure --user "$USERNAME:$PASSWORD" "https://$KVM_SERVER/launch.asp" |get_cab_name`"
    cab_url="https://$KVM_SERVER/$cab_url"

    cabextract="`which cabextract`"
    if [ -z "$cabextract" ]; then
        echo "vpclient.exe was not found in $VIEWER_PATH" >&2
        echo "cabextract was not found either, so we can't download">&2
        echo -e "and extract vpclient.exe from it's CAB archive.\n" >&2
        echo "Error: user intervention required." >&2
        echo "----------------------------------" >&2
        echo "Download $cab_url" >&2
        echo "Unpack `basename $cab_url` into $VIEWER_PATH" >&2
        echo " -- OR -- " >&2
        echo "Install cabextract" >&2
        exit 1
    fi

    if ! [ -d "$VIEWER_PATH" ]; then
        echo "WARNING: Viewer Path specified is not valid." >&2
        echo "Path: $VIEWER_PATH" >&2
        echo -e "-------------------------------------------\n" >&2
        echo -n "Would you like me to create it? (y/N)?" >&2
        read answer
        shopt -s nocasematch
        if [ "$answer" = "y" ]; then
            mkdir -p "$VIEWER_PATH"
            if ! [ -d "$VIEWER_PATH" ]; then
                echo "Couldn't create: $VIEWER_PATH" >&2
                exit 1
            fi
        else
            exit
        fi
        shopt -u nocasematch
        
    fi

    cd "$VIEWER_PATH"
        curl -s --insecure --user "$USERNAME:$PASSWORD" "$cab_url" >"`basename $cab_url`"
        $cabextract -q "`basename $cab_url`" 2>/dev/null
fi


cmd_args="`curl -s --insecure --user "$USERNAME:$PASSWORD" "https://$KVM_SERVER/launch.asp" |get_cmd_args`"

cd "$VIEWER_PATH"

#Sanity check
if [ -f "./vpclient.exe" ]; then
    $wine "./vpclient.exe" $cmd_args
else
    echo "Failed, do it yourself: $wine vpclient.exe $cmd_args"
fi

Ich speichere es als ikvm.sh und mache es mit folgendem Befehl ausführbar:

$ chmod 755 ikvm.sh

Nachdem ich mich mit PPTP auf meinen Netgear WNDR3700-100PES RangeMax Router (Dual Band, Wireless-N,300 GigaBit) (Affiliate-Link) mit DD-WRT eingewählt habe (die Konfigurationsanleitung für die VPN-Lösung würde den Umfang dieses Blog-Posts sprengen), kann ich das Script starten (beim ersten Laden dauert es eine Ewigkeit, bis wine sich konfiguriert hat), gebe die IP-Adresse ein (192.168.0.5 reicht vollkommen aus) und die Zugangsdaten des Routers ein und erhalte innert Sekunden die Bildschirmanzeige des Servers auf den Monitor gezaubert.

Problembehandlung

Sobald alles sauber eingerichtet ist, sollte man den iKVM-Switch neu starten. Dies kann entweder physisch vor Ort oder aber über die Web-Oberfläche aus der Ferne geschehen:

  1. Tools
  2. Reboot Appliance

Ich habe zudem über Telnet auch noch einige Male /usr/bin/vps von Hand gestartet. Seither klappt jeder Verbindungsversuch auf Anhieb.

Erscheint ein pinkiger Hintergrund anstelle des Videobildes und friert wine anschliessend ein, sollte man den ganzen Prozess abschiessen und ikvm.sh erneut ausführen. Das Problem löst sich beim zweiten Aufruf.

Tags: , , , , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen