イフブロ

イフブロ

インフラエンジニアのブログ

Capistranoをrootでもuserでも使う

こんな要望あるのかな。という感じですが。
使い方もイマイチな感じですが。

やってみたのでご紹介します。

概要

  • Capistranoを使ってroot権限を使いたい時。
  • sudo は使いづらいし、なんだかなぁという事で結局rootでcapistranoを実行させる時。
  • root権限のユーザーを複数作ってて(デフォルトrootを使わない)、なおかつrootとGroupID UserIDをわざと一緒にしてる時(特異パターン)
  • でも一般ユーザーの処理もある時。

に使える内容です。
ちなみに私が何故こんな場面になったかと言うと、

  • CapistranoRailsアプリケーション配布してた。
  • CapistranoでItamaeとServerSpecを実行したくなった。

同じCapistranoでヤルべき?というのを悩んで混ぜて実行する事にしたんですが、
前者は一般ユーザーでしたが、後者はroot権限が必要になりました。

実装

deploy.rbに

set :ssh_options, {
    keys: %w{/root/.ssh/id_rsa /home/user/.ssh/id_rsa}
}

を書き足す。 私がハマったのは ope-admin的なadminユーザーを作ってて、でも面倒なのでUID GIDをrootと揃えていた所、
ope-adminでcapistranoを実行すると、~/.ssh/id_rsa を見つけられず、パスフレーズを求められた事でした。
rootで鍵交換済だったので、/home/ope-admin/.ssh/id_rsa には鍵がなくって、/root/.ssh/id_rsa に鍵があったので
CapistranoのBackendのSSHKitの、バックエンドのNet::Ssshがid_rsaをuser_home配下から探そうとして見つけられなかった。という事です。

なんかウチの環境だけな気がするけど、ハマったら辛いだろうなと思うので公開します。

運用

rootでやりたい時は、ope-adminになってからcapコマンドを実行します。
一般ユーザーでやりたい時は、userになってからcapコマンドを実行します。