SlideShare a Scribd company logo
地味に便利な自作の鯖管コマンド

    id:shoichimasuhara
■ 自己紹介
はてなid:shoichimasuhara
Twitter:@shoichimasuhara
はてなバイト新入社員 (3月から)
鯖管
日頃はなぜかPerlの会社でRuby書いてます
Kyoto.pmで鯖管?
さて本題
地味に便利な自作の鯖管コマンド
  っぽいものを作ってみた
サーバってどうやって管理してますか?

   (※インフラな人向け)
■ 数百台ならまだしも
数千台オーダになると全台手作業とかムリ
PuppetとかChefとか使ってますよね
設定ファイルをgitで管理とか


サーバの設定がまちまちだと管理しにくい
頑張っているものの

   たまに
「あれ、あのファイル、
  入ってるホストと
 入ってないホストが
   あるっぽいぞ?
 今すぐリスト出せ」
なんてことがあります
そんな時には
同時ログインSSHコマンド
たとえば
CSSH
■ CSSH
使い方
 ホストリスト渡すと一気にターミナルが開いて同時ロ
  グインができる
 キーボードを打つと全台に入力される
メリット
 目視しながら同時にコマンド実行できる
デメリット
画面サイズ足りな
    い
■ 他…
mssh
 Man見る限り機能が貧弱そう
Gnu parallelとかxargsとか
 コマンドライン書くのも覚えるのも面倒
他にも似たようなのはある
 Capistranoもできたような…?
 調べるほど必要でもない…
ということで作りました
parascript
なにはさてより D   E M O ります
■ 基本設計
ssh batchモード
 ssh -o BatchMode=yes
StrictHostKeyCheckはしない…
 ssh -o StrictHostKeyChecking=no
コマンドライン、スクリプトをbase64encode
 向こう側でデコード
 echo $encoded_command |base64 -d -i|sh
 e c h o a G 9 z d G 5 h b W U = |b a s e 6 4 - d
■ sudoするには
sudo -S でパスワードを標準入力
最後のshをsudoしたいけど、コマンド・スクリ
 プト本体を送るために標準入力使ってる
なので実行するコマンド全部を文字列にし
 て、sh -c に食わせましょう
まとめて書くとこんな感じ
(passwd)→|sudo -S sh -c 
'echo d2hvYW1p|base64 -d -i|sh'
■ SSH標準入出力と並列実行
パスワード入力の標準入力
結果の標準出力、標準エラー出力
これらを簡単に扱いたい
→ use Net::SSH qw/ sshopen3 /;
並列実行
→ ごく普通にParallel::ForkManager
結果とか
■ 注意点・課題
base64コマンド必須
鍵認証前提
 そのあたりの柔軟性どうしよう
セキュリティ甘め
デストリビューション混在時にちゃんと動作する
 かどうか…
すでにFreeBSDで不具合報告
地味に便利です
ご清聴ありがとうございました

More Related Content

Parascript