Avanti Indietro Indice

15. Automatizzare la propria connessione - Creazione degli script di connessione

Sebbene si possa continuare a connettersi a mano come appena mostrato, è molto più elegante creare alcuni script che lo facciano automaticamente per noi.

Un insieme di script che automatizzano il login e l'avvio del PPP cosicché tutto quello che si deve fare (come root o come membro del gruppo PPP) è dare un unico comando che avvii la connessione.

15.1 Script di connessione per l'autentificazione con Nome utente/Password

Se il proprio ISP NON richiede l'uso di PAP/CHAP, questi sono gli script per te!

Se il pacchetto ppp è installato correttamente, si dovrebbero avere due file di esempio. Per PPP 2.1.2 sono in /usr/sbin e per PPP 2.2 sono in /etc/ppp/scripts. Si chiamano

per PPP-2.1.2

ppp-on
ppp-off

e per PPP-2.2

ppp-off
ppp-on
ppp-on-dialer

Ora, se si sta usando PPP 2.1.2, suggerisco caldamente di cancellare i file d'esempio. Ci sono potenziali problemi con questi - e non venitemi a dire che funzionano bene, li ho usati per anni anch'io (e li raccomandavo nella prima versione di questo HOWTO)!

A beneficio degli utilizzatori di PPP 2.1.2, qui sono riportate delle versioni d'esempio MIGLIORI prese dalla distribuzione di PPP 2.2. Suggerisco di copiarsi ed usare questi script invece dei vecchi script di PPP 2.1.2.

15.2 Lo script ppp-on

Questo è il primo di una COPPIA di script che lanciano la connessione.


#!/bin/sh
#
# Script per inizializzare una connessione PPP. Questo è il primo di
# una coppia di script. Questa coppia di script non è sicura in quanto
# il codice è visibile usando il comando `ps'. Comunque, è semplice.
#
# Questi sono i parametri. Li si modifichi a quel che necessita.
TELEPHONE=555-1212      # Il numero telefonico per la connessione
ACCOUNT=george          # Il nome di account per il login (come in 
                        # 'George Burns')
PASSWORD=gracie         # La password per questo account (e 'Gracie Allen')
LOCAL_IP=0.0.0.0        # Indirizzo IP locale, se noto. Dinamico = 0.0.0.0
REMOTE_IP=0.0.0.0       # Indirizzo IP remoto, se desiderato.
                        # Dinamico = 0.0.0.0
NETMASK=255.255.255.0   # La netmask appropriata, se necessaria
#
# Gli esporta rendendoli globali così saranno disponibili anche a
# 'ppp-on-dialer' 
export TELEPHONE ACCOUNT PASSWORD
#
# Questa è la posizione dello script che compone il numero e fa il
# login. Si invita ad usare il nome file assoluto in quanto la
# variabile $PATH non è usata nelle opzioni di connessione (e farlo in
# un account come 'root' sarebbe un buco di sicurezza, quindi non lo
# si richieda).
#
DIALER_SCRIPT=/etc/ppp/ppp-on-dialer
#
# Inizializza la connessione
#
#
exec /usr/sbin/pppd debug /dev/ttySx 38400 \
        $LOCAL_IP:$REMOTE_IP \
        connect $DIALER_SCRIPT

Ecco qui lo script ppp-on-dialer:


#!/bin/sh
#
# Questa è la seconda parte dello script ppp-on. Effettua il
# protocollo di connessione per la connessione desiderata.
#
/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

Per PPP-2.2, lo script ppp-off è qualcosa di simile a:


#!/bin/sh
######################################################################
#
# Determina il dispositivo da chiudere
#
if [ "$1" = "" ]; then
        DEVICE=ppp0
else
        DEVICE=$1
fi

######################################################################
#
# Se esiste il pid file ppp0 allora il programma è in esecuzione. Lo 
# ferma.
if [ -r /var/run/$DEVICE.pid ]; then
        kill -INT `cat /var/run/$DEVICE.pid`
#
# Se il kill non funziona allora non c'è alcun processo in esecuzione
# con questo pid. Significa inoltre che il file di lock è stato
# lasciato lì. Allo stesso tempo si può quindi voler cancellare il
# file di lock.
        if [ ! "$?" = "0" ]; then
                rm -f /var/run/$DEVICE.pid
                echo "ERRORE: Rimozione del vecchio file pid"
                exit 1
        fi
