Archive for the ‘Linux’ Category.

VMware ESXi 4.0 – SSH (re) aktivieren

VMware ESXi 4.0 – SSH (re) aktivieren
SSH Zugriff auf ESX Server ist etwas an das man sich gewähnt hat und das man oftmals auch braucht. Leider hat VMware beim ESXi 4 eben diesen SSH Zugriff deaktiviert. Selbst an die Konsole, also den Linux Teil des ESX, kommt man nur mir Tricks.

Leider sind diese Tricks durch VMware in keinster Weise supported, aber was stört das, wenn dafür SSH und Konsole auf dem ESXi wieder benutzbar werden?

Trick 1: Zugriff auf die Konsole nehmen
Sobald der ESXi Server hochgefahren ist, also der “Wellcomescreen” zu sehen ist, direkt am VMware ESXi Server auf der Tastatur ALT-F1 drücken, nicht wundern das man keinen Cursor sieht und das Wort “unsupported” ohne “” eintippen, die Eingabe mit ENTER bestätigen. Wenn man sich nicht vertippt hat, wird nun das Rootkennwort abgefragt -> eingeben und hat Zugriff auf die Konsole des ESXi Servers!

Trick 2: SSH (re)aktivieren
Sobald man sich wie in Trick 1 beschrieben Zugriff auf die ESXi Konsole ermöglicht hat, öffnet man sich direkt auf dem VMware ESXi mit dem vi die Datei /etc/inetd.conf
Hier entfernt man mit dem vi an den beiden Zeilen für SSH das führende # (einfach den Cursor dort hinbewegen und einmal x drücken, danach bei Zeile 2 das Ganze einfach nochmal, speicher und beenden des vi geht mit :wq – den Doppelpunkt wirklich mittippen!). Danach sollte die Sektion in etwa so aussehen:

# Remote shell access #
ssh stream tcp nowait root /sbin/dropbearmulti dropbear ++min=0,swap,group=shell -i -K60
ssh stream tcp6 nowait root /sbin/dropbearmulti dropbear ++min=0,swap,group=shell -i -K60

Nun am besten den VMware ESXi Server durchbooten, um die Änderungen wirksam werden zu lassen. Sollte ein Reboot des Systems nicht so einfach möglich sein (das soll ja bei produktiven Servern manchmal zu ungemütlichen Telefonanrufen führen), muß der inetd manuell neu gestartet werden.

Trick 3: inetd manuell neu starten
Zuerst muss die Prozess ID des inetd ermittelt werden. Dies macht man auch direkt auf der Konsole des VMware ESXi, mit dem Kommando:

ps aux |grep inetd

Die Ausgabe des Kommandos sollte in etwa so aussehen:

4896 4896 busybox inetd

Die erste und zweite Spalte der Ausgabe ist die Prozess ID! Diesen Prozess beenden wir dann manuell mit dem Kommando:

kill -HUP PID

Wobei PID für die zuvor ermittelte Prozess ID steht! Nun sollte der SSH Zugriff funktionieren. Alles weitere was man nun machen muß um sich per SSH mit dem VMware ESXi Server zu verbinden, solltet ihr selbst wissen ;)

Netzwerkkarte / IP Adresse unter Debian / Ubuntu konfigurieren

Netzwerkkonfiguration per Kommandozeile
Gerade heute habe ich wieder mal von einem Kunden die Anfrage bekommen, wie er denn seine Netzwerkkonfiguration an seinem Linux Server ändern kann – schließlich habe er ja gar keine GUI zum konfigurieren der eth Interfaces zur Verfügung und ein Yast gibt es auf Debian Systemen (zum Glück) auch nicht. Schnell hatte ich ihm per Telefon erklären können wie er als Beispiel eth0 unter Debian konfigurieren kann – das die Netzwerkkonfiguration unter Linux so einfach “zu lesen” ist, wollte er mir zu Anfang gar nicht glauben.

Da dies abermals ein Thema ist, welches mir öfter mal begegnet, denke ich das es an der Zeit ist hier auf meinem Blog die Konfiguration der IP Adressen auf die eth Interfaces von Debian basierenden Linuxsystemen zu erklären (ja, Ubuntu ist auch ein “Debian Derivat”)

Statische IP Adresse auf eth0 vergeben
In der Datei /etc/network/interfaces muss nur das nachfolgende eingetragen / konfiguriert werden, dabei dürfen jedoch keine Einträge die mit lo Interface zu tun haben entfernt oder geändert werden. Lo ist der sogenannte Loopbackadapter und für den Betrieb des Systems zwingend so wie er da steht erforderlich!

# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.1.2
gateway 192.168.1.1
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255

