在网络浏览到一个问题:
我用一个commanline在linux下生成了public/private ssh key, 用git clone 没有问题,但是在jenkins 上创建了job,运行就是连不上,有人知道怎么回事吗?
Failed to connect to repository : Command "git ls-remote -h XXXHEAD" returned status code 128:
stdout:
stderr: Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,gssapi-with-mic,password).
fatal: Could not read from remote repository.
刚好前几天解决了这个问题,也是想记录一下,一直没空出时间.
今天记录一下,毕竟当时也是从网上找了好几天的答案都没找到.
上述问题原因, linux下 可以git 到服务器代码,是因为自己电脑上通过 ssh -keygen -t -rsa "用户信息" 将公私钥添加到了本地,同时将公钥添加到了服务器,
如果这些步骤没做,也不可能 Command 下拉到代码.
Command 可以拉取代码 ,而jenkins不行 这里关乎一个很重要也很诡异的文件 known_hosts
1、known_hosts简介
ssh会把你每个你访问过计算机的公钥(public key)都记录在~/.ssh/known_hosts。当下次访问相同计算机时,OpenSSH会核对公钥。如果公钥不同,OpenSSH会发出警告, 避免你受到DNS Hijack之类的攻击
具体的 SSH 原理(免密登录)可以参考 :https://www.cnblogs.com/zqj-blog/p/10445598.html
2、known_hosts问题分析
本地访问服务的时候 会在 .ssh下生成 known_hosts,而jenkins 是运行在 Tomcat下的, Tomcat无法访问到你本地的 known_hosts,且原理上 known_hosts 删除之后可以自动生成,但是 tomcat下 首先连接不成功不会创建,其次删除之后不会自动生成.
解决办法: 把本地的 .ssh下的 known_hosts 拷贝到 Tomcat下(具体路径要自己看)
3、其他可能存在的问题
1) 账号问题 ,jenkins 运行在tomcat下,其实连接jenkins上执行的 git其实使用的是 Tomcat账号,而不是 登录的用户,这点要注意,所以任何和git相关的 都要给tomcat配置权限,否则一样产生权限问题
2)路径问题,
git使用的公私钥对 ,同时要拷贝一份到tomcat下,包括刚才提到的 known_hosts ,因为tomcat没有能力访问 tomcat以为的文件
时间仓促,写的比较粗,侵删,错改.多多包涵