#
# Successo. Si lascia che pppd pulisca da solo la sua roba vecchia.
        echo "Connessione PPP a $DEVICE terminata."
        exit 0
fi
#
# Il processo ppp non è in esecuzione per ppp0
echo "ERRORE: connessione PPP non attiva su $DEVICE"
exit 1

15.3 Modificare gli script forniti per l'avvio del PPP

Poiché gli script sono due, andremo a modificarne uno alla volta.

Lo script ppp-on

Si deve modificare questo script per riflettere il PROPRIO nome utente nell'ISP, la PROPRIA password per l'ISP, e il numero di telefono di quest'ultimo.

Ognuna delle righe simili a TELEPHONE= in realtà impostano una variabile shell che contiene l'informazione a destra di '=' (ad esclusione dei commenti naturalmente). Quindi si modifichi ognuna di queste righe in modo che vadano bene per la propria connessione e il proprio ISP.

Inoltre, se si imposta il numero IP (se ce n'è bisogno), nel file /etc/ppp/options si CANCELLI la riga che dice


$LOCAL_IP:$REMOTE_IP \

Inoltre, ci si assicuri che la variabile shell DIALER_SCRIPT punti al percorso completo e al nome dello script che compone il numero che si intende usare. Quindi, se si è spostato o rinominato lo script, ci si assicuri di modificare in modo adeguato lo script ppp-on.

Lo script ppp-on-dialer

Questo è il secondo degli script che mettono in funzione la propria connessione PPP.

Nota: uno di script di conversazione (chat) è solitamente tutto in una riga. I backslash ('\') sono usati per permettere la continuazione di una riga in più righe fisiche (per comodità di lettura) e non fanno parte dello script stesso.

Comunque, è molto utile analizzarlo in dettaglio così da capire cosa realmente fa (o dovrebbe fare)!

15.4 Il significato di uno script di conversazione (chat)...

Un script di conversazione è una sequenza di coppie "stringa attesa" "stringa inviata". In particolare si noti che ci si aspetta SEMPRE qualcosa prima di inviare qualcos'altro.

Se si invia qualcosa SENZA prima ricevere niente, si deve usare una stringa attesa vuota (indicata da "") e similmente per aspettare qualcosa senza mandare niente! Inoltre, se una stringa consiste di diverse parole (p.es. NO CARRIER), bisogna racchiuderla tra apici in modo che chat la veda come una singola entità.

La riga di conversazione nel nostro esempio è:


exec /usr/sbin/chat -v

Invocando chat, il -v dice a chat di copiare TUTTO il suo I/O nei log di sistema (solitamente /var/log/messages). Una volta che si è contenti di come funziona lo script, si modifichi questa riga per rimuovere il -v per preservare i log di sistema da confusione non necessaria.


TIMEOUT         3

Questo imposta il timeout per la ricezione di un input atteso a tre secondi. Ci può essere bisogno di incrementarlo diciamo a 5 o 10 secondi se si usa un modem veramente lento!


ABORT           '\nBUSY\r'

Se chat riceve la stringa BUSY, termina l'operazione.


ABORT           '\nNO ANSWER\r'

Se chat riceve la stringa NO ANSWER, termina l'operazione.


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

Se chat riceve (ripetutamente) la stringa RINGING, termina l'operazione. Significa che qualcuno vi sta chiamando al telefono!


"              \rAT

Attende che il modem non ritorni niente prima di inviare la stringa AT.


OK-+++\c-OK   ATH0

Questa è un po' più complicata in quanto sfrutta qualcuna delle capacità di recupero dagli errori di chat.

Quel che dice è...Attendi OK, se NON è ricevuto (perché in modem non è in modo comandi) allora invia +++ (la stringa predefinita compatibile Hayes che riporta il modem in modo comandi) e attendi OK. Poi invia ATH0 (la stringa di "riattacco" del modem). Ciò permette al nostro script di far fronte alle situazioni nella quali il proprio modem è "bloccato in linea" ("stuck on-line")!


TIMEOUT         30

Imposta il timeout a 30 secondi per il resto dello script. Se si ha esperienza di problemi con lo script di chat che termina a causa di timeout, lo si incrementi a 45 secondi o più.


OK              ATDT$TELEPHONE

Attende OK (la risposta del modem al comando ATH0) e compone il numero che si vuole chiamare.


CONNECT         ''

Attende CONNECT (che il modem invia quando il modem remoto risponde) e non invia niente in risposta.


ogin:--ogin:    $ACCOUNT

Ancora, abbiamo anche qui un po' di recupero dagli errori. Aspetta il prompt per il login (...ogin:) ma se non lo riceve entro il timeout, invia un return e poi attende ancora il prompt per il login. Quando ha ricevuto il prompt, invia il nome utente (salvato nella variabile $ACCOUNT).


assword:        $PASSWORD

Attende il prompt per la password e invia la password (ancora salvata in una variabile shell).

Questo script ha delle ragionevoli capacità per il recupero dagli errori. chat ha considerevolmente molte più possibilità di quelle qui dimostrate. Per maggiori informazioni si consulti la pagina di manuale di chat (man 8 chat).

L'avvio di PPP dal lato server

Sebbene lo script ppp-on-dialer vada bene per server che avviano automaticamente il pppd da loro lato della connessione una volta effettuato il login, alcuni server richiedono che si avvii esplicitamente il PPP nel server.

Se si deve dare un comando per avviare il PPP sul server, allora si DEVE modificare lo script ppp-on-dialer.

Alla FINE dello script (dopo la riga della password) si aggiunga un'altra coppia attesa inviata - questa cercherà il proprio prompt della shell (si faccia attenzione ai caratteri che hanno un significato particolare nelle Bourne shell, come $ e [ o ] (parentesi quadre aperte e chiuse).

Una volta che chat ha trovato il prompt della shell, deve dare il comando di avvio del PPP richiesto dal proprio ISP.

Nel mio caso, il mio server PPP usa il prompt della Linux Bash predefinito


[hartr@kepler hartr]$

e richiede che io digiti


ppp

per avviare il PPP sul server.

È una buona idea permettere un po' di recupero dagli errori anche qui, quindi nel mio caso uso


        hartr--hartr    ppp

Questo dice che se non si riceve il prompt entro il timeout, di inviare un ritorno carrello (carriage return) e di cercare un'altra volta il prompt.

Una volta ricevuto il prompt, allora invia la stringa ppp.

Nota: non si dimentichi di aggiungere un \ alla fine della riga precedente cosicché chat pensi ancora che l'intero script di conversazione sia in una riga!

Sfortunamente, alcuni server producono un insieme di prompt molto variabile. Può essere necessario effettuare più volte il login usando minicom per capire l'andamento e scegliere una stringa "attesa" stabile.

15.5 Uno script di conversazione per le connessioni autentificate con PAP/CHAP

Se il proprio ISP usa PAP/CHAP, allora lo script di conversazione è molto più semplice. Tutto ciò che lo script deve fare è di comporre il numero telefonico, attendere la connessione e poi lasciare che pppd gestisca il login!


#!/bin/sh
#
# Questa è la parte 2 dello script ppp-on. Effettuerà il protocollo di
# connessione per la connessione desiderata.
#
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 Le opzioni "debug" e "file file_opzioni" di pppd

Come si è già visto, si può abilitare la registrazione delle informazioni di debug usando l'opzione -d di pppd. L'opzione 'debug' è equivalente.

Poiché stiamo stabilendo una connessione con un nuovo script, per il momento si lasci l'opzione per il debug (Attenzione: se lo spazio del disco è stringente, la registrazione degli scambi pppd può far aumentare rapidamente la dimensione del file syslog, causando problemi - questo succede solo nel caso in cui si fallisce la connessione e si continua a provare per qualche minuto).

Una volta contenti di come tutto funziona, si può rimuovere questa opzione.

Se si è chiamato il file delle opzioni di ppp con qualcosa di diverso da /etc/ppp/options o /etc/ppp/options.ttySx, si specifichi il nome del file con l'opzione file di pppd - p.es.


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


Avanti Indietro Indice