Nicht druckbare Zeichen in Java Strings lassen .equal oder .valueOf(String) fehlschlagen

Beim Vergleichen von Strings mit equal oder Enum Parsen mit „valueOf“ gibt es keinen match, obwohl der String augenscheinlich identisch ist – Dieses Problem wird in diesem Beitrag erläutert:

Beim Parsen von CSV Dateien stößt man ab und zu auf Probleme mit der Encodierung der zu parsenden Datei.

Im konkreten Fall gestaltete sich das Problem als herausfordernd, weil auf den ersten Blick keine Ursache für das Problem erkennbar war.

Die geparste Variable nennt sich „rowTypeString“ und hat im Debugger den Inhalt „RH“

debug screenshot - String "RH" sieht aus als wäre er 2 Zeichen lang, ist aber 3 Zeichen lang wegen nicht druckbarer Zeichen - aus diesem Grund schlägt ein Equal fehl
Augenscheinlicher Inhalt der Variable „rowTypeString“ – nur zwei Zeichen mit dem Inhalt „RH

Im Quelltext wird jedoch die Variable über ein Enum mit der  „valueOf()“-Funktion geparst und einem eindeutigen Typ zugewiesen. Diese lief jedoch immer auf eine IllegalArgumentException hinaus.
Die Analyse des String ergab dann doch noch interessante Details:

  • Der String hat eine Länge von 3 Zeichen (auch wenn das dritte unsichtbar ist)
  • Ein Character Array gab auch interessante Details zurück:
char of string with hidden character
  • Die Methode rowTypeString.getBytes() gibt  zahlreiche Bytes zurück, welche auf das dritte Zeichen hindeuten:
    [-17, -69, -65, 82, 72]
  • Eigentlich dürfte das ByteArray nur [82,72] lauten für den String „RH“

Die Lösung konnte sich dann doch gut sehen lassen. Es werden alle „nicht druckbaren Zeichen“ entfernt mit dem nachfolgenden regulären Ausdruck:

stringValue.replaceAll("[^\\p{Graph}\n\r\t ]", "");

Ich danke an dieser Stelle dem Verfasser einer Antwort in StackOverFlow

Kyocera Ecosys P2040dn Default Login

Kyocera Command Center RX beim P2040dn – Default Login

Aus gegebenem Anlass aktualisiere ich hier den Blogbeitrag zum Standard-Login für Kyocera-Drucker. In den letzten Jahren hat sich einiges geändert, daher möchte ich sowohl die alten Modelle als auch die neuen Sicherheitsvorgaben berücksichtigen.

Standard-Login für ältere Kyocera-Drucker

Bei älteren Kyocera-Druckern, wie dem Ecosys P2040dn, lautet das Standard-Login:

Benutzername: Admin
Passwort: Admin

Wichtig ist die Groß- und Kleinschreibung, sowohl beim Benutzernamen als auch beim Passwort. Diese Standard-Kombination funktioniert jedoch nicht mehr bei den neueren Geräten.

Login bei neueren Kyocera-Druckern

Für neuere Modelle hat Kyocera die Sicherheitsrichtlinien geändert. Statt eines einheitlichen Standard-Logins erhält jedes Gerät ein individuelles Passwort. Dieses ist entweder:

  • auf einem Aufkleber am Gerät (z. B. am Einzelblatteinzug oder Tonerfach),
  • oder in der beigelegten Dokumentation (z. B. in der „Anleitung“ oder DVD-Hülle) zu finden.

Das Passwort wird nicht mehr in den Standard-Dokumenten von Kyocera aufgeführt. Achte also darauf, die Unterlagen oder den Aufkleber nicht zu verlieren.

Was tun bei verlorenem Passwort?

Wenn das Passwort nicht mehr auffindbar ist, gibt es folgende Optionen:

  • Prüfe das Gerät selbst auf einen möglichen Passwort-Aufkleber.
  • Kontaktiere den Kyocera-Support, um das Passwort zurücksetzen zu lassen. Dies kann je nach Region kostenpflichtig sein und erfordert in der Regel einen Eigentumsnachweis (z. B. Kaufbeleg).

Einige Geräte bieten auch eine Möglichkeit, die Werkseinstellungen zurückzusetzen. Dies kann allerdings technisches Wissen oder spezielle Tools erfordern.

Fazit

Bei älteren Kyocera-Druckern funktioniert noch das klassische „Admin/Admin“-Login. Bei neueren Geräten hingegen ist ein individuelles Passwort erforderlich, das auf dem Gerät oder in der Verpackung angegeben ist. Verliere diesen Hinweis nicht, da der Zugang sonst nur über den Support möglich ist.

Falls du neue Erkenntnisse oder Tipps hast, teile diese gerne in den Kommentaren!

Vcenter Server Phase 2 Installation stürzt ab mit Meldung „Failed to connect to SSO“

Vmware VCenter Server 6.5 / Failed to connect to SSO

Für einen Kunden habe ich einen neuen Vcenter Server (VCSA) aufgesetzt und kämpfte mit dem Problem, dass die Phase 2 der Installation der Installation fehlschlug mit der Meldung:

„Failed to connect to SSO“

Ursache waren zwei Probleme:

  1. Der Domain Name des VCenter Servers ließ sich nicht per DNS auflösen –> Im verantwortlichen Domain Controller habe ich im DNS einen A-Record angelegt, so dass sich das FQDN ohne Probleme mit nslookup auflösen ließ
  2. Der VMware Identity Management-Dienst ließ sich laut Fehlerprotokoll nicht starten

