仕事中
サーバの台数多くて、いちいちホスト名とかIPアドレス覚えてられんなー
サーバだけじゃなくて、ロードバランサとかのネットワーク装置もあるからいちいち管理表見ながらログインするのめんどくさいなー
ということで、慣れないシェルスクリプトを書いてサーバログインを少しだけ楽にしました。
方針
業務としてはDNSサーバの運用や各種ログサーバなどを運用しており、チームで管理しているサーバは100台以上あります。
自分の会社のサーバは英数字が羅列されたホスト名のため、パッと見ただけではどういう用途のサーバかもわかりません。
そのため、スクリプトを実行した際にホスト名や用途、IPアドレスが表示されること、選択式にして数字さえ入力すれば簡単にサーバにログインできるようにしたいと思いました。
始めは、Pythonとかで作ろうと思ったのですが、python3 ~~.py と打つのさえも少しめんどくさいため、./~~.sh とさえ入力すれば実行できるシェルスクリプトで作成しました。
完成
シェルスクリプトでつくってみました。
# !/bin/sh
if [ -z $1 ] ; then
echo "Usage: $0 <read_file>"
exit 3
else
READ_FILE=$1
READ_FILE_LINE_NUM=`cat ${READ_FILE} | wc -l`
column -s, -t ${READ_FILE} | nl
echo -n "login: "
read ANS
if [ ${ANS} -le ${READ_FILE_LINE_NUM} ] ; then
LOGIN_HOST=`sed -n ${ANS}p ${READ_FILE} | cut -d , -f 2`
echo -ne "\e]2;${LOGIN_HOST}\a"
ssh -A ${LOGIN_HOST}
# miss or end
CURRENT_HOST=`hostname`
echo -ne "\e]2;${CURRENT_HOST}\a"
exit 5
else
echo "${ANS} no file_line ... Select 1 - ${READ_FILE_LINE_NUM}"
exit 4
fi
fi
exit 0
サーバのリストが入ったテキストファイルも用意します。
sv001,10.0.0.1
sv002,10.0.0.2
sv003,10.0.0.3
実行してみます。
ファイル名長くない?と思うかもしれませんが、タブ補完使えば気になりません。
$ ./login.sh serverlists.txt
1 sv001 10.0.0.1
2 sv002 10.0.0.2
3 sv003 10.0.0.3
login:
実行すると数字、ホスト名、IPアドレスが表示され、左に紐づいている数字を入力さえすれば簡単にログインできるようになりました。
鍵がある場合は login.sh の ssh に -i オプションをつけて鍵を指定すれば簡単にログインできると思います。
感想・まとめ
業務ではサーバに入って作業をすることは多いものの、シェルスクリプトは初心者で調べながらつくりました。
こういう身近な自動化スクリプトをつくって実践的に学べたので、いい経験になったと思います。
簡単なスクリプトならリファレンスを読まずにささっとつくれるようになって、より仕事を楽にしたいです。