Jenkins と SSH と SELinux に気をつける
Jenkinsチームが提供する rpm パッケージを使用して CentOS 6.4 にJenkinsをインストールし、slaveをSSH経由で起動する場合に、SSHの公開鍵認証で躓いたのでメモ。
先にまとめると
- rpmでjenkinsをインストールすると jenkinsユーザが作成される
- jenkinsユーザのホームディレクトリは /var/lib/jenkins なので、 SSHの公開鍵を設定するファイルは /var/lib/jenkins/.ssh/authorized_keys となる
- SELinuxの設定で、sshd は、/home/USERNAME/.ssh/authrozied_keys にはアクセスできるけど、 /var/lib/jenkins/.ssh/authorized_keysには、アクセス出来ないので、公開鍵認証に失敗する
※ SELinuxをdisableにしてもいい環境の人はそうすればいい。最近は誰かに謝る必要があるらしい。
CentOS 6.4 に Jenkinsをインストールする方法
slaveや SSH認証の設定
以下を見ればだいたい同じ。
ざっくり概要
- slaveは jenkinsサービスが自動起動すると困るので chkconfigでオフにする
- jenkinsユーザのログインシェルは /bin/false になっているので、 /bin/bash にする
- jenkinsユーザのホームディレクトリ /var/lib/jenkins
- ログインする側は、 /var/lib/jenkins/.ssh/id_rsa 作っておいておく
- ログインされる側は、 /var/lib/jenkins/.ssh/authorized_keys 作っておいておく
- Jenkinsのmaster側WUIから、ノードの管理でノード追加する
公開鍵認証が通るように SELinuxの設定を変更する
設定ファイル /etc/selinux/targeted/contexts/files/file_contexts.homedirs
に以下の2行を追記する。
/var/lib/jenkins/.+ unconfined_u:object_r:user_home_t:s0 /var/lib/jenkins/\.ssh(/.*)? system_u:object_r:ssh_home_t:s0
追記後に、.ssh ディレクトリ以下のファイル等を作れば問題ないんだけど、あとで設定した場合は、以下のコマンドを打っておくべし。
# root権限で実行する $ restorecon -R -v /var/lib/jenkins
私の環境ではこう設定して直したけど、SELinuxのことがよくわからんので、正しい設定方法が知りたいなぁとか思ったり・・・