【问题标题】:ADB RSA key fingerprint changes on Azure DevOps (vsts) self hosted agentAzure DevOps (vsts) 自托管代理上的 ADB RSA 密钥指纹更改
【发布时间】:2019-02-17 01:57:38
【问题描述】:

我有一个 VSTS/Azure DevOps 自托管代理在一台机器上作为服务运行,该机器通过 USB 连接了我想与 ADB 一起使用的 Android 设备。

在构建期间,命令行任务调用 ADB 命令。当有人登录机器时,我遇到了设备未经授权的问题。我观察到的情况是

  • 在没有人登录机器的情况下,我插入 Android 设备并获得允许 USB 调试的提示并选中始终允许框并单击确定
  • 构建运行正常,ADB 命令工作
  • 一段时间后,有人登录到机器,设备对他们来说是未经授权的
  • 在下一次构建期间发送 ADB 命令时,我再次使用不同的 RSA 密钥指纹得到提示

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

【问题讨论】:

  • 虽然您的特定虚拟化平台可能不同(与您链接的问题中的平台不同),但问题的根本原因(非持久性用户主目录)仍然相同。
  • 默认情况下,ADB 主机密钥是用户特定的。在您的设置中,您可能希望使用计算机专用密钥。这应该可以通过ADB_KEYS_PATH environment variable 实现。
  • 看来我可以通过设置 ADB_VENDOR_KEYS 系统环境变量来让它工作,但只有在将它设置为文件而不是文件夹时。例如,c:\adb_keys\adbkey 有效,而不是 c:\adb_keys,其中 adbkey 是键。我假设 ADB_KEYS_PATH 也可以,但是运行 adb 会显示一个环境变量列表,表明我们应该使用 ADB_VENDOR_KEYS。
  • 有趣的是,当没有人登录并且未设置此环境变量时,我可以启用调试。我假设 adbkey 被放置在系统的某个地方,但我找不到它。

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


【解决方案1】:

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

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 的新构建,一切都应该正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-09
    • 2021-11-14
    • 1970-01-01
    • 2019-11-06
    • 2019-08-31
    • 2021-02-20
    • 2012-03-25
    相关资源
    最近更新 更多