踏み台サーバから各サーバを巡回して、自動ログインし指定のシェルを実行するツール | とりあえず今日いじったシステムの公開できる箇所

踏み台サーバから各サーバを巡回して、自動ログインし指定のシェルを実行するツール

パスワード管理のサーバが複数存在しているとき、状態を取得したり単純な操作を実施したりするのにログインが煩わしい。
操作ミスも怖い。

じゃあ自動化ニコニコ

古いタイプの人間だから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
グッ