В Linux. 2 Приобретение и инсталляция Linux. 3 Учебник по Linux 4 Администрирование системы. 5 The X window System. 6 Работа в сети
Вид материала | Учебник |
Содержание6.2.3 Создание скриптов установления связи. Local_ip:$remote_ip \ Timeout 3 \ 6.2.4 Редактирование скриптов запуска PPP. Local_ip:$remote_ip \ Скрипт ppp-on-dialer. Ok atdp$telephone |
- RH253 Сетевые службы Red Hat Linux и администрирование безопасности, 45.9kb.
- Документация Calculate Linux, 12378.73kb.
- Программы повышения квалификации ункит 1- «Linux для начинающих» Цель, 11.83kb.
- Концепция развития спо в РФ 2 История Linux, 105.81kb.
- Gnu/Linux, 51.18kb.
- Лекция 17. Операционная система Linux, 126.24kb.
- Исследование возможностей ос linux для приложений реального времени с обработкой разнородной, 98.25kb.
- Windows против Linux, 88.72kb.
- Учебный план курса "Базовая поддержка и администрирование Linux" Цель дать знания, 34.75kb.
- Исследование возможностей операционной системы Linux На примере операционной системы, 748.67kb.
6.2.3 Создание скриптов установления связи.
Хотя и в дальнейшем можно устанавливать связь вручную, как это делалось выше, намного удобнее создать несколько скриптов, которые будут делать все операции автоматически. При этом пользователю (из группы, которой доступны команды поддержки PPP, либо пользователю root) будет достаточно ввести одну команду, чтобы эти скрипты автоматически установили связь, вошли в систему сервера и запустили программы PPP.
Ниже даются скрипты для случая, когда сервер провайдера не использует PAP/CHAP.
Если программное обеспечение PPP установлено правильно, то среди файлов должны присутствовать два файла с примерами. Для версии PPP 2.1.2 эти файлы находятся в каталоге /usr/sbin, а для версии PPP 2.2 в каталоге /etc/ppp/scripts. Названия файлов:
- для PPP 2.1.2:
- ppp-on
- ppp-off
- для PPP 2.2:
- 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
Для версии 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
6.2.4 Редактирование скриптов запуска PPP.
Поскольку новые скрипты состоят из двух частей, они будут редактироваться по очереди.
Скрипт ppp-on.
Скрипт ppp-on надо отредактировать, вставив правильные имена пользователя и пароль на сервере, а также телефонный номер сервера.
Каждая строка скрипта, начинающаяся, например, с TELEPHONE=, в действительности устанавливает значение некоторой переменной командной оболочки, причем это значение стоит справа от символа '=' (разумеется, комментарии не учитываются). Редактироваться должны именно эти значения.
Поскольку IP-адрес устанавливается в файле /etc/ppp/options (если он требуется), то надо удалить следующую строчку:
$LOCAL_IP:$REMOTE_IP \
Также следует убедиться, что переменная оболочки DIALER_SCRIPT указывает на полный путь к файлу, содержащему именно этот скрипт набора номера, который будет использоваться. Если файл с исходным скриптом был перенесен на другое место или переименован, проверьте правильность этой строки в скрипте ppp-on.
Скрипт ppp-on-dialer.
Это второй из скриптов, который устанавливает PPP-соединение.
Замечание: скрипт диалога (chat script) обычно целиком помещается на одной строке. Обратные слэши используются для того, чтобы объединить несколько коротких строк, которые можно выводить сразу на экран, так что командная оболочка будет воспринимать их как одну очень длинную строку. Таким образом, эти символы не являются частью скрипта.
Будет, тем не менее, полезно познакомиться с текстом этого скрипта и понять, что он должен делать.
Скрипт диалога (chat script) является последовательностью пар 'строка ожидания'-'посылаемая строка' ('expect string'-'send string'). Заметим, что любой посылке всегда предшествует ожидание некоторого сигнала.
Если некая строка посылается без предварительного ожидания прихода какого-либо сигнала (или наоборот), то надо использовать пустую строку ожидания (или посылаемую строку), обозначаемую как "". Кавычки должны обрамлять сообщение и в том случае, когда оно состоит из нескольких слов (пример: сообщение 'NO CARRIER'), так что скрипт воспринимает его как единую строку.
В приведенном примере диалоговая строка выглядит так:
exec /usr/sbin/chat -v
При вызове диалогового скрипта использована опция -v, указывающая, что все сообщения ввода и вывода будут сохраняться в системном протоколе (обычно это файл /var/log/messages). После того, как этот скрипт показал свою работоспособность, эту опцию можно убрать, сократив тем самым объем информации в системных протоколах.
Следующая строка:
TIMEOUT 3
устанавливает время ожидания для прихода ожидаемых строк, равное трем секундам. Для очень медленного модема это время можно увеличить до 5 или 10 секунд.
Строка:
ABORT '\nBUSY\r'
говорит, что при приходе строки 'BUSY' надо прервать работу.
Аналогично нужно поступить, если придет строка 'NO ANSWER':
ABORT '\nNO ANSWER\r'
или строка 'RINGING':
ABORT '\nRINGING\r\n\r\nRINGING\r'
(кто-то уже звонит по телефону клиента).
Посылаем модему строку 'AT'; в ответ ничего не ожидается:
'' \rAT
В следующей строке:
OK-+++\c-OK ATH0
использованы некоторые возможности восстановления после сообщений об ошибке.
Здесь от модема ожидается строка 'OK'; если она не пришла (из-за того, что модем не находится в командном режиме), то посылается строка '+++' (эта строка возвращает стандартный Hayes-совместимый модем в командный режим) и ожидается 'OK', а затем посылается команда ATH0. Эта команда позволяет скрипту справляться с ситуацией, когда модем завис в режиме on-line.
Следующая строка:
TIMEOUT 30
устанавливает время ожидания, равное 30 секундам, на весь остаток скрипта. Если это время окажется недостаточным, его можно увеличить до 45 секунд и более.
Строка набора номера:
OK ATDP$TELEPHONE
ожидает 'OK' от модема в ответ на команду ATH0, и набирает требуемый номер.
Дальше ждем сообщения 'CONNECT':
CONNECT ''
Наш модем также посылает 'CONNECT', когда отвечает удаленный модем.
Теперь надо войти в систему:
ogin:--ogin: $ACCOUNT
В эту команду встроен механизм, который, когда время ожидания будет исчерпано, а приглашение войти в систему (...ogin:) получено не будет, посылает пустую строку и еще раз ждет приглашения. Когда приглашение получено, то посылается имя пользователя, которое хранится в переменной командной оболочки по имени $ACCOUNT.
Теперь ожидается приглашение ввести пароль:
assword: $PASSWORD
и он вводится.
В данном скрипте предусмотрены возможности возникновения различных ошибок. Однако программа chat имеет гораздо больше возможностей, чем здесь продемонстрировано. Более полную информацию можно получить на ее man-странице (man 8 chat).