猫でもわかるWebプログラミングと副業

本業エンジニアリングマネージャー。副業Webエンジニア。Web開発のヒントや、副業、日常生活のことを書きます。

Jenkinsをインストールしたにもかかわらず、sudo su - jenkins でjenkinsユーザーになれない場合の対処

f:id:yoshiki_utakata:20180129210057p:plain

状況

Jenkinsをインストールすると、jenkinsユーザーが作成され、/var/lib/jenkins がjenkinsユーザーのホームディレクトリに設定されるはずです。ですが、たまにユーザーがちゃんと作成されているのに、sudo su - jenkins しても jenkins ユーザーになれない時があります。

[root@jenkins-master-test ~]# sudo su - jenkins
Last login: Mon Jan 29 15:19:20 JST 2018 on pts/0
[root@jenkins-master-test ~]#

こういう感じです。 Last login: Mon Jan 29 15:19:20 JST 2018 on pts/0 と出ていて一見ログイン出来ていそうに見えるのですが、次の行で [root@jenkins-master-test ~]# となっていてユーザーが変わらず...という状況です。

まずは/etc/passwdを見てみる

ユーザー周りでなんかおかしい時はまず /etc/passwd を見てみます。

[root@jenkins-master-test ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
# ...中略...
jenkins:x:996:994:Jenkins Automation Server:/var/lib/jenkins:/bin/false

jenkinsユーザーは存在しているようですが、shellの設定が /bin/false になっています。つまり、jenkinsユーザーへのスイッチは出来ているが、シェルの起動は出来ていないという状態です。

jenkinsユーザーのシェルをbashにする

ということで、とりあえずjenkinsユーザーのシェルをbashにすればsuできるようになるかと思います。

[root@jenkins-master-test ~]# which bash
/bin/bash
[root@jenkins-master-test ~]# chsh jenkins -s /bin/bash

# これでsuできるはず

[root@nv-jenkins-master-test ~]# sudo su - jenkins
Last login: Mon Jan 29 17:51:56 JST 2018 on pts/0
-bash-4.2$

Ansibleでchshの設定をしたい場合

Ansibleでシェルを設定したい場合はこういう感じです。

- name: jenkinsユーザーのシェルをbashに変更
user: name=jenkins state=present shell=/bin/bash

Jenkinsを構築するAnsibleをちょこちょこかいてGitHubに乗っけてあるので参考にどうぞ。

github.com

まとめ

  • suとかユーザー周りでおかしい場合はまず /etc/passwd を確認
  • jenkinsユーザーが存在しているのに sudo su - jenkins 出来ない場合は、シェルの設定を疑う