处理升级Gerrit后REST API无法使用

背景:

升级Gerrit,从2.13到3.2

遇到问题:

升级到新版后,rest api无法使用了,要么提示401,要么提示 Unauthorized

官方文档上面,说使用basic auth就能直接连上rest api。匿名用户可以直接查询接口,登录用户,在host后面增加"/a"后缀。

但实际上,我匿名访问,是会报401错误的。

而登录后,又报Unauthorized。

使用htpasswd设置的密码不行,使用Gerrit生成的随机密码也不行。

 

原因分析:

经过一番排查后,发现LDAP认证方式下,直接使用ldap账户和密码,是可以使用Gerrit 的rest api的。

而htpasswd设置的密码,是通过Nginx或者Apache进行鉴权的,也就是登录网页的时候,那个弹窗的处理,是Nginx处理的。这时候根本就没有进入到Gerrit,具体可以看官方文档,以及Gerrit的配置,是没有任何指向htpasswd生成的密码文件的。

登录Gerrit Web的时候,使用htpasswd的密码可以进入。但使用rest api的时候,Gerrit也会对账户密码进行校验。这点和web登录是不一样的,问题就出在这里。

使用htpasswd的密码,用postman登入gerrit_site.com/a/projects/时,如果htpasswd密码不对,会有401错误报出来,此时是Nginx报的。输入htpasswd的账户密码,不报401错误了,但返回Unauthorized,此时是Gerrit返回的。

要想登入Gerrit REST API,就得密码正确,也就是要同时满足htpasswd和Gerrit的密码。只有这两个密码一样,才能通过。

解决方案:

方法一:统一htpasswd和Gerrit的HTTP密码。

如果可以修改admin密码(如果admin不方便改密码则新建一个账户,并配置成管理员),则先重置(或者获取已有的)admin账户的Gerrit HTTP密码,在web页面的设置页-HTTP选项上生成。

然后在服务器上执行htpasswd -m gerrit.passwd admin,输入Gerrit的HTTP密码。这样htpasswd的密码和Gerrit的HTTP密码就一样的。

此时admin账户,使用Gerrit的HTTP密码,即可使用postman使用basic auth方式,进行gerrit_site.com/a/projects/的查询和put操作了。

由于Gerrit的HTTP是随机生成的一长串密码,不易使用,可以把密码还原会admin原本的密码。

1、使用Gerrit rest api,写入旧密码到Gerrit上:

具体见:https://gerrit-review.googlesource.com/Documentation/rest-api-accounts.html#set-http-password

2、在服务器上操作htpasswd -m gerrit.passwd admin,输入旧密码

这时候,htpasswd和Gerrit的密码就统一设置成原本的旧密码了。

对于其他需要使用rest api的账户,可以直接使用admin账户,调用rest api,写入账户的HTTP密码到Gerrit上。

方法二:使用LDAP或者OpenID等认证方式

可以使用ldap方式,一般公司内都是会有统一的ldap服务,接入公司的ldap账户,就不存在上面的问题了。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Gerrit是一个用于代码审查和版本控制的工具,它的使用可以通过一系列步骤来完成。以下是一个简单的Gerrit使用教程: 1. 首先,你需要了解Gerrit的工作流程和权限控制。这可以通过阅读相关的文档和教程来获得大致的了解。你也可以参考一些博客文章,比如【GerritGerrit工作流程及使用手册。 2. 作为管理员,你可以通过命令行对Gerrit服务器进行操作。你可以使用如下命令连接到服务器:ssh gerrit -l admin。连接成功后,你就可以对Gerrit进行各种管理操作了,比如添加普通成员。 3. 在使用Gerrit之前,你需要激活账号并生成SSH密钥。你可以在本地生成SSH密钥对,并将公钥配置到Gerrit服务器中。 4. 下载代码:在Gerrit的页面上,你可以浏览项目并进行查看。你可以使用过滤器来快速搜索你感兴趣的项目。找到你想要下载的项目后,可以点击浏览页面下的repositories进行查看。在这里,你可以选择下载代码。 5. 修改与提交:在本地进行代码修改后,你可以使用git命令将修改提交到Gerrit服务器。在提交后,Gerrit会为每次提交生成一个change id,并在Gerrit中生成一个review请求。 6. Gerrit页面进行代码审核并合并至远程分支:在Gerrit页面上,你可以对提交的代码进行审核。审核包括对代码质量、风格等方面的评审。如果审核通过,你可以将代码合并至远程分支。 7. 远程合并后本地需要git pull更新同步:在远程合并之后,你需要在本地使用git pull命令来更新同步。之后,你可以使用git log命令来查看更新后的代码。 以上是一个简单的Gerrit使用教程,希望对你有所帮助。如果你还有其他问题,请随时提问。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值