本当にちょっとしたサーバーも手動は嫌でChefか何かで構成管理しないと済まない性分なので、手動でいじられないようにSSHした人に警告メッセージを出してみる方法を調べてみた。
例えばAmazon Linuxでやるとこんなかんじ
$ ssh somehost
Last login: Sat Aug 13 16:56:53 2016 from 0.0.0.0
__| __|_ )
_| ( / Amazon Linux AMI
___|\___|___|
https://aws.amazon.com/amazon-linux-ami/2016.03-release-notes/
#######################################################
## WARNING: THIS SERVER IS CONFIGURED WITH ANSIBLE!! ##
#######################################################
!このサーバーはItamaeで構成管理されています。 !
!緊急時を除き、Itamaeを使わない手動での設定変更等は!
!絶対に行わないでください !
#######################################################
$
Motdを使う
Linuxでmotd(message of the day)を使うとこれが実現できます。
/etc/update-motd.d/
というディレクトリにスクリプトを入れると、sshした時にそのコマンドを実行してくれる。シェルスクリプトでもPerlスクリプトでもなんでもいい。
複数ファイルが有った場合は辞書順で実行されるので、頭に数字などをつけて順番をコントロールする場合が多いのかな。スクリプトを配置したらsudo update-motd
で反映できます。
Amazon Linuxだと例えば以下のようになっていました。EC2である旨を表示するものと、アップデートできるyumパッケージがいくつかるかを表示しているみたい。
$ ls /etc/update-motd.d/
30-banner 70-available-updates 75-system-update
今回は以下の様なメッセージを表示させたいので、以下の様なファイルを作ってこれを適切な名前で配置することで実現しようと思います。
cat << EOF
#######################################################
## WARNING: THIS SERVER IS CONFIGURED WITH ANSIBLE!! ##
#######################################################
!このサーバーはItamaeで構成管理されています。 !
!緊急時を除き、Itamaeを使わない手動での設定変更等は!
!絶対に行わないでください !
#######################################################
EOF
Ansibleで書いた例
tasks:
- name: Add login message
copy: src=motd.txt dest=/etc/update-motd.d/99-ansible-warning mode=0744
notify: Reflect motd changes
handlers:
- name: Reflect motd changes
shell: "update-motd"
Itamaeで書いた例
remote_file "/etc/update-motd.d/99-itamae-warning" do
source "files/motd.txt"
mode "0744"
notifies :run, "execute[update-motd]"
end
execute "update-motd" do
command "update-motd"
action :nothing
end
おわりに
これを自分ツールとして毎回使うと便利??
そもそも勝手にサーバー作るなっていう話ですが、どうしてもどうしてもさっさと作んなきゃとか特別な事情があって勝手に作る時もこういう配慮はしておきたいものです。