Azure DevOps(vsts)自托管代理上的ADB RSA密钥指纹更改

时间:2018-09-12 12:16:18

标签: android azure-devops azure-devops-self-hosted-agent

我有一个VSTS / Azure DevOps自托管代理作为服务运行,该计算机在要通过ADB与USB连接的Android设备上通过USB连接。

在构建期间,命令行任务会调用ADB命令。我遇到一个问题,当有人登录到计算机时,设备会变得未经授权。我观察到的是

  • 在没有人登录计算机的情况下,我插入了Android设备,并得到提示以允许进行USB调试,并选中“始终允许”框,然后单击“确定”。
  • 构建正常运行,ADB命令正常运行
  • 有时,有人登录到计算机,并且该设备对他们未经授权
  • 在下一次构建中,当发送ADB命令时,我再次收到带有不同RSA密钥指纹的提示

这似乎类似于RSA fingerprint change every time a new build is started,但他们的问题是针对docker / gitlab-ci的。

1 个答案:

答案 0 :(得分:0)

要解决此问题,您将需要创建一个系统范围的ADB密钥,并使用ADB_VENDOR_KEYS环境变量告诉ADB它在哪里。

ADB_VENDOR_KEYS被描述为以冒号分隔的键(文件或目录)列表。您应该可以将其设置为目录,但是当时我只能使它与文件一起使用。由于ADB在服务中运行,因此将其设置为系统环境变量而不是用户环境变量确实很重要。

设置步骤是

  • 通过运行adb start-serveradb devices创建adbkey。他们的关键是 位于C:\Users\<yourname>\.android中。如果您已经在运行adb(可能是这种情况),那么adb服务器将已经启动,并且密钥已经创建。
  • 创建一个文件夹,例如C:\adb_keys并将密钥复制到该文件夹​​
  • 添加一个名为ADB_VENDOR_KEYS的系统环境变量,其值为 C:\adb_keys\adbkey或上一步中放置密钥的位置。
  • 授权USB调试连接。以下步骤可能会过大,但应确保不会遇到障碍。
    • 关闭并重新打开命令提示符(或重新启动计算机),以便能够使用新的环境变量
    • 拔出设备
    • 杀死ADB服务器。 adb kill-server
    • 撤消设备上的USB调试授权。设置>开发者选项>撤销USB调试授权。
    • 在设备上禁用并重新启用USB调试
    • 插入设备
    • 启动ADB服务器。 adb start-serveradb devices
    • 接受“允许USB调试吗?”选中“始终允许这台计算机允许”复选框

重新启动计算机,并排队使用ADB的新版本,一切正常。