apache basic 認証 ほか (expect 等) に戻る
adsl modem の グローバルアドレスは 通常あまり 変化しないと 思っていた
が 、5月2日 親切な NTT の 方に 設定を 御指導して頂いて 立ち上げた と
いうより 立ち上げて 頂いた ものでありますが 本日(2005年 5月10日 (火) )
迄に、何回か 変わっている
220.99.221.209
218.47.49.62
219.164.88.204
60.42.244.129
60.35.85.116
そこで 今回 暫定的に サーバーから サーバーへ 定期的に ファイルを 読み込
ますつまり 定期的に http リクエストを するようにした こうしておくと
/apache2/logs/access_log に log が 残るので これから 発信元の IP アドレ
スが 判明するので こちらから 一々サーバーまで 燦然里も 出かけなくとも 相
手の ip address が わかるようにした もっといい方法はあるのだろうが にゃ
んたろうが 今現在できる ことは この方法である
システム の 状態
pc1 -- adsl modem (so-net NEC ATUR32J (C2)-A) -- internet ;1.5M
pc2 -- adsl modem (Ntt west sv-3 ) -- internet ; almost 40M
pc1 は no-ip での ddns にて 運用中 (半ば 固定 domain )
pc2 は ddns 未 での 運用中
pc1 は port 80 25 http smpt 外部から 接続 可能 に してある 明示的に処理
pc2 は port 80 22 http ssh 外部から 接続 可能 に してある 明示的
に処理
明示的に処理 とは 初期設定より 変更した点である、従って 機器の初期設定で
他の 機能は 当然異なるようである ちなみに pc1 側の ping は 受け付ける
様ですが pc2 側の ping わ 受け付けないようです 詳細は 未検討だが 、これ
で 常時電源投入で サーバーの 動作試験を 運用出来ると 考えていたが 通常の
感覚では グローバルアドレスは adsl modem の 電源の 入りきり が ない場合
は ほとんど 変わらない 感覚であったが Ntt west さんの 方は どうも 色々
変わるようである そこで なんらかの 処置をしないと 一々 pc1 側の IP
address を 問い合わせる或は そこまで 行って pc2 側の pc から adsl modem
の 画面を みる 必要が ある。これでは サーバーを 置かせて 頂いている 方に
申し訳が ないので 何か 対応しないと 行けない という 事である。
色々捜しまくった 結果 expect の 導入で 対処しようという結果を得た、後 は これを cron 処理しよう という ことにした、最初に telnet にて サーバー に 要求した場合の log を 見る
mm@lx:~$ telnet 192.168.0.8 80
Trying 192.168.0.8...
Connected to 192.168.0.8.
Escape character is '^]'.
GET /index.html /HTTP/1.0
/* 空行を 送る Enter キーを 押すのみ */
HTTP/1.1 200 OK
Date: Sun, 08 May 2005 12:32:51 GMT
Server: Apache/2.0.49 (Unix)
Last-Modified: Fri, 21 Jan 2005 01:36:30 GMT
ETag: "1be85-af3-e139e380"
Accept-Ranges: bytes
Content-Length: 2803
Connection: close
Content-Type: text/html; charset=euc-jp
/* 内容省略 */
</body>
</html>Connection closed by foreign host.expect
やり取りは このように なるでしょう、その時点での log を サーバー pc1 のものを 見てみると
# cat access_log
192.168.0.5 - - [08/May/2005:21:32:51 +0900] "GET /index.html /HTTP/1.0" 200 2803
expect ちゅうもんの 中身を 見ておく プログラムの 名前は a_telnet です
$ cat a_telnet
#!/usr/bin/expect --
set timeout 10
spawn telnet 192.168.0.8 80
expect "Escape character is *\n"
send "GET /index.html /HTTP/1.0 \r\n"
send "\r\n"
expect "*200 OK*"
send "quit\r\n"
実行してみましょう、これは pc1 と 同じ ネットワークの 機器から の 実 行したばあいです
$ ./a_telnet
spawn telnet 192.168.0.8 80
Trying 192.168.0.8...
Connected to 192.168.0.8.
Escape character is '^]'.
GET /index.html /HTTP/1.0
HTTP/1.1 200 OK
Date: Sun, 08 May 2005 12:42:43 GMT
Server: Apache/2.0.49 (Unix)
Last-Modified: Fri, 21 Jan 2005 01:36:30 GMT
ETag: "1be85-af3-e139e380"
Accept-Ranges: bytes
Content-Length: 2803
Connection: close
Content-Type: text/html; charset=euc-jp
</body>
</html>
この場合の pc1 の log の 該当する 部分は
# cat access_log
192.168.0.5 - - [08/May/2005:21:42:43 +0900] "GET /index.html /HTTP/1.0" 200 2803
まったく 別の サーバー(クライアント)から 行って 見よう、今度は b_test である、これを まったく 別の ネットワークから 試みます pc2 での お仕事 です まず 内容は
# cat b_test
#!/usr/bin/expect --
set timeout 10
spawn telnet nyanta.no-ip.info 80
expect "Escape character is *\n"
send "GET /index.html /HTTP/1.0 \r\n"
send "\r\n"
expect "*200 OK*"
send "quit\r\n"
ほなら 実行してみましょう
# ./b_test
spawn telnet nyanta.no-ip.info 80
Trying 218.221.17.88...
Connected to nyanta.no-ip.info.
Escape character is '^]'.
GET /index.html /HTTP/1.0
HTTP/1.1 200 OK
Date: Sun, 08 May 2005 12:51:29 GMT
Server: Apache/2.0.49 (Unix)
Last-Modified: Sun, 08 May 2005 12:45:02 GMT
ETag: "1be85-af5-a9a5b780"
Accept-Ranges: bytes
Content-Length: 2805
Connection: close
Content-Type: text/html; charset=euc-jp
#
上記の 内容は 省略してあります ポイントは アクセス してるかどうか と いうことです ここで アクセスされた側 pc1 の log を 見てみると
# cat access_log
60.42.244.129 - - [08/May/2005:21:51:29 +0900] "GET /index.html /HTTP/1.0" 200 2805
ほたら cron で 何分か毎に こちらに アクセスさせてみよう log に 余分なものが 残るが 仕方がない 良ければ 1時間毎でも よいであろう、 へたら cron て 何処に あるの
# find / -name cron*
/var/log/cron
/var/spool/cron
/var/spool/cron/crontabs
/usr/man/man1/crontab.1.gz
/usr/man/man8/crond.8.gz
/usr/sbin/crond
/usr/bin/crontab
ほんでもって 移動して 中身を みてみよう
# cd /var/spool/cron/crontabs/
# sed -e '/^#/d' root
0 6 * * * /usr/sbin/logrotate /etc/logrotate.conf
0-59/5 * * * * /sbin/rmmod -a
# sed -e '/^#/d' nobody
40 04 * * * updatedb 1> /dev/null 2> /dev/null
編集してみよう
# crontab -e
# diff -s org_root root
13a14
> 0-59/5 * * * * ./try_cron1
lx:/var/spool/cron/crontabs# ls -l
total 20
-rw-r--r-- 1 root root 5 May 8 16:58 cron.update
-rw------- 1 root root 105 Mar 3 1998 nobody
-rw------- 1 root root 786 May 8 16:38 org_root
-rw------- 1 root root 814 May 8 16:58 root
-rwx------ 1 root root 224 May 8 16:54 try_cron1*
lx:/var/spool/cron/crontabs# ls -l
total 16
-rw------- 1 root root 105 Mar 3 1998 nobody
-rw------- 1 root root 786 May 8 16:38 org_root
-rw------- 1 root root 814 May 8 16:58 root
-rwx------ 1 root root 224 May 8 16:54 try_cron1*
~~~~~~~~~~~~~
No execute あきまへん 所謂 パスが 無いようです
# mkdir cron_dir
# cd cron_dir/
# pwd
/etc/cron_dir
# mv /var/spool/cron/crontabs/try_cron1 .
# pwd
/var/spool/cron/crontabs
# crontab -e
# diff -s org_root root
13a14
> 0-59/5 * * * * /etc/cron_dir/try_cron1
要するに 何処か この場合 /etc/cron_dir に 実行する expect の プログラ ムを 置いて それに 合うように root の cron を crontab -e で 修正したの です、これは pc1 と 同じ ネットワークの 機器での 処理です これで pc1 の log を 見てみましょう
# cat access_log
192.168.0.5 [08/May/2005:21:50:05 +0900] "GET /index.html /HTTP/1.0" 200 2805
192.168.0.5 [08/May/2005:21:55:05 +0900] "GET /index.html /HTTP/1.0" 200 2805
これで 一応基本完了してると 考えようそこで 遠隔の pc2 の サーバーに 設置する ことに しよう その前に プログラムの 書きなおしを しておく
# cat try_cron1
#!/usr/bin/expect --
set timeout 10
spawn telnet 192.168.0.8 80
expect "Escape character is *\n"
send "GET /index.html /HTTP/1.0 \r\n"
send "\r\n"
expect "*200 OK*"
send "quit\r\n"
# cp try_cron1 esapcron
# vi esapcron
# cat esapcron
#!/usr/bin/expect --
set timeout 10
spawn telnet nyanta.no-ip.info 80
expect "Escape character is *\n"
send "GET /index.html /HTTP/1.0 \r\n"
send "\r\n"
expect "*200 OK*"
send "quit\r\n"
pc2 に もって 行こう
# ls -l esapcron
-rwx------ 1 root root 224 May 8 18:01 esapcron*
# chmod 775 esapcron
# chown mm esapcron
# chgrp users esapcron
# ls -l esapcron
-rwxrwxr-x 1 mm users 224 May 8 18:01 esapcron*
# mv esapcron /home/mm
# pwd
/etc/cron_dir
# exit
logout
$ pwd
/home/mm
$ ls -l esapcron
-rwxrwxr-x 1 mm users 224 5月 8日 18:01 esapcron*
プログラムを送信
$ scp esapcron 60.42.244.129:/home/mm
Password:
esapcron
esapcron
100% 224 26.4KB/s 00:00
$
相手に乗り込もう と いいたいが cron を 停止させておこう、でないと log が わかりにくくなる
$ su -
Password:
# cd /var/spool/cron/crontabs/
# cp root 01_root_test_apache
# cp org_root root
# sed -e '/^#/d' root
0 6 * * * /usr/sbin/logrotate /etc/logrotate.conf
0-59/5 * * * * /sbin/rmmod -a
元に 戻しておいて 相手に pc2 へ乗り込もう
# cd
lx:~# exit
# exit
logout
念の為 pc1 の log を 覗いてみよう
$ date
2005年 5月 8日 (日) 22:11:12 JST
/* 相手の機器の index.html 内容 5分毎に 要求している */
# cat access_log
192.168.0.5 [08/May/2005:21:50:05 +0900] "GET /index.html /HTTP/1.0" 200 2805
192.168.0.5 [08/May/2005:21:55:05 +0900] "GET /index.html /HTTP/1.0" 200 2805
192.168.0.5 [08/May/2005:22:00:06 +0900] "GET /index.html /HTTP/1.0" 200 2805
192.168.0.5 [08/May/2005:22:05:06 +0900] "GET /index.html /HTTP/1.0" 200 2805
192.168.0.5 [08/May/2005:22:10:06 +0900] "GET /index.html /HTTP/1.0" 200 2805
192.168.0.5 [08/May/2005:22:15:06 +0900] "GET /index.html /HTTP/1.0" 200 2805
192.168.0.5 [08/May/2005:22:20:06 +0900] "GET /index.html /HTTP/1.0" 200 2805
ほたら
$ ssh -l mm 60.42.244.129
Password:
$ su -
Password:
# ls -l /home/mm/ | grep esapc
-rwxr-xr-x 1 mm users 224 May 8 18:05 esapcron*
転送されている まず cron に 登録しよう
nyan:/etc# mkdir cron_dir
nyan:/etc# cd cron_dir/
nyan:/etc/cron_dir# mv /home/mm/esapcron .
nyan:/etc/cron_dir# ls -l esapcron
-rwxr-xr-x 1 mm users 224 May 8 18:05 esapcron*
nyan:/etc/cron_dir# chown root.root esapcron
nyan:/etc/cron_dir# chmod 700 esapcron
nyan:/etc/cron_dir# ls -l esapcron
-rwx------ 1 root root 224 May 8 18:05 esapcron*
nyan:/etc/cron_dir# cd /var/spool/cron/crontabs/
nyan:/var/spool/cron/crontabs# ls -l
total 8
-rw------- 1 root root 105 Mar 3 1998 nobody
-rw------- 1 root root 786 Oct 5 2000 root
nyan:/var/spool/cron/crontabs# cp root org_root
nyan:/var/spool/cron/crontabs# vi root
nyan:/var/spool/cron/crontabs# diff -s root org_root
14,15d13
< 0-59/5 * * * * /etc/cron_dir/esapcron
<
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
nyan:/var/spool/cron/crontabs# date
Sun May 8 21:48:43 JST 2005
~~~~~~~~~~~~~~~~~~~~~
5分間間って見よう駄目みたいである なんで? この log は 当然 pc1 の log ですよ
# date
Sun May 8 21:51:05 JST 2005
# cat access_log
60.42.244.129[08/May/2005:22:00:01 +0900] "GET /index.html /HTTP/1.0"200 2805
来た 来た来た だいぶ 時間差があるようだ 後は 1時間毎に 設定を 換えて みよう、以下は 抜粋です
60.42.244.129 [08/May/2005:22:00:01 +0900] "GET /index.html /HTTP/1.0" 200 2805
60.42.244.129 [08/May/2005:22:05:01 +0900] "GET /index.html /HTTP/1.0" 200 2805
60.42.244.129 [08/May/2005:22:10:02 +0900] "GET /index.html /HTTP/1.0" 200 2805
60.42.244.129 [08/May/2005:22:15:02 +0900] "GET /index.html /HTTP/1.0" 200 2805
60.42.244.129 [08/May/2005:22:20:02 +0900] "GET /index.html /HTTP/1.0" 200 2805
60.42.244.129 [08/May/2005:22:25:02 +0900] "GET /index.html /HTTP/1.0" 200 2805
では再度 pc1 に 移動して
$ ssh -l mm 60.42.244.129
Password:
mm@nyan:~$ su -
Password:
nyan:~# cd /var/spool/cron/crontabs/
nyan:/var/spool/cron/crontabs#
nyan:/var/spool/cron/crontabs# cp root 001_root_e5min_http
nyan:/var/spool/cron/crontabs# vi root
nyan:/var/spool/cron/crontabs# sed -e '/^#/d' root
0 6 * * * /usr/sbin/logrotate /etc/logrotate.conf
0-59/5 * * * * /sbin/rmmod -a
0 * * * * /etc/cron_dir/esapcron
nyan:/var/spool/cron/crontabs# diff -s org_root root
13a14,15
> 0 * * * * /etc/cron_dir/esapcron
>
nyan:/var/spool/cron/crontabs# date
Sun May 8 22:39:18 JST 2005
nyan:/var/spool/cron/crontabs# cd
nyan:~# exit
logout
mm@nyan:~$ exit
logout
Connection to 60.42.244.129 closed.
mm@lx:~$
これで 1時間毎に なるはず 23時の log にて 確認してみよう後は 待つだけ
# sed -e '/60.42.244.129/d' access_log
# sed -n -e '/60.42.244.129/p' access_log >qq
# diff -s access_log qq
Files access_log and qq are identical
# sed -e '/60.42.244.129/d' access_log >ss
log の整理をして 後はひたすら 待って 確認する
# cat access_log
60.42.244.129 [08/May/2005:22:45:01 +0900] "GET /index.html /HTTP/1.0" 200 2805
60.42.244.129 [08/May/2005:22:50:01 +0900] "GET /index.html /HTTP/1.0" 200 2805
60.42.244.129 [08/May/2005:23:00:01 +0900] "GET /index.html /HTTP/1.0" 200 2805
5分毎が 終わったようだ これで 遠隔の ip address が 換えられても 捜さなくても 良くなった (一々 三千里 の 旅をしなくても 済む )ちゃんちゃん
上ににゃんたろう 拝!
2006年 4月23日 (日) 21:48:35 JST 改定
2005年 5月10日 (火) 22:52:32 JST 作成