expectで自動化する

  • 投稿日:
  • by
  • カテゴリ:

telnet経由でpearlのlib-telnetを使ってシェルと対話していたが、やはりtelnetポートを開放するのは怖いので、ssh経由としたかった。lib-ssh2というモジュールもあるのだが、ちょっと使いにくい。

色々とgoogle先生に訊ねていたところ、#!/bin/sh経由、もしくは#!/usr/bin/expectでスクリプトを書くと所望の動作ができることが判った。

接続先:example.jp
SSHのポート:65534
ユーザ名:user

アクションは、手元ホストのファイルを、example.jpにscpで転送する。

#!/bin/sh

HOST="example.jp"
PORT="65534"
HOSTUSER="user"

PSWD="password"
PREVIPFILE = "/tmp/CurrentGlobalIP"
TOFILE="/tmp/CurrentHomeIP"

expect -c "
spawn scp -P ${PORT} ${PREVIPFILE} \
${HOSTUSER}@${HOST}:${TOFILE}
expect \"${HOSTUSER}@${HOST}'s password: \" {
send \"$PSWD\"
}
expect eof
exit
"

IPアドレスが変化したら、VPSのサーバに連絡する仕組みを実験中。