不知道大家有没有被这玩意儿困扰过,第一次插上手机进行 adb
调试的时候,总会弹出 “允许usb调试” 的弹窗。
这手机明明就在我的手上,为什么还要弹出这个信任框呢,这不是多此一举吗?
一个场景:我现在有一台 Android
电视,通过网络 adb
进行连接,但是同一局域网内有不止我自己一台电脑,这时候如果没有这个权限校验,那任何该网络下的设备都可以连接到这个电视,那就保不准会干些什么坏事了。
本文介绍的方式,有一个非常重要的前置条件,就是手机得有 Root
权限。
本文测试电脑 win 10
,测试手机 一加7pro OnePlus GM1910 (Android 10)
。
具体方式:将当前设备上的 adbkey.pub
中的内容放入手机的 adb_keys
文件中(注意:adb_keys
文件的权限&&所属用户/组)。
adbkey.pub
文件路径
linux/mac: ~/.android/adbkey.pub
windows: %USERPROFILE%/.android/adbkey.pub
adbkey.pub(windows)
文件内容示例:
QAAAAG8Hqu5xyByP5u7KnIhZ9J/pS9mMf049HNSvtvPunLDsSlUfSSlymdwA0tSQ9QeOHPW7E+m2cmDbpbHNpzsdpvMY+aBuOIYoiSqFizXPlHC8lms0qeU8rTGgjv4FaKMnzvK5MRuhLjOswDJlB+eEhWVHQTCVTlrxwzRY2rgRYJ/+rcU9NPYnUWiSl6eIZmE2RLPvRxGXPM8pmcY6UxJ/cQ/OHH8OQrKxlSRuq48dFUNKiGcHMW/CJXGbSpTufb+iHZZattArB31uCBvvucYSe5w/cQKqoqsbkGouo1rieTKmeySZzrOQTS71gz0vYyfe9cDTRMyq+GpDfZW/ZecPmh7dvVbNRN39FgKEGgusYfjyuQptUEAImS819RJ8lTF6oWt/2+UkS1BcyqVjvwqF+bhQKZoyE0WZggT4om5vfXlxh1K05iC+64bCKWaE+/NNys0Kv3McJ25qXO32w8GymSSM6SvI8YGOAZwKcQo0F/XzKfDaalksKt500VgrpvDtt4Ot40pus67fXCwxG2tos4bFROru4/Yp9iyb6Gw6E93sG17yqueunzxO7rVyIojrvh9pqCqglHhOtS8i7tEoUiM7NvF/HcWpLxPlWIYPp1GEu3NbY11I3wVrbe077ZyjCf4elmSOKa0E31MO1Gt+nZs2tERP16lO20LQrYomNg8bmz9kHgEAAQA= 用户名@主机名
adb_keys
文件路径
/data/misc/adb/adb_keys
adb_keys
文件内容同 adbkey.pub
,注意:如果手机信任了不止一台设备,每一行就是信任的设备的 adbkey.pub
中的内容,示例如下:
QAAAAG8Hqu5xyByP5u7KnIhZ9J/pS9mMf049HNSvtvPunLDsSlUfSSlymdwA0tSQ9QeOHPW7E+m2cmDbpbHNpzsdpvMY+aBuOIYoiSqFizXPlHC8lms0qeU8rTGgjv4FaKMnzvK5MRuhLjOswDJlB+eEhWVHQTCVTlrxwzRY2rgRYJ/+rcU9NPYnUWiSl6eIZmE2RLPvRxGXPM8pmcY6UxJ/cQ/OHH8OQrKxlSRuq48dFUNKiGcHMW/CJXGbSpTufb+iHZZattArB31uCBvvucYSe5w/cQKqoqsbkGouo1rieTKmeySZzrOQTS71gz0vYyfe9cDTRMyq+GpDfZW/ZecPmh7dvVbNRN39FgKEGgusYfjyuQptUEAImS819RJ8lTF6oWt/2+UkS1BcyqVjvwqF+bhQKZoyE0WZggT4om5vfXlxh1K05iC+64bCKWaE+/NNys0Kv3McJ25qXO32w8GymSSM6SvI8YGOAZwKcQo0F/XzKfDaalksKt500VgrpvDtt4Ot40pus67fXCwxG2tos4bFROru4/Yp9iyb6Gw6E93sG17yqueunzxO7rVyIojrvh9pqCqglHhOtS8i7tEoUiM7NvF/HcWpLxPlWIYPp1GEu3NbY11I3wVrbe077ZyjCf4elmSOKa0E31MO1Gt+nZs2tERP16lO20LQrYomNg8bmz9kHgEAAQA= 用户名@主机名
QAAAAAtY+nhdjLi3p5OUfrXZVLvJT34oV2mkjzR6OSKadbg2lAFaqOt337+z1eZbXibB9kzGcne5SkDOc/pEi7wLs+z0IOn+pzP1JuxzpFMvbmw0TvqonatLlviQyPQNWe5JAxg3iD6++n0c3mSF7MVBBWecEGcP+iYm8pubpsMwCHnJPor9K/3M2GFV4mOU7rTrJqWyA41Wlr0F2tclt7j2FBG8gRrXHSxes9RdW0tahgDbxw/hTmYxnGwkM2Y4FWw2gR/UNJRxE+rCWB8MkAGpJZcj9vLMHSfZxllswZukzuyKt51ITk+CiKTP/tzd2dJtfno1GHN4seHrft38JnBB2+y2NDPYAS8n0JNFDyPML7g8d7vTmDUlex7Cv3mBBHJu6sSbsnBJ5ABY0K79fQjpK87d9WwIx/u+XSOvyJR3RTTKeC8lJApKspADUuFtUP1cpNLpe6mwWl/74ZmMxmsFone8BVt5IdlcrJyZ8qyHE0e1ROtHfDExQQWwOVT830HjCo15s3b56eeFpUEJt5OBNfO522PFm2pH21aabAT50+XU+gdiDgfhFgpMphyQUdiEtnbztc4K4x0nTkZ8DP6a/7rI0kNMGvDL0/BHIi0gXyNPgJXBYsOIrQPMviQri+EIbRD8yslaiizjJJ4nGYjEk/AROFqiis2f2DL1KIciqdVqNgRmGAEAAQA= 用户名1@主机名1
adb_keys
文件权限
-rw-r----- 1 system shell 716 2025-01-16 10:26 adb_keys
# 当权限或用户不对时需更改
chmod 0640 adb_keys
chown 1000:2000 adb_keys
测试使用的 Root
手机比较少,需要做资源调配。
直接人工将手机传来传去,效率太低了,通过部署一台手机调度服务器来动态地做手机的分发(网络 adb
连接)。
用户将自己的 adbkey.pub
传到服务器,服务器将其写入手机的 adb_keys
文件,当用户不再使用手机时,清理 adb_keys
文件。
这里简单提一下如何进行 adb
网络调试。
USB
数据线将手机连接至电脑,电脑上执行 adb tcpip 5555
(前置步骤,用于打开网络adb调试)。adb connect <设备IP地址>:5555
进行 adb
网络连接。简单了解一下 usb
调试的信任机制的原理,包括密钥生成与交换、授权管理以及加密通信等环节。
当一台新的计算机尝试通过 adb
连接到 Android
设备时,会经历以下过程:
adb
工具会自动生成一对公私钥(位于~/.android/adbkey
为私钥,~/.android/adbkey.pub
为对应的公钥)。Android
设备以请求建立信任关系。/data/misc/adb/adb_keys
文件中。此文件包含了所有已授权计算机的公钥列表。/data/misc/adb/adb_keys
文件(除非拥有 Root
权限),但可以通过开发者选项中的“撤销USB调试授权”功能来清除所有授权记录,从而强制下次连接时重新进行信任确认。Root
权限,可以手动编辑adb_keys
文件来添加新的公钥或移除不再信任的计算机。一旦建立了信任关系,所有后续的 adb
通信都将使用之前生成的密钥对进行加密,以确保数据传输的安全性。具体实现如下:
adb
传输的数据内容。尽管 adb
设计了一套较为完善的安全机制,但在使用过程中仍需注意以下几点:
adb
工具版本是最新的,以便及时获得最新的安全补丁和改进措施。通过上述介绍,我们可以看出 adb
的 usb
调试信任机制不仅考虑到了便捷性,同时也兼顾了安全性,为用户提供了一个相对安全的开发和测试环境。
本篇介绍了在对 Android
设备进行 adb
调试时,如何默认连接,不弹出“允许usb调试”的信任框。需要手机有 Root
权限,更改手机的 /data/misc/adb/adb_keys
文件可达到目的。
简单阐述了 usb
调试的信任机制的原理,其实就是使用非对称加密密钥来保证数据传输的可靠,通过手动的点击信任来确保设备可靠。