说明
本教程说明了如何在Adroid手机上安装TermuxApp,并部署Ubuntu系统,说明了如何直接在Termux内安装ssh服务(推荐,后来补充的这种方法,避免和开机用手机输入大量命令行),以及在ubuntu内安装ssh服务,并提供了ubuntu内安装docker的基本步骤和ollama部署轻量大模型,用于学习参考,在实际操作中,doker功能的实现存在限制,参考为主。
安装Termux App
开源项目地址:https://github.com/termux/termux-app
下载地址,直接下载termux,不要下载成了f-droid:
https://f-droid.org/en/packages/com.termux/
安装Ubuntu
在 Termux 里安装 Ubuntu,标准且推荐的方法是通过proot-distro工具。整个过程不需要 Root 权限,跟着下面的步骤操作即可。
📋 准备工作
确保 Termux 是从F-Droid下载的(Google Play 版本已废弃),手机剩余存储空间建议在4GB 以上。
🚀 安装步骤
1. 更新 Termux 包列表
pkg update&&pkg upgrade-y过程中如果提示配置文件冲突,直接按回车或输入N即可。
2. 安装 proot-distro
pkginstallproot-distro-y3. 安装 Ubuntu
proot-distroinstallubuntu这会下载 Ubuntu 24.04 LTS 的 rootfs 文件,大小约 200-400MB,耐心等待完成。
4. 登录 Ubuntu 环境
proot-distro login ubuntu看到命令提示符变成root@localhost:~#就说明成功了。
5. 初始化 Ubuntu(在 Ubuntu 环境内执行)
aptupdate&&aptupgrade-yaptinstallsudonano-y🔄 日常使用
以后每次打开 Termux 想进入 Ubuntu,只需执行:
proot-distro login ubuntu如果希望打开 Termux 自动进入 Ubuntu,可以把这条命令追加到~/.bashrc文件中。
💡 小提示
proot 环境不支持 systemd,所以像systemctl这类命令用不了。需要后台运行服务时,可以直接用nohup或&来启动进程。
安装Open SSH服务(直接在Termux内安装,推荐):
该步骤完成后直接支持远程登录,省去了在手机上输入命令的麻烦
⚠️ Termux 的 sshd默认端口是 8022,不是标准22端口
1. 更新包并安装 openssh
pkg update&&pkg upgrade-ypkginstallopenssh-y2. 设置登录密码(必须!)
passwd输入两次密码,这就是远程SSH登录的密码。
3. 查看登录用户名
whoami输出类似:u0_a147,这个就是ssh登录账号。
4. 查看手机局域网IP(电脑同WiFi连接)
ipa找到wlan0下的inet,例如192.168.1.100。
5. 启动 sshd 服务
sshd如果报错
no hostkeys available,先生成主机密钥:
ssh-keygen-Asshd停止ssh服务:
pkillsshd6. 电脑端连接(Windows PowerShell / Linux / Mac)
sshu0_a147@192.168.1.100-p8022替换用户名、IP,端口固定8022,输入刚才设置的密码即可登录。
7. 可选配置
开机自动启动 sshd(打开Termux就启动)
echo"sshd">>~/.bashrc公钥免密登录(推荐,更安全)
电脑端生成密钥后,把公钥写入Termux:
mkdir-p~/.ssh# 将电脑id_rsa.pub内容追加到下面文件echo"你的公钥内容">>~/.ssh/authorized_keyschmod700~/.sshchmod600~/.ssh/authorized_keys然后修改$PREFIX/etc/ssh/sshd_config,关闭密码登录:
PasswordAuthentication no改完重启pkill sshd && sshd
常见坑
- 连不上:电脑和手机必须同一个局域网;手机省电策略会杀掉Termux后台,需要关闭电池优化、后台限制。
- 端口不能改22:Android不允许普通进程监听1024以下端口。
- 外网访问:局域网只能内网连接;外网需要端口映射/ngrok等内网穿透。
- 连接被拒绝:确认sshd已经运行
ps aux | grep sshd。
安全提醒
- 不要把密码登录暴露到公网;优先使用密钥认证。
- Termux后台被杀是安卓机制,长时间运行建议把Termux加入后台白名单。
安装Open SSH服务(ubuntu内)
该步骤完成后,支持远程直接登陆ubuntu,前提是已经在手机终端的Termux里进入了ubuntu系统。
要让外部设备远程直接登录你 Termux 里的 Ubuntu,需要在 Ubuntu 内部单独装一个 SSH 服务,并换一个和 Termux 自带的 SSH 不冲突的端口。
🛠️ 操作步骤
在 Ubuntu 环境内(也就是你现在所在的root@localhost:~#提示符下)执行以下操作:
安装 OpenSSH 服务端
aptupdate&&aptinstall-yopenssh-server生成主机密钥(必须执行)
ssh-keygen-A设置 root 密码(用于远程登录)
passwd输入并确认一个新密码。
修改 SSH 配置,换到新端口
nano/etc/ssh/sshd_config找到
Port那一行(如果被注释了就去掉#),把它改成2222(或者任何其他不冲突的端口,比如 10022)。不要用 8022,因为那是 Termux 自己用的。启动 SSH 服务
/usr/sbin/sshd注意:Ubuntu 里不能用
service ssh start或systemctl,直接用这个绝对路径启动即可。保持 Termux 会话不要关闭
sshd是作为当前 proot 会话的子进程运行的,一旦你退出这个 Termux 会话,它就会被终止。
💻 从电脑连接测试
现在在你的电脑上(确保和手机在同一个 Wi-Fi 下),执行:
ssh-p2222root@手机IP手机 IP 可以在 Termux(不是在 Ubuntu 里)用ifconfig或ip addr查看,通常是以192.168.开头的那一串。
如果连接被拒绝,先检查sshd是否在运行:在 Ubuntu 里执行ss -tln | grep 2222,看看端口有没有在监听。
到此,你可以远程登录手机上的ubuntu系统了
远程登录时,拒绝密码登录解决方案
这个错误在 Termux + Ubuntu 的环境里很常见,主要原因是Ubuntu 的 SSH 服务默认禁止 root 用户直接登录,或者密码认证方式没打开。
核心原因:Ubuntu 默认不允许 root 密码登录
你的 Termux Ubuntu 里,你用的账号是root。大多数 Linux 发行版的 SSH 服务出于安全考虑,默认不允许 root 用户通过密码远程登录。所以即使密码输对了,服务器也会直接拒绝。
解决方法:修改 SSH 配置
在手机上的 Ubuntu 环境里操作(也就是你现在root@localhost:~#的那个窗口):
1. 编辑 SSH 配置文件
nano/etc/ssh/sshd_config2. 找到并修改以下两行
如果行首有#,去掉它。确保最终是这两个值:
PermitRootLogin yes PasswordAuthentication yesPermitRootLogin yes:明确允许 root 用户登录。PasswordAuthentication yes:确保允许用密码认证,而不是只认密钥。
3. 额外检查一项(Termux 环境特有)
在同一文件里找到UsePAM,把它改成no:
UsePAM no因为 Termux 的 proot 容器里没有完整的 PAM 环境,开着它可能导致 sshd 启动失败或认证异常。
4. 保存退出
按Ctrl+O保存,回车确认,再按Ctrl+X退出。
5. 重启 SSH 服务
先杀掉旧的 sshd 进程,再重新启动:
pkillsshd /usr/sbin/sshd注意:Ubuntu 里不能用
systemctl restart sshd,那在 proot 环境里无效。
如果还是不行,检查这几点
- 确认 Xshell 里填的端口:必须是你设置的
2222(或你改的其他端口),不是默认的 22。 - 确认密码已设置:在 Ubuntu 里执行
passwd root重新设一次,输入时屏幕不显示字符是正常的。 - 确认 IP 正确:在 Termux(不是 Ubuntu)里执行
ifconfig,确认手机 Wi-Fi 的 IP 地址。 - 确认 Termux 会话没关:
sshd是依附在当前 Termux 会话上的,Termux 关掉服务就停了。
安装Docker
ubuntu里不能直接装Docker,需要在Termux里装
核心思路是:在 Termux 主机(而非 proot Ubuntu 内部)运行udockerd,让 proot Ubuntu 里的docker客户端通过网络连接到它。这样绕过了 proot 无法运行 Docker 守护进程的限制。
🧐 架构原理
udockerd是一个用 Python 写的 Docker Engine API 兼容守护进程,底层由udocker驱动,无需 root、namespaces 或 cgroups。它运行在Termux 主机上,监听一个 TCP 端口(默认 2375)。然后你的 proot Ubuntu 里的docker客户端,通过设置DOCKER_HOST=tcp://127.0.0.1:2375,就能和它通信。
📦 操作步骤
第一步:在 Termux 主机(不是 proot 内)安装 udockerd
打开 Termux(就是你平时打开的那个终端,不要用proot-distro login ubuntu进去),执行:
# 安装 Python 和必要依赖pkg update&&pkg upgrade pkginstallpython python-pipcurltar# 安装 udockerdpipinstalludockerdudockerd 需要 Python 3.12+ 和 curl/tar。安装完成后,udockerd命令应该就可以用了。
第二步:启动 udockerd 守护进程
在 Termux 主机上,让它后台运行:
# 后台启动 udockerd,监听默认的 127.0.0.1:2375nohupudockerd>~/udockerd.log2>&1&如果想让日志更详细便于排查,可以加-v:
nohupudockerd-v>~/udockerd.log2>&1&udockerd首次运行时,udocker会自动下载它需要的 proot/fakechroot 执行后端,可能需要一点时间。
验证是否启动成功:
psaux|grepudockerd# 或者看端口是否在监听netstat-tlnp2>/dev/null|grep2375第三步:进入 proot Ubuntu,配置 DOCKER_HOST
现在进入你的 Ubuntu 环境:
proot-distro login ubuntu在里面设置环境变量,指向 Termux 主机上运行的 udockerd:
exportDOCKER_HOST=tcp://127.0.0.1:2375为了让这个设置永久生效,可以写入~/.bashrc:
echo'export DOCKER_HOST=tcp://127.0.0.1:2375'>>~/.bashrcsource~/.bashrc注意:
127.0.0.1在这里是可行的,因为 proot 环境共享 Termux 主机的网络命名空间,localhost 是互通的。
第四步:测试 docker 命令
dockerps# 应该不再报 socket 错误,而是显示空列表dockerpull alpinedockerrun--rmalpineechohello⚠️ 重要限制
使用 udockerd 时,有几个明确的边界需要知道:
docker build 仅支持经典构建器:如果你的 Docker CLI 默认使用 BuildKit,需要设置export DOCKER_BUILDKIT=0才能正常 build。
无进程隔离:udocker 的容器和 Termux 主机共享 PID namespace,不是真正的隔离环境,只适合单租户场景(也就是你自己用)。
无 docker compose:udockerd 不直接支持 docker compose,如果需要编排多个容器,只能手动用脚本管理。
仅限 Linux:udockerd 依赖 proot,只能在 Linux 内核上运行。
💡 后续建议
udockerd 启动后,终端关闭它可能会被终止。如果想让它长期稳定运行,可以考虑结合termux-wake-lock防止 Termux 被系统休眠,或者用nohup+ 后台方式确保进程存活。
如果你后续想跑一些实际的镜像(比如 Home Assistant、Jellyfin、Nextcloud 等),社区有现成的 Termux-Udocker 脚本可以参考,能省去手动配置端口映射和挂载的麻烦。
ubuntu内部署轻量大模型(学习):
在 Termux 的 Ubuntu 服务器中安装和运行轻量版大模型是完全可行的,目前最主流的方式是通过Ollama来部署。
🧠 怎么装:用 Ollama 跑轻量模型
- 环境准备:确保 Termux 中已通过
proot-distro安装并登录了 Ubuntu。 - 安装 Ollama:在 Ubuntu 环境中执行一键安装命令:
curl-fsSLhttps://ollama.com/install.sh|sh - 启动服务:运行
ollama serve或让它后台运行。 - 后台运行命令:
nohupollama serve>ollama.log2>&1&# 查看进程是否启动psaux|grepollama - 拉取并运行轻量模型:推荐从参数量最小的模型开始尝试,例如:
其他适合手机端的轻量选择还包括ollama run qwen2.5:0.5bdeepseek-r1:1.5b、llama3.2:1b、tinyllama:1.1b等。
📊 实际性能参考
在手机上运行大模型,性能主要取决于手机的芯片和内存。根据实测数据,不同设备的体验差异较大:
- 旗舰机型 (如骁龙 8 Elite):运行Qwen 2.5 1.5B(Q4量化) 时,生成速度可达38.4 tokens/秒,体验比较流畅。
- 中端机型 (如 Exynos 1380):运行Qwen 2.5 0.5B速度约21.5 tokens/秒,但运行1.5B模型时速度会降至8.7 tokens/秒。
- 旧款旗舰 (如骁龙 865):运行Qwen 2.5 1.5B速度约13.8 tokens/秒。
⚠️ 需要注意的几点
- 硬件门槛:运行大模型对手机内存(RAM)和存储空间有要求,建议预留充足空间。如果手机 RAM 较小,建议优先尝试0.5B 或 1.5B级别的模型。
- 发热与耗电:推理过程会大量消耗算力,可能导致手机发热和电量消耗加快,建议在充电时或短时间使用。
- 体验预期:虽然能跑,但速度通常无法与电脑相比。如果追求流畅体验,3B 左右的模型可能是部分中高端手机的舒适上限。