tanacasinoのメモ

what are you waiting for ?

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のことがよくわからんので、正しい設定方法が知りたいなぁとか思ったり・・・