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