15. Automatiser votre connexion - Créer les scripts de connexion

Contenu de cette section

Même si vous pouvez continuer à vous connecter à la main comme montré ci-dessus il est plus sympa de faire quelques scripts pour automatiser tout ça.

Quelques scripts vont automatiser la connexion et le lancement de PPP, vous n'aurez alors plus qu'à envoyer une seule commande (en étant root ou membre du groupe PPP) pour lancer votre connexion.

15.1 Scripts de connexion pour l'authentification nom utilisateur/mot de passe

Si votre FAI n'a pas besoin d'utiliser PAP/CHAP, ces scripts sont faits pour vous !

Si le paquetage ppp est correctement installé, vous devez avoir deux fichiers d'exemple. Pour PPP 2.1.2 il sont dans /usr/sbin et pour PPP 2.2 il sont dans /etc/ppp/scripts. Ils s'appellent

pour PPP-2.1.2

ppp-on
ppp-off

et pour PPP 2.2

ppp-off
ppp-on
ppp-on-dialer

Maintenant, si vous utilisez PPP 2.1.2, je vous presse fermement de détruire ces fichiers d'exemple. Il y a pleins de problèmes potentiels avec ceux-ci - et ne me dites pas qu'ils marchent correctement - je les ai également utilisé pendant des années (et les recommandait même dans la première version de ce HOWTO) !

Pour les utilisateurs de PPP 2.1.2, voici de BIEN MEILLEURS modèles, pris dans la distribution 2.2 de PPP. Je vous conseille de les copier et d'utiliser ces scripts à la place des anciens de PPP-2.1.2.

15.2 Le script ppp-on

C'est le premier des DEUX scripts qui lance la connexion.


#!/bin/sh
#
# Script pour initialiser une connexion PPP. C'est la premiere partie de deux
# scripts. Ce ne sont pas des scripts securises, puisque les codes sont
# visibles avec la commande 'ps'. Cependant ils sont simples.
#
# Ce sont des parametres a changer selon les besoins
TELEPHONE=555-1212    # Le numero de telephone de la connexion
ACCOUNT=george        # Le nom du compte (comme dans 'George Burns')
PASSWORD=gracie       # Le mot de passe du compte (et 'Gracie Allen')
LOCAL_IP=0.0.0.0      # L'adresse IP locale si elle est connue Dynamic = 0.0.0.0
REMOTE_IP=0.0.0.0     # Adresse IP distante. Normally 0.0.0.0
NETMASK=255.255.255.0 # Le masque reseau si besoin
#
# Les exporter pour qu'ils soit disponible avec 'ppp-on-dialer'
export TELEPHONE ACCOUNT PASSWORD
#
# C'est l'emplacement du script qui compose le numero et se connecte.
# Utilisez les noms de fichiers absolus, car la variable $PATH n'est pas
# utilisee avec l'option connect. (Faire ca en etant 'root' entraine un
# trou de securite.)
#
DIALER_SCRIPT=/etc/ppp/ppp-on-dialer
#
# Commencer la connexion
#
#
exec /usr/sbin/pppd debug /dev/ttySx 38400 \
        $LOCAL_IP:$REMOTE_IP \
        connect $DIALER_SCRIPT

Voici le script ppp-on-dialer :


#!/bin/sh
#
# C'est la deuxieme partie du script ppp-on. Il contient le protocole de 
# connexion de la connexion desiree.
#
/usr/sbin/chat -v                                                 \
        TIMEOUT         3                               \
        ABORT           '\nBUSY\r'                      \
        ABORT           '\nNO ANSWER\r'                 \
        ABORT           '\nRINGING\r\n\r\nRINGING\r'    \
        ''              \rAT                            \
        'OK-+++\c-OK'   ATH0                            \
        TIMEOUT         30                              \
        OK              ATDT$TELEPHONE                  \
        CONNECT         ''                              \
        ogin:--ogin:    $ACCOUNT                        \
        assword:        $PASSWORD

Avec PPP-2.2, le script ppp-off ressemble à :


#!/bin/sh
######################################################################
#
# Determine le peripherique a terminer.
#
if [ "$1" = "" ]; then
        DEVICE=ppp0
else
        DEVICE=$1
fi

######################################################################
#
# Si le fichier pid ppp0 est present alors le programme est lance. Le stopper.
if [ -r /var/run/$DEVICE.pid ]; then
        kill -INT `cat /var/run/$DEVICE.pid`
