Linux 版 (精华区)

发信人: clx (楚留香), 信区: Unix
标  题: PPP HOWTO 中译版(16)
发信站: 紫 丁 香 (Sat Jun 27 17:02:28 1998), 转信

PPP HOWTO 中译版 : 使你的连结自动化 - 创造连结指令稿
Previous: 以手动方式建立 PPP 连结
Next: 测试你的连线指令稿 


15. 使你的连结自动化 - 创造连结指令稿

一旦你可以用上述的方法用手动方式签入,更好的做法是建立一些
指令稿来自动为你进行这些工作.

一份 chat 指令稿可以自动化签入以及起动 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
#
# Script to initiate a PPP connection. This is the first part of the
# pair of scripts. This is not a secure pair of scripts as the codes
# are visible with the 'ps' command.  However, it is simple.
#
# These are the parameters. Change as needed.
TELEPHONE=555-1212      # The telephone number for the connection
ACCOUNT=george          # The account name for logon (as in 'George Burns')
PASSWORD=gracie         # The password for this account (and 'Gracie Allen')
LOCAL_IP=0.0.0.0        # Local IP address if known. Dynamic = 0.0.0.0
REMOTE_IP=0.0.0.0       # Remote IP address if desired. Normally 0.0.0.0
NETMASK=255.255.255.0   # The proper netmask if needed
#
# Export them so that they will be available to 'ppp-on-dialer'
export TELEPHONE ACCOUNT PASSWORD
#
# This is the location of the script which dials the phone and logs
# in.  Please use the absolute file name as the $PATH variable is not
# used on the connect option.  (To do so on a 'root' account would be
# a security hole so don't ask.)
#
DIALER_SCRIPT=/etc/ppp/ppp-on-dialer
#
# Initiate the connection
#
#
exec /usr/sbin/pppd debug /dev/ttySx 38400 \
        $LOCAL_IP:$REMOTE_IP \
        connect $DIALER_SCRIPT



而这是 ppp-on-dialer 指令稿:-



#!/bin/sh
#
# This is part 2 of the ppp-on script. It will perform the connection
# protocol for the desired connection.
#
/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
######################################################################
#
# Determine the device to be terminated.
#
if [ "$1" = "" ]; then
        DEVICE=ppp0
else
        DEVICE=$1
fi

######################################################################
#
# If the ppp0 pid file is present then the program is running. Stop it.
if [ -r /var/run/$DEVICE.pid ]; then
        kill -INT `cat /var/run/$DEVICE.pid`
#
# If the kill did not work then there is no process running for this
# pid. It may also mean that the lock file will be left. You may wish
# to delete the lock file at the same time.
        if [ ! "$?" = "0" ]; then
                rm -f /var/run/$DEVICE.pid
                echo "ERROR: Removed stale pid file"
                exit 1
        fi
#
# Success. Let pppd clean up its own junk.
        echo "PPP link to $DEVICE terminated."
        exit 0
fi
#
# The ppp process is not running for ppp0
echo "ERROR: PPP link is not active on $DEVICE"
exit 1



15.3. 编辑这里所提供的起始指令稿

因为这份新的指令稿分成两部份,我们分别编辑它们.

15.3.1. ppp-on 指令稿

你将得编辑这个指令稿以反映你在 ISP 的使用者名称,你在 ISP
的密码,你 ISP 的电话号码.

每一行像是 TELEPHONE= 实际上设定了这个变数包含在等号右边的资
讯 (当然不包括注解部份). 因此编辑每一行使它对你的 ISP 与连
线是正确的.

而且,如果你(需要)在 /etc/ppp/options 档案里设定了 IP 号码,删
除这行



$LOCAL_IP:$REMOTE_IP \



还有,确定变数 DIALER_SCRIPT 指向你将要使用的拨号指令稿的全部
路径名称. 因此,如果你移动或改变这个指令稿的名称,确定你正
确地改变 ppp-on 指令稿里的这一行.

15.3.2. 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 移除以便减少你系统记录的混杂.



TIMEOUT         3


这设定接收所期待的输入逾时时限为三秒.如果你使用真的是很慢
的数据机那麽你可能得要增加这个设定到五秒或是十秒!



ABORT           '\nBUSY\r'



如果接收到 BUSY 字串,中止执行.



ABORT           '\nNO ANSWER\r'



如果接收到 NO ANSWER 字串,中止执行.



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