Zuer Erklärung: “auto eth0″ steht für einen automatischen Start des Interface beim booten. Wenn dieser Eintrag fehlt, müsste man das Interface eth0 von Hand aktivieren, was manchmal schwer fällt, wenn zum Beispiel der Server nur über Netzwerk erreicht werden kann (wie bei Root Servern oder anderen entfernten Servern der Fall).
“address” ist die IP Adresse die auf das eth0 Interface gelegt werden soll.
“gateway” steht für das default Gateway und ist für ein sauberes Routing unabdinglich – es sei denn man definiert es im nachhinein per Hand nach.
“netmask” steht für die Netzmaske – was das ist erkläre ich später mal – von seinem Provider (bei Root Servern) erhält man diese Angabe meist mit, bei einem LAN Server ist die Netzmaske meist wie hier im Beispiel 255.255.255.0 – sprich ein Class C Netzwerk von 192.168.1.0 bis 192.168.1.255 (wobei hier die .0 und .255 reserviert sind und nicht verwendet werden dürfen, siehe “network und “broadcast”)
“network” definiert nochmal das Netz in dem sich der Server befindet – wobei hier die vereinfachte Schreibweise verwendet wird.
“broadcast” am besten hier nachlesen: 7070

In der Datei /etc/resolv.conf wird nun definiert über welche DNS Server, oder auch Nameserver, dieNamensauflösung stattfinden soll und über den Eintrag “search” wird definiert in welcher Domain Linux suchen soll, wenn bei einem Serverrequest kein Domainname mit angegeben wird.

search domain.local
nameserver 192.168.1.1

IP Adresse für eth0 über DHCP
Hier muss ebenfalls natürlich das eth0 definiert werden, die Werte für die IP Adresse etc kommen aber über den DHCP Server, man braucht sie also nicht mit eintragen. Einfacher als eine DHCP IP Adress Konfiguration geht es, wie man sieht, kaum noch.

# The primary network interface
auto eth0
iface eth0 inet dhcp

Zweite IP Adresse auf ein Netzwerk Interface legen
Wenn die zweite IP Adresse statisch vergeben werden soll, kann man dies durch sogenannte virtuelle Interfaces machen. Dazu wird die Konfiguration des physikalischen Interfaces quasi kopiert und hinter den Namen einfach ein :Nr gehängt. Im Falle von ETH0 würde das erste virtuelle Interface also beispielsweise so aussehenen:

# The primary network interface - second IP address
auto eth0:1
iface eth0:1 inet static
address 192.168.1.3
gateway 192.168.1.1
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255

Für eine zweite IP Adresse für eth0 über DHCP sieht das dann wie folgt aus:

auto eth0:1
iface eth0:1 inet dhcp

Weblinks:

  • http://www.debianadmin.com/ubuntu-networking-for-basic-and-advanced-users.html

Zeitsynchronisation mit NTP Daemon für Debian und Ubuntu

Viele Webserver (oder Rootserver) sind auf eine genau laufende Uhrzeit angewiesen, um aussagefähige Logfiles (Beispielsweise Zugriffsstatistika der Webseiten oder Systemlogfiles für die Fehleranalyse) schreiben zu können. Leider laufen die Systemuhren (Hardwareclock) nicht sehr genau und haben bereits nach einigen Wochen relativ grosse Abweichungen zu verzeichnen. Vergisst man gelegentlich die Uhr zu stellen, kann man sich da schon einige Unschönheiten einfangen.

Die Rettung lautet NTP, das Network Time Protocol. Es dient, wie der Name schon sagt zur Zeitübertragung zwischen verschiedenen Rechnern über das Netzwerk. Das allein hilf natürlich noch nicht weiter… Aber es gibt relativ viele NTP Server im Internet, welche kostenlos mehr oder weniger aktuelle Uhrzeiten liefern, daruter auch Server, welche Ihre Uhrzeit direkt von Atomuhren beziehen! Über das NTP Protokoll kann man sich diese Server zu nutze machen, um automatisiert die uhrzeit auf dem einenem Rechner oder Server immer aktuell zu halten.

Unter Linux dient hierzu meist der NTP Client, welcher sich unter Debian Lenny sehr leicht mit der nachfolgenden Kommandozeile installieren lässt:

1
aptitude install ntp ntpdate

Konfiguriert wird der NTP Client über nur eine kleine Datei, die /etc/ntp.conf! Hier wird festgelegt, welche Zeitserver befragt werden können (nicht alle werden tatsächlich zeitserver für das System sein), ob und wie zeitdienste weitergegeben werden und wer den NTP Dienst noch konfigurieren darf.

/etc/ntp.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/etc/ntp.conf
# Pfad zum Driftfile
driftfile /var/lib/ntp/ntp.drift
 
statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable
 
# Stratum 1 Server
server ntp1.ptb.de
server ntp2.ptb.de
 