vmware-stsd[1762]: has address 127.0.0.1. Request for http://localhost:7080/afd failed after 10 seconds. Status: /usr/bin/curl status. Response: 000. Host: localhost has address 127.0.0.1. Request for http://localhost:7080/afd failed after 10 seconds. Status: /usr/bin/curl status. Response: 000.

Lösen ließ sich das Problem dank des Blog-Beitrags von Christian Stankowic mit dem folgenden Workarround

Nach der Ersten Phase der Installation empfiehlt es sich, einen Snapshot an der VCSA und dem installierenden Client zu machen, um nicht nach jedem Fehlversuch wieder von vorne anzufangen. Anschließend wird der zweite Schritt durch Ausfüllen der Formularfelder vorbereitet. Bevor Phase zwei der Installation gestartet wird, muss jedoch noch ein Schritt unternommen werden:

In der Konsole der VCSA habe ich mit Alt+F3 in die Konsole gewechselt und mich nach erfolgreichen Login mit der Shell verbunden:

> shell
# echo "::1 localhost.localdom localhost" >> /etc/hosts

Anschließend hat sich der VCSA-Server sich selbst mit „localhost“ wieder erfolgreich aufgelöst und die Installation ist  erfolgreich durchgelaufen.

Docker Container automatisch mit Boot von Ubuntu starten

Um mittels Docker Containern Dienste verlässlich, stabil und mit minimalem Wartungsaufwand zu betreiben, ist es erforderlich, dass diese nach Start des Docker-Servers automatisch gestartet werden.

Dies passiert ganz einfach, indem dem Docker RUN Kommando eine einfache Option mit auf den Weg gegeben wird:

--restart always

Die Einstellmöglichkeiten rund um die Restart-Policy sind wesentlich vielfältiger und können hier nachgelesen werden.

Ubuntu von Anfang an optimal für den Einsatz von Docker einrichten

Für den Einsatz von Docker kann man zwar inzwischen auch Windows Server 2016 oder Macs nutzen, für den lizenzbedingt kostenfreien Einsatz ist jedoch immer noch Linux die erste Wahl. Ich nutze dafür gewohnheitsmäßig Ubuntu und möchte hier für Euch als auch für mich dokumentieren, wie ich Docker auf einem frisch installiertem Ubuntu aufsetze.

Ubuntu Grundeinstellungen

Als erstes muss Ubuntu auf den aktuellen Stand gebracht werden. Dies passiert üblicherweise mit apt

sudo apt update

sudo apt full-upgrade

Als nächstes empfiehlt es sich, herauszufinden, mit welcher IP-Adresse man im Netzwerk unterwegs ist, damit man sich per SSH einloggen kann und nicht alles direkt von der Konsole aus machen muss. Bei einer VMWare-Console hat das noch den Nachteil, dass man keine Zwischenablage nutzen kann.

ifconfig

Wenn ihr eine feste IP-Adresse über den DHCP-Server konfigurieren wollt, so ist das jetzt Eure Gelegenheit dazu. Anschließend verbindet ihr Euch per SSH auf Eure Ubuntu-Maschine.

SSH-Authentifizierung mit public/private key einrichten

Sollte ihr Euch mit einem SSH-Schlüssel per SSH verbinden wollen, so müsst ihr Euren public key bekannt machen. Dafür legt ihr ein Verzeichnis .ssh an und erstellt dort eine Datei authorized_keys, in der alle Public Keys für die Anmeldung drin stehen müssen.

mkdir .ssh

cd .ssh

vim authorized_keys

Jetzt den Public Key einfügen und speichern.

Docker mit apt installieren

Quelle: https://docs.docker.com/engine/installation/linux/docker-ce/ubuntu/#set-up-the-repository

Zuerst die Werkzeuge installieren, damit repositories über https angesprochen werden können (ist per Default aber schon installiert)

sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common


Anschließend den GPG-Key hinzufügen

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88

Jetzt das Repository von Docker hinzufügen

sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

Anschließend das apt aktualisieren

sudo apt-get update

Und endlich Docker installieren

sudo apt-get install docker-ce

Schritte nach der Installation von Docker

Erstellen einer Docker Gruppe

 sudo groupadd docker

Hinzufügen des aktuellen Nutzers zur Gruppe

sudo usermod -aG docker $USER

Anschließend aus- und wieder einloggen für das Aktualisieren der Gruppenmitgliedschaft.

Jetzt wird es Zeit für einen ersten Check, ob alls läuft mit Hilfe des „Hello-World“ Containers

 docker run hello-world

Wenn jetzt Probleme auftreten, könnt ihr die Problembehebung hier nachlesen

Jetzt stellen wir ein, dass Docker beim Systemstart geladen wird:

sudo systemctl enable docker

Nutzen der grafischen Oberfläche „Portainer“ für die komfortable Administration von Docker

Die grafische Benutzeroberfläche können wir einfach einrichten, indem wir den Container mit dem nachfolgenden Befehl starten:


docker run --rm --name portainer -d --privileged -p \
 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock \
-v /opt/portainer:/data portainer/portainer

Damit ist die grundlegende Einrichtung abgeschlossen.
Im nächsten Beitrag geht es darum, die Infrastruktur von Docker so einzurichten, dass die Container eine Datenumgebung haben und ich per SSH und git die Repositories mit den auszuführenden Applikation verwenden kann.