アカウントを共有するときの SSH の設定
そもそもアカウントを共有するのが良くないことだというのは重々承知。とはいえ、仕事ではそういう環境で作業をすることもよくあります。お客様のサーバで作業する場合など、社名でアカウントを一つ作成して、複数人の作業担当者で共有するという運用です。
こんなとき、アカウントは共有していても、ログイン時の設定 (つまり .bash_profile) は担当者ごとに個別のファイルを読み込みたいと思うことがあります。たとえば history ファイルを分けたいとか。そこで、SSH の鍵ごとに自分用の設定ファイルを読み込ませる方法で、これを実現してみました。
まずは、リモートサーバ側の authorized_keys ファイルを編集します。ログインしたときに、自分用の .ssh_login_hook なるスクリプトを実行するようにします。
~/.ssh/authorized_keys
command="exec /bin/bash /home/mycompany/y_uti/.ssh_login_hook" ssh-rsa AAAA...== y_uti@myclient.mycompany.co.jp
.ssh_login_hook には以下の内容を書いておきます。ここで --rcfile を指定して bash を起動することで、自分用の設定でログインできることになります。$SSH_ORIGINAL_COMMAND という変数には、ssh で実行されるコマンドが格納されています。何かコマンドが指定されているときには、余計なことをせずにコマンドをそのまま実行するようにしておきます。このようにしておかないと、scp が通らなくなるといった問題がありました。
~/y_uti/.ssh_login_hook
#!/bin/bash RC_FILE=/home/mycompany/y_uti/.bash_profile if [ "$SSH_ORIGINAL_COMMAND" == "" ]; then exec $SHELL --rcfile $RC_FILE else exec $SHELL -c "$SSH_ORIGINAL_COMMAND" fi
あとは ~/y_uti/.bash_profile に思いのままに設定を書き殴ればよいです。
たとえば、ヒストリファイルを自分専用にするとか。
export HISTFILE=${HOME}/y_uti/.bash_history history -c history -r
また、DMZ のマシンを経由してもう一段 ssh が必要なんていうのも、よくある話です。そんなときには、自分用の SSH 設定ファイルを使うようにエイリアスしておくとか。ところで、この -F オプション相当の環境変数ってないのでしょうか。調べても見つけられませんでした。
alias ssh="ssh -F ${HOME}/y_uti/.ssh/config" alias scp="scp -F ${HOME}/y_uti/.ssh/config"
config ファイルで自分用の鍵を指定しておけば、内側のサーバでも同じことの繰り返しで自分用の設定を使えます。
~/y_uti/.ssh/config
Host secretserver Hostname secretserver.customer.co.jp Port 22 User mycompany IdentityFile /home/mycompany/y_uti/.ssh/id_rsa