我将 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 运行它的用户的主目录的位置。它不会重新检查。我使用的凭据无关紧要。