[OpenSTF使用问题] remote connection 成功,但无法找到devices

背景

之前为了满足某客户的安全需求,需要将Android测试机所在封闭的柜子里,这样一来,远程连接就成了解决安全需求的一种方案。那如何远程管理并操作多台Android设备呢?

OpenSTF 恰好是解决这一个问题的工具。于是就在一台Ubuntu服务器上搭建了OpenSTF环境。Android开发人员只需从本机打开OpenSTF 并根据open STF上对应的remote adb命令, adb remote connect 到服务器上的设备就可以进行开发调试了。

问题

然而昨天开始,团队中其中一名Android 开发出现了adb devices 无法找到远程设备的问题。经过查看log发现,remote connection建立连接成功,但是authentication失败。并且该开发表示昨天还是好的,但重启机器,重新登陆后出现了这个问题,可以远程控制设备,可以建立remote connection成功,但是无法找到远程设备。

定位问题

经过一番google,在OpenSTF的issues里面找到了答案:
https://github.com/openstf/stf/issues/170
https://github.com/openstf/stf/issues/428
https://github.com/openstf/stf/issues/478

特别是478


image.png

提醒了我,由于我搭建的是一套OpenSTF的Dev环境,用户可以用任意用户名密码登陆,然后ADB key本身又跟远程连接的开发机一一对应, 而OpenSTF识别用户的唯一方式是邮箱。如果用户第一次用邮箱A登陆了OpenSTF并连接,且添加了ADB key。第二天用邮箱B来登陆时,该开发忘记了昨天的用户名,就随便用了另一个账户。也是这样的原因,导致OpenSTF认为该远程机器已认证,但是该用户名未授权,所以导致remote connection建立成功,但是无法看到设备。

解决问题

摆在面前最直接的答案是找回第一次的邮箱账户。但该Dev表示已经记不起来了。那么就下还有两种方式:

  • 撤销OpenSTF对该android 开发所用账户的第一次授权
  • 重新部署OpenSTF环境,清空数据库。

由于时间有限,目前已经阻碍正常开发活动,从经验的角度,最好的方式是撤销授权,但是我暂时并不清楚如何撤销,所以最快的方式成为了清空数据重新部署。

在删除所有docker container,并删除了服务器上挂载在rethinkDB和storage的Volume文件夹,然后重新部署,在该开发再次登陆OpenSTF,并进行adb remote 连接之后,add adb key的弹窗重新弹出,确认后,果然发现了设备。

预防问题

此次事件暴露了用OpenSTF开发环境来当生产环境的问题,虽然这次解决了问题,但是导致清空了数据库,让所有的开发人员都需要重新授权ADB key。说到这里,有人会问,为什么不能share adb key? 确实,这是一个办法,上面的issue#428就在讨论这个问题,有兴趣的可以读一下。

目前android开发自己提出的方案是明确文档规定大家必须使用唯一的邮箱账户登陆。暂时这个方案可以解决燃眉之急,但并不是一个好的方案。更好的方案,毫无疑问的是部署一套真正的产品环境的OpenSTF,把用户权限彻底用起来,以免下次再出现类似的问题。

你可能感兴趣的:([OpenSTF使用问题] remote connection 成功,但无法找到devices)