expectで自動ログインしてみた

ちょっとした事情があって、crontabでSFTPコマンドを叩いてファイルを取得する、みたいなことがしたかったんですが、SFTPだとパスワードを求められるのでcrontabで自動実行することが出来ず苦労したので、expectというのを試してみました。
※鍵認証にしたら?的なごもっともな話は省かせて頂きます。

で、これがけっこう便利だったのでメモ。
割とsshでいろんなサーバーに繋ぐことが多いので、鍵認証にしてないサーバーの場合はこれ使おうかなと考えてます。
SFTPでいけるならsshでもscpでもいけるはず。

そういえばSFTPって接続時にファイルを指定できたんですね。
昨日初めて知りました。。
毎回毎回ググってないで、もう少し体系的に勉強するべきだよなぁ。。

閑話休題。

まず、expectがインストールされてない場合があるので、
which expect
であるかどうか確認して、無かったらインストール。
yum install expect
デフォルトのリポジトリには無いかも。。
その場合はepelなりremiなり試してみてください。

で、以下のコマンドをmyexpect.shという名前で作成しました。

#! /bin/sh
expect -c "
spawn ssh user@your.server.domain
expect password:
send \"yourPassword\n\"
interact
"
ユーザー名とサーバー、パスワードのところを書き換えれば使えると思います。
パスワードの最後に\nを入れないと入力完了しないので注意。
場合分けして引数でサーバー名渡すようにしたら複数でもいけそうだな、これ。

同じように毎回何かにログインして面倒だなって思ってる方は試してみてください。