#
# Si le kill ne marche pas, alors il n'y a pas de processus lance pour ce pid.
# Cela peut signifier que le fichier de lock a ete laisse. Vous souhaitez 
# peut-etre detruire le fichier de lock en meme temps.
        if [ ! "$?" = "0" ]; then
                rm -f /var/run/$DEVICE.pid
                echo "ERROR: Removed stale pid file"
                exit 1
        fi
#
# Succes. pppd a enlever tout ce qu'il avait cree.
        echo "PPP link to $DEVICE terminated."
        exit 0
fi
#
# Le processus ppp ne marche pas pour ppp0
echo "ERROR: PPP link is not active on $DEVICE"
exit 1

15.3 Editer les scripts de démarrage de PPP fournis

Puisque les nouveaux scripts sont en deux parties, nous allons les éditer chacun leur tour.

Le script ppp-on

Vous devez éditer ces fichiers pour contenir VOTRE nom utilisateur de votre FAI, VOTRE mot de passe de votre FAI, et le numéro de téléphone de votre FAI.

Chacune des lignes ressemblant à TELEPHONE= définissent une variable du shell contenant les informations à droite du '=' (mise à part les commentaires évidemment). Éditer donc toutes les lignes de ce fichier pour qu'il corresponde a votre FAI et votre connexion.

De plus, si vous configurez l'adresse IP (si vous avez besoin) dans le fichier /etc/ppp/options, DETRUISEZ les lignes mentionnant


$LOCAL_IP:$REMOTE_IP \

Assurez-vous également que la variable shell DIALER_SCRIPT pointe sur le chemin complet du script d'appel qui sera réellement utilisé. Ainsi, si vous déplacez ou renommez ce script, assurez-vous que vous modifier correctement cette ligne dans le script ppp-on !

Le script ppp-on-dialer

C'est le deuxième des scripts qui lance votre liaison PPP.

Remarque : un script chat est normalement sur une ligne complète. Les backslashs sont utilisés pour permettre à la ligne de se répartir sur plusieurs lignes physiques (pour une lisibilité plus humaine) et ne font pas partie du script lui-même.

Cependant, il est très utile de le regarder en détail, comme cela nous comprenons ce qu'il est réellement supposé faire !

15.4 Ce que script Chat signifie...

Un script chat est une séquence de paires de "chaînes d'attentes" et de "chaînes d'envoi ". En particulier, remarquez que nous attendons TOUJOURS quelque chose avant d'envoyer quoi que ce soit.

Si nous envoyons quelque chose SANS avoir rien reçu avant, nous devons attendre une chaîne vide avant (indiquée par un "") Et de la même manière attendre quelque chose sans avoir rien envoyé ! Ainsi, si les chaîne consistent en quelques mots, (c.-à-d. NO CARRIER), vous devez entourez les chaînes par des quotes pour qu'elles soient vues comme une seule entité par chat.

La ligne chat de notre modèle est :


exec /usr/sbin/chat -v

Invoque chat, le -v indique à chat de mettre toutes ses entrée/sorties dans le journal système (généralement /var/log/messages). Une fois que votre script chat marchera correctement, éditez cette ligne et enlevez le -v pour économiser des messages inutiles dans votre syslog.


TIMEOUT         3

Ça définit un temps d'attente de trois secondes avant la réception d'une entrée attendue. Vous devrez l'augmenter à 5 ou 10 secondes si vous utilisez un modem extrêmement lent !


ABORT           '\nBUSY\r'

Si la chaîne BUSY est reçue, abandonner l'opération.

M


ABORT           '\nNO ANSWER\r'

Si la chaîne NO ANSWER est reçue, abandonner l'opération.


ABORT           '\nRINGING\r\n\r\nRINGING\r'

Si la chaîne RINGING est reçue de manière répétée, abandonner l'opération. C'est parce que quelqu'un vous appelle !


"              \rAT

Ne rien attendre du modem et envoyer la chaîne AT.


OK-+++\c-OK   ATH0

C'est un petit plus compliqué car cela utilise certaines capacités de chat à récupérer les erreurs.

Ça veux dire...Expect OK, si on ne l'a pas reçu (parce que le modem n'est pas en ligne de commande) alors envoyer +++ (la chaîne standard des modems compatible Hayes pour retourner en ligne de commande) et attendre OK. Ensuite envoyer ATH0 (la chaîne pour raccrocher). Cela permet au script de répondre à la situation ou votre modem avait laissé la ligne décrochée !


TIMEOUT         30

Mettre le temps d'attente à 30 secondes pour le reste du script. Si vous avez des soucis avec des abandons du script chat à cause de timeout, augmentez cette valeur à 45 secondes ou plus.


OK              ATDT$TELEPHONE

Attends un OK (la réponse du modem à la commande ATH0) et compose le numéro que nous voulez appeler.


