blog.bartlweb - a technologist's external brain

Alle Artikel

Befehle auf Remote-Systemen mittels SSH-Verbindung über PHP absetzen

"Ein Verwaltungsinterface auf einem Gatewayrechner für interne Systeme", "das Deployen von generierten Konfigurationsdateien", "den Status eines Drittsystems erfassen", ... es gibt unzählige Anwendungsfälle, in denen es notwendig werden kann sich per PHP-Skript und SSH auf ein entferntes System zu verbinden und dort Befehle abzusetzen.

Die Library phpseclib (phpseclib.sourceforge.net) ermöglicht es, aus PHP-Skripten heraus, SSH-Verbindungen aufzubauen und Befehle abzusetzen.

Authentifizierung mit Benutzername und Passwort

Die einfachere Variante ist die Authentifizierung mit Benutzername und Passwort am entfernten System. Hierfür reicht bereits das Einbinden der Library und wenige Zeilen Code aus.

Windows-Update von Windows 7 hängt auf einer frischen Windows-Installation

Windows 7 ist zwar nicht mehr taufrisch, aber gerade ältere Spezialsoftware oder Hardware läuft unter neueren Versionen nicht immer einwandfrei und erfordert dann doch hin und wieder die Installation von Windows 7. Natürlich wird direkt nach der Installation brav das Service Pack 1 installiert und wie empfohlen nach Updates gesucht. Allerdings hängt das Windows Update stundenlang mit der Meldung Es wird nach Updates gesucht... und der Prozess svchost.exe läuft mit 100% Prozessorauslastung.

Das Problem liegt an einem veralteten Windows-Update-Client und einem bestehenden Bug, der erst mit einem neueren Update behoben wird. Installieren Sie daher direkt nach dem Service Pack und vor der ersten Suche nach Windows Updates die folgenden beiden Update-Pakete von Hand und führen Sie dann die Suche nach Updates erneut aus:

iTunes Musikbibliothek per Skript in M3U-Playlists konvertieren

Ich verwalte meine Musikbibliothek seit Jahren mit iTunes und pflege dort auch unzählige in diversen Ordnern sortierte Playlisten. Mit Kodi (kodi.tv) habe ich eine komfortable Mediacenter-Lösung für meinen Smart-TV gefunden, auf dem ich jetzt auch auf meine Playlists zugreifen möchte. Leider versteht sich Kodi mit iTunes nicht, kann jedoch klassische M3U-Playlists lesen.

Daher habe ich ein Python-Skript erstellt, dass die iTunes Library in M3U-Playlists konvertiert und dabei sogar die in iTunes erstellte Ordnerstruktur nachbildet.

cURL kann URLs mit HTTPS nicht abrufen

Ich habe versucht mit meiner PHP-Installation und cURL eine Website mit HTTPS abzurufen und dabei die folgende Fehlermeldung erhalten:

Uncaught exception 'GuzzleHttp\Exception\RequestException' with message 'cURL error 60: SSL certificate problem: unable to get local issuer certificate (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)'

Das Problem liegt darin, dass cURL die aktuellen Root-Zertifikate der offiziellen Zertifizierungsstellen nicht kennt. Das lässt sich ganz einfach durch Aktualisieren bzw. Bereitstellen dieser Liste beheben.

Laden Sie dazu unter curl.haxx.se/ca/cacert.pem die aktuelle Liste herunter und legen Sie diese im Installationsverzeichnis Ihrer PHP-Installation ab. Danach editieren Sie die PHP-Konfigurationsdatei php.ini und geben für den Parameter curl.cainfo den Pfad zur Zertifikatsdatei an.

curl.cainfo = "C:/Program Files (x86)/PHP/cacert.pem"

Upgrade-Horror bei VMware Workstation

Updates sind wichtig: Es gibt Fehlerbehebungen, gestopfte Sicherheitslücken und eventuell sogar neue Funktion. Bei VMware Workstation ist das Update aber jedes Mal aufs Neue ein kleiner Kampf.

Während beim Update zwar alle Einstellungen erhalten bleiben, muss zumindest einer der vmrun nutzen möchte, sich jedes Mal erneut um das Modifizieren des VIX Wrappers kümmern (siehe vmrun von VMWare Workstation 12 kann sich nicht mit dem Host verbinden) und auch dann ist die korrekte Funktionsweise nicht immer gewährleistet (siehe vmrun funktioniert nach Update auf VMware Workstation 12.5.2 nicht mehr zuverlässig).

SSH-Zugriff auf OpenWrt per Public Key Authentifizierung absichern

Um den Zugriff per SSH auf einen Router mit OpenWrt abzusichern, können Sie bis auf einen kleinen aber feinen Unterschied wie auf jedem anderen Linux-System vorgehen.

Erstellen Sie auf dem Host von dem aus Sie gerne den Zugriff absichern bzw. vereinfachen möchten mit dem folgenden Befehl einen privaten und den für die Autorisierung notwendigen öffentlichen Schlüssel.

ssh-keygen -t rsa -b 4096

Danach kopieren Sie die generierte Datei id_rsa.pub per scp auf den Router.

scp /home/<user>/.ssh/id_rsa.pub remoteuser@remotehost:/tmp

