踏み台サーバから各サーバを巡回して、自動ログインし指定のシェルを実行するツール
パスワード管理のサーバが複数存在しているとき、状態を取得したり単純な操作を実施したりするのにログインが煩わしい。
操作ミスも怖い。
じゃあ自動化
古いタイプの人間だからexpectを選ぶ。
とりあえず、expectと入力してみてエラーになるなら dnf install expect か apt install expectする。
まずここでexpectの動作確認。
vi test
-----
#!/bin/bash
expect -c "
set timeout 3
spawn ssh ユーザ名@ホスト名
expect \"assword:\" <- Pが大文字だったり小文字だったりするので省く
send \"パスワード\n\"
interact
"
-----
testに実行権限を与える。
chmod +x test
./test
自動ログイン出来たら環境は出来ているから次のステップ。
まず、ログイン情報とシェルコマンドを定義するファイルを準備する。
crawler.csv
-----
ユーザ名1@サーバ名1,パスワード1,コマンド1
ユーザ名2@サーバ名2,パスワード2,コマンド2
ユーザ名3@サーバ名3,パスワード3,コマンド3
-----
コマンドは、ls -lとかps axとかdf -hなどをセットすればよい。
ではこのデータを順に読み込む動作確認。
test2
-----
#!/bin/bash
CSVDATA=crawler.csv
while read LINE
do
column1=$(echo $LINE | cut -d , -f 1)
column2=$(echo $LINE | cut -d , -f 2)
column3=$(echo $LINE | cut -d , -f 3)
echo $column1,$column2,$column3
echo "----- ----- ----- ----- ----- -----"
done < $CSVDATA
-----
test2に実行権限を与える。
chmod +x test2
./test2
ここまで動作確認できたらガッチャンコ。
crawler
-----
#!/bin/bash
CSVDATA=crawler.csv
while read LINE
do
column1=$(echo $LINE | cut -d , -f 1)
column2=$(echo $LINE | cut -d , -f 2)
column3=$(echo $LINE | cut -d , -f 3)
br="\n"
expect -c "
set timeout 2
spawn ssh $column1
expect \"assword:\"
send $column2$br
expect \"$|#\"
"
echo $column3
$column3
echo "----- ----- ----- ----- ----- -----"
done < $CSVDATA
-----
crawlerに実行権限を与える。
chmod +x crawler
./crawler