Inhalt

14. Automatisierung der Verbindung mit chat

Ein chat Skript automatisiert den Einlogvorgang, so daß man als root oder als Mitglied der ppp Gruppe nur einen einzelnen Befehl eingeben muß, um eine Verbindung aufzubauen.

Ein chat Skript besteht jeweils aus Paaren von einer Zeichenkette, die chat erwartet und die Antwort die er darauf senden soll Nachdem das Modem zum Beispiel gewählt hat und eine Verbindung zum anderen Modem aufgebaut hat, warten wir darauf, das Login Prompt zu empfangen, wobei dieses eventuell erst nach einer Menge Text aus der /etc/issue.net Datei des Servers folgt. Nachdem wir dieses empfangen haben, senden wir unseren Benutzernamen. Als nächstes warten wir auf das Paßwort Prompt und senden unser Paßwort.

Im Prinzip also ganz einfach.

Falls das PPP Paket korrekt installiert worden ist, sollten sich in /usr/sbin zwei Dateien mit folgenden Namen befinden:

ppp-on
ppp-off

Diese enthalten Templates für den Verbindungsaufbau einer PPP Verbindung unter Verwendung von chat. Die ppp-off Datei war diejenigen, die wir im letzten Abschnitt verwendet haben, um unsere manuell aufgebaute PPP Verbindung zu beenden.

Nur für den Fall, daß bei Ihnen diese Templates fehlen sollten, sind hier modifizierte und kommentierte Versionen der Dateien, die wir verwenden werden:

/usr/sbin/ppp-on:

#!/bin/sh
#
#       ppp-on
#
#       Baut eine PPP Verbindung auf
#

LOCKDIR=/var/lock   # Verzeichnis des lock files
DEVICE=cua1         # Verwendete serielle Schnittstelle
PHONE=XXXXXXXX      # Telefonnummer des Modems des ISPs
USER=XXXX           # Benutzername zum Einloggen
PASSWORD=password   # Passwort beim Einloggen
OUR_IP_ADDR=x.x.x.x # Die eigene IP Nummer bei der Verwendung von
                    # statischen IP Nummern, ansonsten 0.0.0.0

if [ -f $LOCKDIR/LCK..$DEVICE ]
then
   echo "PPP device ist gelockt"
   exit 1
fi

fix-cua $DEVICE
(
   stty 19200 -tostop

   # Dieses kann man auch 115200 aendern, wenn die serielle Schnittstelle
   # des Modems dieses verkraftet.

   if chat -v -l LCK..$DEVICE ABORT "NO CARRIER" ABORT BUSY "" ATZ OK\
      ATDT$PHONE CONNECT "" ogin: $USER ssword: \\q$PASSWORD
   then
       pppd -d -detach asyncmap 0 modem crtscts $OUR_IP_ADDR: /dev/$DEVICE
       rm -f LCK..$DEVICE
       exit 0
   else
       echo "PPP Anruf fehlgeschlagen" 1>&2
       exit 1
   fi
) < /dev/$DEVICE > /dev/$DEVICE

/usr/sbin/ppp-off:

#!/bin/sh

DEVICE=ppp0

# Falls die PID Datei von ppp0 existiert, laeuft der Daemon.
# Beende ihn.

if [ -r /var/run/$DEVICE.pid ]; then
       kill -INT `cat /var/run/$DEVICE.pid`

# Falls nicht erfolgreich stelle sicher, dass die PID Datei
# entfernt wird.

       if [ ! "$?" = "0" ]; then
               echo "Entferne stale $DEVICE PID Datei."
               rm -f /var/run/$DEVICE.pid
               exit 1
       fi
#
# Erfolg. Beendet mit richtigem Status.
#
       echo "$DEVICE link beendet"
       exit 0
fi

#
# Der link ist nicht aktiv
#

echo "$DEVICE link ist nicht aktiv"
exit 1

Die Rechte der Dateien und ihre Besitzer sollten sein:

-rwxr-xr-x   1 root     PPP          502 Sep  3 20:04 /usr/sbin/ppp-off
-rwxr-xr-x   1 root     PPP          612 Sep  3 20:04 /usr/sbin/ppp-on

14.1 Was ein chat Skript bedeutet...

Ein chat Skript ist eine Folge von erwarte und sende Strings. Hierbei sollte man beachten, daß wir immer zuerst etwas erwarten, bevor wir etwas senden. Wenn wir etwas senden möchten, ohne vorher etwas zu empfangen, müssen wir einen leeren erwarte String verwenden (gekennzeichnet durch "") und das gleiche gilt für das Erwarten einer Zeichenkette, ohne das etwas gesendet werden soll. Auch wenn eine Zeichenkette aus mehreren Worten wie z.B. NO CARRIER besteht, muß man die Zeichenkette in Anführungszeichen einschließen.

Die chat Zeile in unserem Beispiel ist:

if chat -v -l LCK..$DEVICE ABORT "NO CARRIER" ABORT BUSY "" ATZ OK\
   ATDT$PHONE CONNECT "" ogin: $USER ssword: \\q$PASSWORD

Dieses bedeutet ...

Dieses ist ein sehr einfaches chat Skript. chat verfügt zusätzlich über einer Fehlerbehandlung und eine Anzahl weiterer Optionen. Für weitere Informationen lesen Sie bitte die chat manual page (man 8 chat).


Inhalt