PPP HOWTO: Автоматизация ваших соединений - Создание скриптов соединения

Next Previous Contents

15. Автоматизация ваших соединений - Создание скриптов соединения

Хотя вы можете продолжать регистрироваться вручную как было показано выше, гораздо лучше настроить некоторые скрипты, чтобы для вас это происходило автоматически.

Набор скриптов автоматизирует процесс входа в систему и запускает 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