読者です 読者をやめる 読者になる 読者になる

256bitの殺人メニュー

インフラエンジニアだったソリューションアーキテクトなくわののブログ。こちらのBlogは個人の意見となっていて会社とは全く関係ありません。お約束です。[twitter:@kuwa_tw]めんどくさがりが重い腰を上げて何かをアウトプットすることにどれほどの意味があるのかを試してみたいブログでもある。

jenkinsをApache経由でBasic認証するときに401が出て困る問題の対処(ハマったメモ)

jenkins先生をやんごとなき事情でBasic認証かけたいとき。

はい、乙カレー様です。桑野です。

Jenkins先生を公開したいなーって時とか、違う部署で見せたいなーみたいな時にお手軽に認証かます。
そう、Basic認証でしょう。
なんか謎にハマったのでメモ。

追記(1/31)

Authorizationヘッダさえバックエンドに渡さなければいいので、Securityオプションは有効でもOKでした。
ということで、これ、Apacheの設定だけで行けますね(;・∀・)スイマセン

基本的なBasic認証のかけ方

まず基本的なBasic認証のかけ方は公式のWikiのここですな。

具体的に書きます。

パスワードファイルの作成
$ htpasswd -c /etc/httpd/htpasswd jenkins
Password: password
Password: password
Apacheの設定
<VirtualHost *:80>
  ServerName jenkins.example.com
  ServerAdmin info@example.com
  ErrorLog logs/jenkins_error_log
  CustomLog logs/jenkins_access_log combined

  ProxyPass / ajp://127.0.0.1:8009/
  ProxyPassReverse / ajp://127.0.0.1:8009/
  RequestHeader unset Authorization  # <- 追記(1/31):バックエンドににAuthorizationヘッダを渡さないようにする。
  
  <Location />
      Order allow,deny
      Allow from all
  </Location>
  <Location />
    AuthType Basic
    AuthName "Jenkins Authentication"
    AuthUserFile "/etc/httpd/htpasswd"
    AuthGroupFile /dev/null
    Require valid-user
  </Location>
</VirtualHost>

ですね。

あれれ?

これでもなんでか無限にBasic認証のダイヤログが開く、、、まだ開く、、、なんでやねん!と思います。
認証外すと普通にいける。

わけわからんなーと思って、カッとなってwireshark使って(早い)戻ってくるコンテンツ見ると。

Status Code: 401

Exception: Bad credentials
Stacktrace:
(none)

Generated by Winstone Servlet Engine v0.9.10 at Mon Jan 28 19:44:23 JST 2013

あれ???Winstone Servlet???


おい、先生!


結論から言うとこのへんの公式Wikiにありましたが、Jenkis先生のセキュリティオプションが有効になっているとProxy通ってくるcredential見て怒ってくるという事のようです。

というわけで、

先生の設定を変更。

$ cd /var/lib/jenkins
$ diff config.xml.org config.xml
9c9
<   <useSecurity>true</useSecurity>
---
>   <useSecurity>false</useSecurity>
93c93
< </hudson>
\ No newline at end of file
---
> </hudson>

無事

認証が通りましたとさ。
めでたしめでたし。


Jenkins実践入門 ?ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)

Jenkins実践入門 ?ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)


[asin:B00AXWK3CA:detail]