解决 Termux 交互式 Shell 远程访问问题
背景
Termux 是一个强大的 Android 应用程序,可以在安卓设备上直接运行 Linux 命令。尽管它可以方便地通过 ADB 实现远程管理和控制,但想要在 Termux 中获得交互式的 shell 并不太直观。本文将详细介绍如何使用 run-as
命令来实现这一目标。
问题
用户希望能够在不依赖 Termux SSH 服务的情况下,在没有直接与设备进行物理交互的前提下,在终端上运行 Termux 的命令并得到交互式会话的结果。
现有解决方案
- 使用 ADB 发送单条命令:
shell
adb shell input text "your command here"
adb shell input keyevent ENTER 这个方法只能发送一条命令,并立即执行。每次都需要手动输入,效率较低。
通过 Termux .profile 启动 Termux Shell:
- 根据评论的建议,在
.profile
文件中添加启动 sshd 的配置:
shell
echo 'sv up sshdsshd started' > .profile - 并使用
adb shell am start -n com.termux/.HomeActivity
从命令行启动 Termux。这样就会立即开启 Termux Shell。 该方法的问题是每次启动都需要额外配置,不够理想。
使用
run-as
命令远程访问 Termux:- 用户通过以下步骤实现交互式 Termux shell 的访问:
shell
adb shell
run-as com.termux files/usr/bin/bash -lic 'export PATH=/data/data/com.termux/files/usr/bin:$PATH; export LD_PRELOAD=/data/data/com.termux/files/usr/lib/libtermux-exec.so; bash -i'
解决方案描述
- 确保 Termux 版本支持 debuggable 构建:
- 通过访问
<https://github.com/termux/termux-app>
获取最新版本。对于 Play Store 应用,建议下载并安装开发版 APK(如果可得)。 使用命令
adb shell
进入 Android 的 shell 环境。执行 run-as 命令启动 Termux Shell:
在 ADB shell 中输入指令来运行交互式 Termux shell:
shell
adb shell run-as com.termux files/usr/bin/bash -lic 'export PATH=/data/data/com.termux/files/usr/bin:$PATH; export LD_PRELOAD=/data/data/com.termux/files/usr/lib/libtermux-exec.so; bash -i'使用脚本简化启动流程:
创建一个简单的 Bash 脚本存储在 SD 卡上,例如
/sdcard/termux-shell.sh
:
shell
echo '#!/data/data/com.termux/files/usr/bin/bash' > /sdcard/termux-shell.sh
echo 'run-as com.termux files/usr/bin/bash -lic "export PATH=/data/data/com.termux/files/usr/bin:\$PATH; export LD_PRELOAD=/data/data/com.termux/files/usr/lib/libtermux-exec.so; bash -i"' >> /sdcard/termux-shell.sh
chmod +x /sdcard/termux-shell.sh在远程主机上运行该脚本以连接 Termux:
shell
adb shell exec /system/bin/sh /sdcard/termux-shell.sh
注意事项
- 确保 Termux 的
com.termux
包已安装并且其构建版本支持run-as
功能。 - 在某些设备上,您可能需要确保 termux 为 debuggable 构建。如遇到特定错误
run-as: package not debuggable
,请确认所使用的 Termux 版本是否在开发版本中可用或联系开发者。
以上步骤可以帮助用户实现远程和交互式的 Termux shell 访问,极大地方便了对设备的调试与操作。