はじめに
ここのエントリ等が最たる例だが
私もご多分に漏れず、多数のサーバを管理している踏み台環境を持っている。
しかし、部署が複数あったりそもそも技術者がそれぞれ各々の踏み台を持っていると
人の入れ替わりの度に踏み台環境を各々が用意する手間と、管理上の問題から
カオスになっていく。
従って、便利な共通踏み台を作りましょう、という大号令の下、
アカウントやホスト管理もしていきましょう。と言うことでその辺りを整備する。
やりたいこと
はっきり言って個人個人の踏み台の方が使い勝手が良いことがある。
技術者の性格上、それは仕方ないので、共通踏み台を作る以上、
ある程度の利便性が無いとその時点でRejectされてしまうのでその辺りは考慮が必要。
とりあえず、経緯からして踏み台環境の条件を作り
そこから利便性の為のあれこれを考える。
必須機能
- 自分たちが管理(ログイン)するホストが網羅・管理されていること
- 管理対象の機器にログインする全てのユーザが網羅・管理されていること
- 管理対象機器の操作ログが全て記録されていること
オプショナル機能
- ログインの際、補完機能が効くこと
- 補完が利くだけで無く、shellのTAB補完のように複数候補がある場合は候補を列挙してくれる方が好ましい
- ループ処理が可能なこと
- Capistoranoのような同時操作でなくとも、for i in
hosta host2
do; ssh $i ; done; みたく自分でループをわざわざ書かなくて済むと便利
- Capistoranoのような同時操作でなくとも、for i in
- 多段ログインが可能なこと
- 共通踏み台にすればするほど直接は入れない動線が発生する為、予めこういった拡張の余地を残しておく
- 共通踏み台なのだから全てに足を出しておけ、というのはその通りだがそういう裏線ネットワークを全てに這わせるのは非現実的だったりする
- 移植が容易なこと
- これ重要。リプレースの度にライブラリだのなんだのが環境に引っ張られるのはナンセンス。
機能考察
必須機能はどれも踏み台サーバを作る意義としては重要だが、
これらの機能は管理上必要なだけであって、別に技術者にとっては操作ログの記録ぐらいしか恩恵が無い。
その操作ログとて無ければならない機能では無く、各々がメモを作ったりツールを作れば住むだけの話なのでこれしか機能を設けないのであれば不便なだけで意味が無い。
設計方針
バイナリで作り込まず、スクリプトで作る。(Cで書いてmakeとかやらない。手堅い言語だけどgcc,glibcの影響は避けたいし、気づいた人間が即修正できない)
ruby の thor を使えばオプションやら何やらが簡単に実装できそうだったがCentOSだとメジャーバージョンが変わるとrubyのバージョンが大幅に変わり、使えない機能が出てくるなどの弊害があるので枯れているperlで書くことにした。CPANは勿論使わない。
この辺りは右翼的な思考だが、運用・保守の考え方を前提にすると致し方ない。
ユーザ管理、ホスト管理
最終的にはローカルで持つ(都度、聞きに行くタイプだと認証サーバが障害で、踏み台が使えません!等というばかげたことが起きる)が、マスターデータはここで持つことはしない。あくまで踏み台なので。
- ユーザ管理
- POSIXアカウントで管理する
- ユーザと権限で認証するだけなのでLDAPを建てて連携(スレーブ)にまでする必要が無い
- ホスト管理
- DNSや監視リストと同じようになるのでそこから引っ張る仕組みにする
- 前述の通り、syncで取ってきてローカルに持つ感じ
Tips
多段ログイン仕込み
ここのエントリの設定でやってみたが残念ながら幾つかの環境は-Wオプションをサポートしていなかったのでncを使う方法を仕込んでおく。
ついでに頻繁にTimeOutが来ると面倒なことになるのでServerAliveも追記。
但し、これをやるとログインしっぱなしの人が出てくるのでどこかで切る設定は仕込んでおいた方が良さそうではある
ServerAliveInterval 15
Host /
ProxyCommand ssh "$(dirname "%h")" nc -w 300 "$(basename "%h")" %p