Jenkins执行Git push报错Host key verification failed的解决求助
问题分析与解决方案
从你提供的SSH debug日志中,关键错误是:
debug1: read_passphrase: can't open /dev/tty: No such device or address
这说明SSH尝试读取加密密钥的密码,但Jenkins运行在无终端的非交互环境中,无法输入密码,导致主机密钥验证失败。以下是针对性解决方案:
1. 使用无密码保护的SSH密钥
Jenkins的sshagent插件无法在非交互环境中输入密钥密码,因此必须确保你配置的jenkins凭据对应的SSH私钥是无密码加密的:
- 生成新的无密码SSH密钥对:
ssh-keygen -t ed25519 -f github_jenkins_key -N "" - 将生成的公钥(
github_jenkins_key.pub)添加到GitHub账户的SSH Keys列表中 - 替换Jenkins中
jenkins凭据的私钥内容为github_jenkins_key的内容
2. 强制SSH使用批量模式
在执行git push --tags前,设置GIT_SSH_COMMAND时添加BatchMode=yes参数,禁止SSH尝试交互式输入:
export GIT_SSH_COMMAND="ssh -o BatchMode=yes"
修改后的Jenkinsfile片段:
sshagent (credentials: ['jenkins']) { sh """ git config --add url."git@github.com:".insteadOf "https://github.com/" git config user.name 'Jenkins' git config user.email '$$$+###@users.noreply.github.com' export GIT_SSH_COMMAND="ssh -o BatchMode=yes" git tag -a dimToOff_v"${PRETTY_BUILD_VERSION}"_"${BUILD_NUMBER}" ${COMMIT_ID} -m "${JENKINS_TAG_MESSAGE}" git push --tags """ }
3. 直接写入GitHub官方主机密钥
避免ssh-keyscan可能出现的网络问题,直接将GitHub官方的主机密钥写入known_hosts:
在sh步骤中添加:
mkdir -p /home/jenkins/.ssh echo "github.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOMqqnkVzrm0SdG6UOoqKLsabgH5C9okWi0dh2l9GKJl" >> /home/jenkins/.ssh/known_hosts echo "github.com ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEmKSENjQEezOmxkZMy7opKgwFB9nkt5YRrYMjNuG5N87uRgg6CLrbo5wAdT/y6v0mKV0U2w0WZ2YB/++Tpockg=" >> /home/jenkins/.ssh/known_hosts echo "github.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCj7ndNxQowgcQnjshcLrqPEiiphnt+VTTvDP6mHBL9j1aNUkY4Ue1gvwnGLVlOhGeYrnZaMgRK6+PKCUXaDbC7qtbW8gIkhL7aGCsOr/C56SJMy/BCZfxd1nWzAOxSDPgVsmerOBYfNqltV9/hWCqBywINIR+5dIg6JTJ72pcEpEjcYgXkE2YEFXV1JHnsKgbLWNlhScqb2UmyRkQyytRLtL+38TGxkxCflmO+5Z8CSSNY7GidjMIZ7Q4zMjA2n1nGrlTDkzwDCsw+wqFPGQA179cnfGWOWRVruj16z6XyvxvjJwbz0wQZ75XK5tKSb7FNyeIEs4TT4jk+S4dhPeAUC5y+bDYirYgM4GC7uEnztnZyaVWQ7B381AK4Qdrwt51ZqExKbQpTUNn+EjqoTwvqNj4kqx5QUCI0ThS/YkOxJCXmPUWZbhjpCg56i+2aB6CmK2JGhn57K5mj0MNdBXA4/WnwH6XoPWJzK5Nyu2zB3nAZp+S5hpQs+p1vN1/wsjk=" >> /home/jenkins/.ssh/known_hosts chmod 700 /home/jenkins/.ssh chmod 600 /home/jenkins/.ssh/known_hosts
4. 验证SSH目录权限
确保Jenkins用户对.ssh目录和文件有正确权限:
chmod 700 /home/jenkins/.ssh chmod 600 /home/jenkins/.ssh/known_hosts
内容的提问来源于stack exchange,提问作者rp346
相关产品推荐
相关产品推荐

