jenkins - Jenkins 控制器节点在 /tmp/.ssh 而不是 JENKINS_HOME 中查找 known_hosts

我将 Jenkins 控制器节点设置为使用 SSH 连接到代理节点。问题是我收到一条消息

/tmp/.ssh/known_hosts [SSH] No Known Hosts file was found at /tmp/.ssh/known_hosts. Please ensure one is created at this path and that Jenkins can read it.
Key exchange was not finished, connection is closed.

如果我创建一个文件 /tmp/.ssh/known_hosts 并将代理的主机名和用户的公共 key 放入其中,则连接正常。但是 /tmp 在每次重新启动后都会被清除,我必须再次执行该过程。对于可能的原因,我所能找到的只是 JENKINS_HOME 是否设置为 /tmp,但事实并非如此; Jenkins 运行为:

/etc/alternatives/java -Djava.awt.headless=true -DJENKINS_HOME=/netfs/data/jenkins -jar /netfs/data/jenkins/jenkins.war --logfile=/netfs/data/jenkins/jenkins.log --webroot=/netfs/data/jenkins/war --httpPort=-1 --httpsPort=8080 --debug=5 --handlerCountMax=100 --handlerCountMaxIdle=20 --httpsPrivateKey=/netfs/data/jenkins/jenkins.key --httpsCertificate=/netfs/data/jenkins/jenkins.crt

回答1

我想到了。 Jenkins 在开始时读取一次它的主目录位置。如果您在 Jenkins 运行时更改它,它不会接受。

当我第一次启动 Jenkins 服务时,它以 /etc/passwd 中定义的用户身份运行。该用户的主目录为 /tmp。我编辑了/etc/passwd,所以它的主目录变成了/home/。那时我没有重新启动 Jenkins 服务。显然,它检测并 stores 运行它的用户的主目录的位置。它不会重新检查。我使用的凭据无关紧要。

相似文章

java - Jenkins 作为服务运行忽略系统属性

我们遇到了一种情况,我们的Jenkins服务器必须完全重建。我们使用了最新版本,它正在运行。然而,我们在插件搜索或调用我们登录时遇到了https连接问题。它给了我们以下错误un0312:15:51cc...