Capistranoをrootでもuserでも使う
こんな要望あるのかな。という感じですが。
使い方もイマイチな感じですが。
やってみたのでご紹介します。
概要
- Capistranoを使ってroot権限を使いたい時。
- sudo は使いづらいし、なんだかなぁという事で結局rootでcapistranoを実行させる時。
- root権限のユーザーを複数作ってて(デフォルトrootを使わない)、なおかつrootとGroupID UserIDをわざと一緒にしてる時(特異パターン)
- でも一般ユーザーの処理もある時。
に使える内容です。
ちなみに私が何故こんな場面になったかと言うと、
- CapistranoでRailsアプリケーション配布してた。
- 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コマンドを実行します。