# NTP Server aus dem Debian Pool (Defaultserver bei Lenny)
server 0.debian.pool.ntp.org iburst dynamic
server 1.debian.pool.ntp.org iburst dynamic
server 2.debian.pool.ntp.org iburst dynamic
server 3.debian.pool.ntp.org iburst dynamic
 
# By default, exchange time with everybody, but don't allow configuration.
restrict -4 default kod notrap nomodify nopeer noquery
restrict -6 default kod notrap nomodify nopeer noquery
 
# Local users may interrogate the ntp server more closely.
restrict 127.0.0.1
restrict ::1

Nachdem die Konfiguration in etwa wie im obigem Beispiel aussieht (Kommentarzeilen etc. habe ich der Übersichtlichkeit halber größtenteils entfernt), sollte man einmal von Hand die zeit auf dem System setzen. Das geht recht einfach mit dem oben schon mit installiertem ntpdate.

1
ntpdate ntp1.ptb.de

Nun ist die zeit auf dem System aktuell, sofern der Zeitserver auch erreichbar war! Ein funktionierendes Netzwerk mitsamt der dazugehörigen Namensauflösung (DNS Dienste) setze ich hier einfach mal vorraus! Wir können den NTP Client nun starten, bzw. neustarten

1
/etc/init.d/ntp start

oder

1
/etc/init.d/ntp restart

Überprüfung der Zeitsync:
Direkt nach dem Start:

ntpq -c peers
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 ptbtime1.ptb.de .PTB.            1 u    5   64    1   21.020   11.660   0.001
 ptbtime2.ptb.de .PTB.            1 u    4   64    1   20.856   11.789   0.001
 dnscache-frankf 192.53.103.104   2 u    1   64    1    6.087   12.967   0.891
 bind.ch         130.60.75.52     3 u    -   64    1    7.191   16.387   0.001
 phoenix.wzw.tum 192.53.103.108   2 u    1   64    1   22.817   18.651   0.001
 obelix.chown.dk 131.188.3.221    2 u    -   64    1    0.954   13.563   0.001

Nach einer Minute:

ntpq -c peers
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*ptbtime1.ptb.de .PTB.            1 u   33   64   37   20.637   15.675   8.187
+ptbtime2.ptb.de .PTB.            1 u   32   64   37   20.806   24.409   8.137
+dnscache-frankf 192.53.103.104   2 u   28   64   37    4.869   16.740   6.471
-bind.ch         130.60.75.52     3 u   28   64   37    7.158   29.072   9.780
 phoenix.wzw.tum 192.53.103.108   2 u   23   64   37   21.779   19.059   8.523
+obelix.chown.dk 131.188.3.221    2 u   25   64   37    0.633   14.937   8.032

Erklärung relevanter Zeichen und Spalten:

* Der beste aller eingetragenen Server. Dieser Server wird als Referenz genommen.
+ akzeptable Qualität (sortiert nach absteigender Qualität)
# akzeptabler Zeitgeber, jedoch schlechter als mit “+”
- Schlechter Zeitgeber, meistens ausgenommen von der Zeitermittlung.
. Schlechter Zeitgeber, meistens ausgenommen von der Zeitermittlung.
x Server mit scheinbar falscher Zeit. Ausgenommen von der Zeitermittlung.

In der Spalte “st” steht der Stratum Wert, sprich wie viele Schritte der Server von der primären Zeitquelle (z.B. der Atomuhr) entfernt ist.

In der Spalte “when” steht wann der Zeitderver das letzte mal befragt wurde, analog dazu steht in der Spalte “poll” in welchem Zeitabstand der Server befragt wird.

Die Spalten “delay” “offset” und “jitter” stehen für die Netzlaufzeit, Abweichung und Streuung der Antworten des jeweiligen Servers in Millisekunden. Je weniger, desto besser natürlich.

Nach der Inbetriebnahme des NTP Dienstes, sollte man einige Stunden vergehen lassen, bevor man die Ergebnisse gegenprüft, da über das Driftfile ersteinmal eine gewisse Anzahl von Werten gesammelt werden müssen, bevor der NTP Dienst wirklich genau arbeiten kann.

Abschließend muss der NTP Dienst nur noch beim Systemstart gestartet werden. Dies erreicht man unter Debian wie folgt:

chkconfig --level 345 ntp on

Mit dieser Befehlszeile wird der NTP Dienst in den Runleveln 3,4 und 5 gestartet, was für 98% aller Systeme ausreichen sollte ;) !

P.S. Die Daten der ntp.conf gelten so für fast alle *nix Systeme, also auch HP UX, SUN Solaris sowie Linuxsysteme von SuSE und RedHat!

Weblinks zu Zeitserver Pools und Listen: