Хотя и в дальнейшем можно устанавливать связь вручную, как это делалось выше, намного удобнее создать несколько скриптов, которые будут делать все операции автоматически. При этом пользователю (из группы, которой доступны команды поддержки PPP, либо пользователю root) будет достаточно ввести одну команду, чтобы эти скрипты автоматически установили связь, вошли в систему сервера и запустили программы PPP.
Ниже даются скрипты для случая, когда сервер провайдера не использует PAP/CHAP.
Если программное обеспечение PPP установлено правильно, то среди файлов должны присутствовать два файла с примерами. Для версии PPP 2.1.2 эти файлы находятся в каталоге /usr/sbin, а для версии PPP 2.2 -- в каталоге /etc/ppp/scripts. Названия файлов:
ppp-on ppp-off
ppp-off ppp-on ppp-on-dialer
Если используется версия PPP 2.1.2, то мы советуем удалить файлы с примерами, поскольку их использование чревато проблемами (несмотря на то, что они длительное время использовались и даже рекомендовались в ранних версиях документа PPP-HOWTO). Для пользователей версии PPP 2.1.2 здесь даются более удачные образцы, взятые из дистрибутива версии PPP 2.2. Их предлагается скопировать и использовать вместо старых.
Скрипт ppp-on является первым из пары, которая осуществляет соединение.
#!/bin/sh
#
# Это скрипт для инициирования PPP-соединения и первый из
# пары предназначенных для этого скриптов. Они не отвечают
# требованиям безопасности, поскольку коды можно увидеть
# командой ps. Преимущество этих скриптов в их простоте.
#
# Далее идут параметры. Их нужно заменить на параметры
# для конкретного клиентского компьютера.
#
TELEPHONE=555-1212 # Телефонный номер сервера
ACCOUNT=george # Имя пользователя для входа в
# систему сервера
PASSWORD=gracie # Пароль
LOCAL_IP=0.0.0.0 # IP-адрес клиента (если известен).
# При динамическом назначении
# IP-адрес=0.0.0.0
REMOTE_IP=0.0.0.0 # IP-адрес удаленного компьютера
# (если нужен). Обычно также 0.0.0.0
NETMASK=255.255.255.0 # Соответствующая маска (если нужна)
#
# Параметры надо экспортировать, чтобы они стали
# доступны скрипту 'ppp-on-dialer'
#
export TELEPHONE ACCOUNT PASSWORD
#
# Здесь указывается местоположение скрипта, который набирает
# номер и входит в систему сервера. Надо указывать абсолютный
# путь, поскольку переменная $PATH при соединении не
# используется. Делать это пользователю root не следует,
# так как это нарушит систему безопасности.
#
DIALER_SCRIPT=/etc/ppp/ppp-on-dialer
#
# Инициируем соединение
#
#
exec /usr/sbin/pppd debug /dev/ttySx 38400 \
$LOCAL_IP:$REMOTE_IP \
connect $DIALER_SCRIPT
Теперь приводим скрипт ppp-on-dialer (второй из этой пары):
#!/bin/sh
#
# Это вторая часть скрипта ppp-on, предназначенная для
# осуществления протокола соединения
#
/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 ATDP$TELEPHONE \
CONNECT '' \
ogin:--ogin: $ACCOUNT \
assword: $PASSWORD
Отметим, что четвертая снизу строка этого скрипта предполагает импульсный режим набора, принятый, в частности, в России. Для тонального набора в посылаемой строке должна быть команда ATDT$TELEPHONE.
Для версии PPP 2.2 скрипт ppp-off представляется следующим образом:
#!/bin/sh
#############################################################
#
# Определить устройство, на котором надо прервать связь.
#
if [ "$1" = "" ]; then
DEVICE=ppp0
else
DEVICE=$1
fi
#############################################################
#
# Если имеется pid-файл ppp0, то программа работает,
# и ее надо остановить.
if [ -r /var/run/$DEVICE.pid ]; then
kill -INT `cat /var/run/$DEVICE.pid`
#
# Если команда kill не сработала, то значит, этому pid
# не соответствует никакой процесс, или что был оставлен
# файл захвата (lock file). Теперь можно удалить это файл.
#
if [ ! "$?" = "0" ]; then
rm -f /var/run/$DEVICE.pid
echo "ERROR: Removed stale pid file"
exit 1
fi
#
# Процесс уничтожен. Теперь пусть программа pppd удалит
# результаты своей деятельности.
#
echo "PPP link to $DEVICE terminated."
exit 0
fi
#
# Нет процесса ppp, соответствующего ppp0
echo "ERROR: PPP link is not active on $DEVICE"
exit 1