如果接收到(重复的)RINGRING 字串,中止执行.这是因为某人正
打电话给你!



``              \rAT



不期待数据机传送任何讯息并且送出 AT 字串.



OK-+++\c-OK   ATH0



这一个比较复杂一点,因为它使用了某些 chat 的错误回复功能.

它所代表的是...期待 OK ,如果没有收到(因为数据机并不在指令
模式下)那麽送出 +++ (使数据机返回指令模式的标准 Hayes 相
容数据机字串)并且期待 OK;接著送出 ATH0 (数据机挂断字串
). 这让你的指令稿可以应付你的数据机黏在线上无法断线的情
况.



TIMEOUT         30



设定指令稿其馀部份执行的逾时时限为 30 秒.如果你曾经因为逾
时而经验过 chat 指令稿被终止的问题,把它增加为 45 秒或更
久.



OK              ATDT$TELEPHONE



期待 OK (数据机对 ATH0 指令的回应)并且拨接到我们想要呼叫
的号码.



CONNECT         ''



期待 CONNECT 字串(当远端数据机有回应时我们的数据机送出的)
并且不送出任回覆讯息.



ogin:--ogin:    $ACCOUNT



再一次,这里面我们有一些错误回复设定.期待签入提示
(...ogin:),但是如果我们在逾时前没有接收到,送出一个返回字
元(return)然後再次找寻签入提示. 当接收到提示时,送出使用者
名称(存放在使用者界面的 $ACCOUNT 环境变数里).



assword:        $PASSWORD



期待密码提示并且送出密码(再一次,存放在使用者界面的一个环
境变数里).

这个 chat 指令稿有合理的错误回复功能. Chat 还有许多重要的
特色,比这里所展示还要更多. 更详细的资讯请参阅 chat 的线上
使用手册(man 8 chat).

15.4.1. 在伺服器端启动 PPP

虽然这份 ppp-on-dialer 指令稿对於在你签入後会自动启动 pppd 的
伺服器来说非常的好用,然而某些伺服器需要你明白地在伺服器上
启动 PPP.

如果你需要在伺服器上下指令以启动 PPP,你必须要编辑 
ppp-on-dialer 指令稿. 

在这指令稿的尾端(在 password 这行後面)加上 期待 送出 字串对
- 这是寻找你的 shell 提示符号 (特别小心对 Bourne shell 有特
殊意义的字元 - 像是 $ 与 [ 或 ] 左右方括号等).

一旦 chat 找到了 shell 提示符号,chat 必须下指令以启动你
ISP 的 PPP 伺服器.

以我的例子而言,我的 PPP 伺服器使用标准的 Linux Bash 提示符
号 


[hartr@kepler hartr]$



而且需要我打



ppp



以启动伺服器上的 PPP.

在此允许一点错误回复是个好主意,所以在我的例子中我用 


        hartr--hartr    ppp



这就是说,如果我在逾时前没收到提示符号,送出 return 并且再
次等待提示符号.

一旦收到提示符号,就送出 ppp 字串.

注意: 别忘了在前一行结束前加上 \ 以便让 chat 认为这整个指令
稿是在一行里!

不幸的是,某些伺服器会产生非常多变的提示符号! 你可能必须使
用 minicom 多签入几次以便了解什麽可以用来做为确定的``期待''
字串.

15.5. 使用於 PAP/CHAP 验认连线的 chat 指令稿

如果你的 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 的 debug 与 file option_file 选项

就像我们已经看过的,你可以对 pppd 使用 -d 选项打开侦错讯息记
录. 'debug' 选项和这个是一样的.

因为我们正在使用新的指令稿建立新的连线,先放著此选项不管.
(警告: 如果你的磁碟空间不大够,记录 pppd 的讯息可能会大量增
加你的系统记录档大小并使你遇到麻烦 - 不过在此你必定会连线失
败并尝试许久).

一旦你高兴地认为一切工作正常,你可以除去此选项.

如果你不是从 /etc/ppp/options 或 /etc/ppp/options.ttySx 档案中叫出
ppp 选项, 可以在 pppd 上用 file 选项指定档案名称 - 例如



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




PPP HOWTO 中译版 : 使你的连结自动化 - 创造连结指令稿
Previous: 以手动方式建立 PPP 连结
Next: 测试你的连线指令稿 

--
※ 来源:.紫 丁 香 bbs.hit.edu.cn.[FROM: 202.118.244.16]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:212.254毫秒