CONNECT         ''

Attendre CONNECT(ce que le modem nous envoie lorsque le modem distant décroche) et n'envoie rien en réponse.


ogin:--ogin:    $ACCOUNT

Une fois encore nous avons une récupération d'erreur ici. Attendre le message de login (...ogin:) mais si nous ne le recevons pas au bout d'un certain temps, envoyer un retour chariot et attendre une nouvelle fois le message de login. Lorsque le message est reçu, envoyer le nom utilisateur (stocké dans la variable shell $ACCOUNT).


assword:        $PASSWORD

Attendre le message du mot de passe et envoyer le mot de passe (là aussi stocké dans une variable shell).

Ce script chat à une capacité de récupération d'erreurs résonnable. Chat possède bien d'autres possibilités que celles détaillés. Pour plus d'informations, consulter la page de manuel de chat (man 8 chat).

Démarrer PPP sur le serveur final

Bien que le script ppp-on-dialer soit parfait pour les serveurs qui lancent automatiquement pppd sur le serveur final une fois que vous êtes connectés, certains serveurs nécessitent que vous lanciez PPP explicitement sur le serveur.

Si vous avez besoin d'envoyer une commande de lancement de PPP sur le serveur, vous DEVEZ éditer le script ppp-on-dialer.

A la fin du script (après la ligne password) ajouter une paire attente envoi en plus - elle cherchera un message de login (une suite de caractères qui ont une signification particulière dans le shell Bourne - comme $ et ou (les crochets ouverts et fermés).

Une fois que chat à obtenu le prompt du shell, chat doit envoyer la commande de démarrage de ppp nécessaire sur le serveur PPP de votre FAI.

Pour ma part, mon serveur PPP utilise un prompt Bash standard


[hartr@kepler hartr]$

et nécessite que je tapes


ppp

pour lancer ppp sur le serveur.

Une idée judicieuse peut être d'ajouter un peu de récupération d'erreur, dans mon cas j'utilise


        hartr--hartr    ppp

Cela signifie que si je ne reçois pas le prompt dans le temps imparti, j'envoie un retour chariot et je recherche le prompt une nouvelle fois.

Une fois que le message est reçu, j'envoie la chaîne ppp.

Remarque : n'oubliez pas d'ajouter un \ à la fin de la ligne précédente pour que chat pense que le script de connexion de chat est toujours sur une seule ligne !

Malheureusement, certains serveurs génèrent un nombre de messages très variable ! Vous aurez peut-être besoin de vous connecter plusieurs fois avec minicom pour comprendre comment ça marche et récupérer une chaîne "d'attente" stable.

15.5 Un script chat pour les connections authentifiées avec PAP/CHAP

Si votre FAI utilise PAP/CHAP, alors votre script chat est bien plus simple. Tout ce que votre script chat doit faire est de composer le numéro, attendre la connexion et ensuite laisser pppd s'occuper du processus de connexion !


#!/bin/sh
#
# C'est la deuxieme partie du script ppp-on. Il contient le protocole de 
# connexion de la connexion desiree.
#
exec /usr/sbin/chat -v                                  \
        TIMEOUT         3                               \
        ABORT           '\nBUSY\r'                      \
        ABORT           '\nNO ANSWER\r'                 \
        ABORT           '\nRINGING\r\n\r\nRINGING\r'    \
        ''              \rAT                            \
        'OK-+++\c-OK'   ATH0                            \
        TIMEOUT         30                              \
        OK              ATDT$TELEPHONE                  \
        CONNECT         ''                              \

15.6 Les options debug et file option_file de pppd

Comme nous l'avons déjà vu, vous pouvez activer les informations de débuggage avec l'option -d de pppd. L'option 'debug' est équivalente à celle-ci.

Puisque vous établissez la connexion avec un nouveau script, laissez pour le moment les informations de débuggage. (Attention : si votre espace disque est réduit, les échanges de connexion de pppd peuvent rapidement augmenter votre fichier syslog et vous amener des problèmes - mais pour aller jusque là, il faut que vous essayez et vous échouiez vos connexions un certain temps).

Une fois que tout marche correctement, vous pouvez alors enlever cette option.

Si vous avez appelé votre fichier d'options de ppp autrement que /etc/ppp/options ou /etc/ppp/options.ttySx, spécifiez le nom du fichier avec l'option file de pppd :


exec /usr/sbin/pppd debug file options.myserver /dev/ttyS0 38400 \


Chapitre suivant, Chapitre Précédent

Table des matières de ce chapitre, Table des matières générale

Début du document, Début de ce chapitre