PPP HOWTO: Автоматизация ваших соединений - Создание скриптов соединения
Next Previous Contents15. Автоматизация ваших соединений - Создание скриптов соединения
Хотя вы можете продолжать регистрироваться вручную как было показано выше, гораздо лучше настроить некоторые скрипты, чтобы для вас это происходило автоматически.
Набор скриптов автоматизирует процесс входа в систему и запускает PPP так что все, что вы должны сделать (от root или как член группы PPP) - дать одну команду запуска вашего соединения.
15.1 Скрипты соединения для аутентификации по имени/паролю пользователя
Если ваш ISP не требует использования 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, я настойчиво прошу вас удалить файлы примеров. С ними имеются потенциальные проблемы - и не сообщайте мне, что они прекрасно работают - я использовал их очень долго (и даже рекомендовал их в первой версии этого HOWTO)!
Для пользователя PPP 2.1.2 имеется ЛУЧШАя версия шаблона, взятая из дистрибутива PPP 2.2 . Я предлагаю вам скопировать и использовать эти скрипты вместо старого скрипта PPP-2.1.2 .
15.2 Скрипт ppp-on
Это первый из ПАРЫ скриптов, которые фактически запускают соединение.
______________________________________________________________________ #!/bin/sh # # Скрипт для инициации соединения PPP. Это первая часть из пары скриптов. # Это не секретные скрипты, так как коды видны командой ps. # Однако это пример. # # Это параметры. Измените их как нужно. TELEPHONE=555-1212 # Телефонный номер соединения ACCOUNT=george # Имя пользователя для входа ('George Burns') PASSWORD=gracie # Пароль для этого аккаунта (и 'Gracie Allen') LOCAL_IP=0.0.0.0 # Локальный 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 # # Это расположение скрипта, который звонит по телефону и регистрируется в # системе. Пожалуйста, используйте абсолютное имя файла, так как опция connect # не использует переменную $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 ATDT$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 файл. # Возможно, вы захотите удалить его. 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 # # для ppp0 не запущен ppp процесс echo "ERROR: PPP link is not active on $DEVICE" exit 1 ______________________________________________________________________
15.3 Редактирование скриптов запуска PPP
Поскольку новые скрипты приходят двумя частями, мы в свою очередь отредактируем их.
Скрипт ppp-on
Вы должны будете отредактировать скрипт чтобы вставить ВАШЕ имя пользователя на вашем ISP, ВАШ пароль на вашем ISP, номер телефона вашего ISP.
Каждая из строк типа TELEPHONE= - это фактически установленные переменные shell, которые содержат информацию справа от = (исключая комментарии, конечно). Отредактируйте каждую из этих строк так, чтобы они соответствовали вашему ISP и соединению.
Также, поскольку вы устанавливаете IP адрес (если вам это нужно) в файле /etc/ppp/options, УДАЛИТЕ строку, которая говорит
______________________________________________________________________ $LOCAL_IP:$REMOTE_IP \ ______________________________________________________________________
Также, удостоверьтесь, что переменная оболочки DIALER_SCRIPT указывает на полный путь и имя скрипта для дозвона, который вы фактически собираетесь использовать. Так что, если вы переместили его или переименовали скрипт, удостоверьтесь, что вы отредактировали эту строку правильно в скрипте ppp-on!
Сценарий ppp-on-dialer
Это - второй скрипт, который фактически поднимает нашу ppp связь.
Обратите внимание: chat скрипт обычно однострочный. Наклонные черты влево используются, чтобы разместить строки на нескольких физических строках (для удобочитаемости человеком) и не формировать часть скрипта самому.
Однако, очень полезно рассмотреть это подробно так, чтобы мы поняли, что же фактически (предположительно) происходит!
15.4 Что означает скрипт chat...
Скрипт chat - последовательность пар "ожидаемая строка" "посылаемая строка". В частности обратите внимание, что мы ВСЕГДА ожидаем что-нибудь перед тем, как пошлем что-либо.
Если мы должны послать что-то БЕЗ того, чтобы сначала получить что-нибудь, мы должны использовать пустую строку ожидания (обозначаемую "") и аналогично для ожидания чего-либо без того, чтобы посылания чего-нибудь! Также, если строка состоит из нескольких слов, (например, NO CARRIER), вы должны взять строку в кавычки, чтобы chat вопринял ее как одно целое.
Строка chat в нашем шаблоне:
______________________________________________________________________ exec /usr/sbin/chat -v ______________________________________________________________________
В вызове chat опция -v говорит, чтобы chat копировал ВЕСЬ ввод/вывод в систеный лог (обычно /var/log/messages). Как только вы убедитесь, что скрипт chat работает надежно, отредактируйте эту строку, чтобы удалить -v, чтобы не хранить ненужную информацию в вашем syslog.
______________________________________________________________________ TIMEOUT 3 ______________________________________________________________________
Это устанавливает паузу для получения ожидаемого ввода в 3 секунды. Вы можете увеличить это значение до 5 или 10 секунд, если вы используете медленный модем!
______________________________________________________________________ ABORT '\nBUSY\r' ______________________________________________________________________
Если получена строка BUSY, то операция аварийно прекращается.
______________________________________________________________________ ABORT '\nNO ANSWER\r' ______________________________________________________________________
Если получена строка NO ANSWER, то операция аварийно прекращается.
______________________________________________________________________ ABORT '\nRINGING\r\n\r\nRINGING\r' ______________________________________________________________________
Если (повторимся) получена строка RINGING, то операция аварийно прекращается.
Это потому, что кто-то сидит на вашей телефонной линии!
______________________________________________________________________ " \rAT ______________________________________________________________________
Не ожидаем ничего от модема, и послаем строку в него.
______________________________________________________________________ OK-+++\c-OK ATH0 ______________________________________________________________________
Это немного более сложно, поскольку использует некоторые из возможностей восстановления при ошибках chat.
What is says is...Ожидаем OK, если он не получен (потому что модем не в командном режиме), затем посылаем +++ (стандартная строка для Hayes-совместимых модемов, которая возвращает модем в командный режим) и ожидаем OK.
Затем посылаем ATH0 (строка для завершения связи модема). Это позволяет вашему скрипту справляться с вашим модемом, зависшим во время сеанса связи!
______________________________________________________________________ TIMEOUT 30 ______________________________________________________________________
Установим паузу по времени в 30 секунд для оставшихся команд скрипта. Если вы испытываете проблемы со скриптом chat, прерывающимся из-за пауз, увеличьте это значение до 45 секунд или больше.
______________________________________________________________________ OK ATDT$TELEPHONE ______________________________________________________________________
Ожидаем OK (ответ модема на команду ATH0) и набираем номер, на который мы хотим позвонить.
______________________________________________________________________ CONNECT '' ______________________________________________________________________
Дожидаемся строки CONNECT (которую наш модем посылает, когда удаленные модем отвечает) и не посылаем в ответ ничего.
______________________________________________________________________ ogin:--ogin: $ACCOUNT ______________________________________________________________________
Снова, здесь мы вставляем кое-какое исправление ошибок. Ожидаем подсказку входа в систему (... ogin:), но если мы не получаем ее по истечении паузы, то посылаем возврат каретки и затем ищем подсказку входа в систему снова. Когда подсказка получена, посылаем username (сохраненное в переменной shell $ACCOUNT).
______________________________________________________________________ assword: $PASSWORD ______________________________________________________________________
Ожидаем запроса пароля и посылаем наш пароль (аналогично сохраненный в переменной shell).
Этот скрипт chat имеет приемлемую возможность исправления ошибок. chat имеет значительно большее количество возможностей, чем показано здесь. Для подробной информации проконсультируйтесь с man chat (man 8 chat).
Запуск PPP на серверной стороне моединения
Хотя скрипт ppp-on-dialer отлично подходит для серверов, которые автоматически запускают pppd на серверной стороне как только вы зарегистрировалися, некоторые серверы требуют, чтобы вы явно дали команду запуска PPP на сервере.
Если вы должны дать команду, чтобы запустить PPP на сервере, вы должны отредактировать скрипт ppp-on-dialer.
В КОНЦЕ сценария (после строки пароля) добавьте дополнительную пару ожидаемой-посылаемой строк - которая искала бы вашу подсказку регистрации в системе (отличая символы, которые имеют специальное значение в оболочке Bourne - типа $ и [ или ] (открытые и закрытые квадратные скобки).
Как только программа chat нашла командную строку оболочки, она должна выдать команду запуска ppp, требуемую для PPP сервера вашего ISP.
В моем случае, мой PPP сервер использует стандартную подсказку bash Linux.
______________________________________________________________________ [hartr@kepler hartr]$ ______________________________________________________________________
и требует, чтобы я напечатал
______________________________________________________________________ ppp ______________________________________________________________________
чтобы запустить PPP на сервере.
Хорошо бы учесть здесь некоторые ошибки, так например в моем случае я использую
______________________________________________________________________ hartr--hartr ppp ______________________________________________________________________Это значит, что если мы не получили подсказку в течении заданной паузы, то посылаем возврат каретки и ищем подсказку снова.
Как только подсказка получена, посылаем строку ppp.
Обратите внимание: не забудьте добавить \ к концу предыдущей строки, так что бы chat думал, что весь сценарий chat состоит из одной строки!
К сожалению, на некоторых серверах набор подсказок часто меняется!
Возможно вам понадобится несколько раз зарегистрироваться, используя minicom, чтобы понять, что происходит, и найти устойчивую "ожидаемую" строку.
15.5 Сценарий chat для соединения PAP/CHAP
Если ваш ISP использует PAP/CHAP, то ваш сценарий chat намного более простой.
Весь ваш сценарий chat должен делать вот что - звонить по номеру телефона, ждать соединения и затем позволить pppd обработать регистрацию в системе!
______________________________________________________________________ #!/bin/sh # # This is part 2 of the ppp-on script. It will perform the connection # protocol for the desired connection. # 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 Отладка pppd и опция file option_file
Как мы уже видели, вы можете включить отладочную информацию опцией -d в pppd. Опция 'debug' эквивалентна ей.
Поскольку мы устанавливаем новое соединение с новым скриптом, сейчас поставьте опцию отладки. (Предупреждение: если у вас мало дискового пространства, то логи pppd могут быстро увеличить ваш файл syslog и создать вам проблему - but to do this you must fail to connect and keep on trying for quite a few minutes).
Как только вы обрадуетесь, что все работает правильно, можете удалить эту опцию.
Если вы назвали ваш ppp файл опций как-нибудь иначе, чем /etc/ppp/options, или /etc/ppp/options.ttySx, определите имя файла опцией file в pppd - например
______________________________________________________________________ exec /usr/sbin/pppd debug file options.myserver /dev/ttyS0 38400 \ ______________________________________________________________________
Next Previous Contents