Im Unterschied zu Linux-Systemen liegt die Datei authorized_keys, die die öffentlichen Schlüssel der berechtigten Rechner enthält, nicht im Nutzerverzeichnis, sondern im allgemeinen Pfad /etc/dropbear/authorized_keys. Fügen Sie mit dem folgenden Befehl den öffentlichen Schlüssel hinzu. Danach sollte die Authentifizierung per Public Key sofort funktionieren.

cat /tmp/id_rsa.pub >> /etc/dropbear/authorized_keys

Response Policy Zones zum Überschreiben von DNS-Einträgen am BIND Nameserver nutzen

Es gibt unterschiedliche Szenarien, bei denen es notwendig werden kann im lokalen Netzwerk DNS-Einträge für einzelne Domains (egal ob eigene oder nicht durch einen selbst verwaltete) zu manipulieren. Sei es um den Zugriff auf externe Ressourcen aus dem internen Netzwerk zu unterbinden oder eine Split-DNS-Konfiguration für eine eigene von einem externen Domainserver verwaltet Domain zu realisieren.

Seit Version 9.8 unterstützt der BIND Nameserver das Konzept von Response Policy Zones mit der genau solche Anforderungen sehr einfach, ohne Domains am eigenen Nameserver zu verwalten und damit doppelt abzubilden, realisieren lassen.

vmrun funktioniert nach Update auf VMware Workstation 12.5.2 nicht mehr zuverlässig

Nach der Aktualisierung meiner Installation von VMware Workstation auf die neuste verfügbare Version 12.5.2, habe ich wieder einmal getestet ob vmrun wie eigentlich zu erwarten funktioniert.

C:\Program Files (x86)\VMware\VMware VIX>vmrun -T ws-shared -h https://localhost
:8333/sdk list
Host user: admin
Host password:
Unable to connect to host.
Error: Insufficient permissions in the host operating system

Leider ist das noch immer nicht der Fall und daher muss auch weiterhin das Skrpting-Interface VMware VIX wie im Artikel vmrun von VMWare Workstation 12 kann sich nicht mit dem Host verbinden beschrieben modifiziert werden.

Allerdings erhalte ich auch danach immer noch sporadische aber durchaus reproduzierbar Fehlermeldungen, die auf Fehler in der Kommunikation hindeuten:

SAN Error bei der Anfrage von Let’s Encrypt-Zertifikaten mit dem Skript getssl

Für die Anfrage und Verwaltung meiner Let's Encrypt-Zertifikate nutze ich das Skript getssl (github.com/srvrco/getssl). Dabei habe ich die Anforderung Zertifikate für mehrere Domains mit SAN (Subject Alternative Name) zu beantragen. Die Domains habe ich dazu in die Konfigurationsdatei getssl.cfg der Basisdomain eingetragen. Beim Request der Zertifikate erhalte ich allerdings folgende Fehlermeldung:

"Error Loading request extension section SAN
140325313369760:error:2206D06D:X509 V3 routines:X509V3_parse_list:invalid null value:v3_utl.c:299:
140325313369760:error:22097069:X509 V3 routines:DO_EXT_NCONF:invalid extension string:v3_conf.c:139:name=subjectAltName,section=DNS:webserver-bartlwebnet-public.letsencrypt.bartlweb.net,DNS:,DNS:webssh.bartlweb.net,DNS:wordclock.bartlweb.net
140325313369760:error:22098080:X509 V3 routines:X509V3_EXT_nconf:error in extension:v3_conf.c:93:name=subjectAltName, value=DNS:webserver-bartlwebnet-public.letsencrypt.bartlweb.net,DNS:,DNS:webssh.bartlweb.net,DNS:wordclock.bartlweb.net
"
getssl: Sign failed: "detail": "Error parsing certificate request. Extensions in the CSR marked critical can cause this error: https://github.com/letsencrypt/boulder/issue/565

Dieser Fehler tritt auf wenn im CSR (Certificate Signing Request) leere Domains als SAN eingetragen sind. Für das Skript getssl heißt das, zu berücksichtigen, dass in der Konfigurationsdatei getssl.cfg die Liste der Domains für den Parameter SANS= nicht mit einem führenden , beginnt, da ansonsten eine leere Domain in den Antrag mit aufgenommen wird.

Alternative zu StartSSL Wildcard- und Multidomain-Zertifikaten mit Let’s Encrypt

StartSSL stellt sehr kostengünstige SSL-Zertifikate bereit, da nur für die Validierung der eigenen Identität einmal ein verhältnismäßig kleiner Kostenbeitrag von $60 anfällt und dann ein Jahr lang beliebig viele Zertifikate und vor allem auch Wildcard- und Multidomain-Zertifikate bezogen werden können.

Mit der Sperre von WoSign in allen großen Browsern und Betriebssystemen Ende 2017, werden auch die Zertifikate von Startcom nicht mehr als gültig erachtet. Alle bisher ausgestellten Zertifikate werden weiterhin bis zu Ende deren Gültigkeitsdauer, neu ausgestellte Zertifikate aber gar nicht mehr, akzeptiert.

Eine wirkliche Alternative in dieser Preisklasse, vor allem für Wildcard- und Multidomain-Zertifikate, existiert aktuell nicht, denn ein Multidomainzertifikat mit 3 Domains kommt auf ca. €800 pro Jahr.