SSHでforced-commands-onlyを使ってVIPを付けてみる

おはようございます。インフラの宮下です。

今回は端末機からサーバの仮想IPを付けたり削除する時のSSH設定に関する手順です。
MHAの内部でIPをfailoverする所をお手製で実施するイメージです。

SSH接続でroot権限を実行する方法としては、

・rootで公開鍵認証が出来るようにする。
・ログインユーザがsudo出来るようにしてrootにスイッチする。
・rootで特定のコマンドだけ実施出来るようにする。

の3通りありますが、今回はセキュリティレベルがそんなに変わらない3番目の方法を適用したいと思います。
既にsudo出来る環境なら良かったのですが、sudoできない環境なのでforced-commands-onlyを使用します。

作業環境は以下の通りです。

接続元のOS:SunOS test 5.10 Generic_147440-19 sun4v sparc sun4v
→端末機と呼びます
接続先のOS:Red Hat Enterprise Linux Server release 6.2 (Santiago)
→サーバ呼びます

今時珍しいsolarisが端末と言う事でレトロ感満載の環境と言う事はお察し下さい。

(端末機の設定)

・ログインするユーザの公開鍵を作成します。コマンド毎に鍵を分けるので2個用意します。

[shell]# ssh-keygen -t rsa -N "" -f ~/.ssh/ipadd_command
公開/非公開 rsa 鍵のペアを生成しています。
識別情報が /export/home/test/.ssh/ipadd_command に保存されました。
公開鍵が /export/home/test/.ssh/ipadd_command.pub に保存されました。
鍵のフィンガープリント:
80:1e:4f:8b:2a:0d:22:fb:e2:c7:22:75:70:ef:db:a2 test@test

# ssh-keygen -t rsa -N "" -f ~/.ssh/ipdel_command
公開/非公開 rsa 鍵のペアを生成しています。
識別情報が /export/home/test/.ssh/ipdel_command に保存されました。
公開鍵が /export/home/test/.ssh/ipdel_command.pub に保存されました。
鍵のフィンガープリント:
06:fe:1a:41:fc:2a:02:96:ca:c2:bd:66:64:ed:f5:17 test@test[/shell]

サーバで実行するコマンドを登録する。

[shell]# vi ipadd_command.pub
command="ip addr add 172.31.0.1/24 dev eth2 label eth2:1" [/shell]
を先頭に追加する。

[shell]# vi ipdel_command.pub
command="ip addr del 172.31.0.1/24 dev eth2 label eth2:1" [/shell]
を先頭に追加する。

(サーバの設定)

rootユーザでSSHログインしてコマンドが実行出来るように設定変更します。

[shell]# vi sshd_config
#PermitRootLogin no
PermitRootLogin forced-commands-only[/shell]
に変更して設定を反映させる

[shell]# service sshd reload
sshd を再読み込み中: [ OK ][/shell]

端末機で作成した公開鍵を登録する。

[shell]# vi ~/.ssh/authorized_keys[/shell]
先程コマンド情報を追記した鍵情報をサーバに追加する。
(authorized_keysファイルが無い場合は新規作成して下さい)

設定はこれで完了となります。では端末機から接続してみます。

[shell]# ssh -i ~/.ssh/ipadd_command root@server1
server1 への接続が閉じられました。[/shell]

サーバのインターフェイスを確認しますと、

[shell]# ifconfig -a eth2:1
eth2:1 Link encap:Ethernet HWaddr F8:0F:41:FF:FF:FF
inet addr:172.31.0.1 Bcast:0.0.0.0 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Memory:ded20000-ded40000 [/shell]

しっかりIPアドレスが付きました。今度はIPを外します。

[shell]# ssh -i ~/.ssh/ipdel_command root@server1
server1 への接続が閉じられました。[/shell]

サーバのインターフェイスは、

[shell]# ifconfig -a eth2:1
eth2:1 Link encap:Ethernet HWaddr F8:0F:41:FF:FF:FF
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Memory:ded20000-ded40000 [/shell]

と想定通りIPが外れました。

rootの鍵認証が出来ない制約がある環境で、実行するコマンドが限定されている場合に
簡単に出来ますので是非一度試してみて下さい。

おすすめ記事