我在手机上用 Termux 跑 SSH 和 code-server:先换源、安装 Node.js 和编译工具,再通过 npm 安装编辑器,最后把启动脚本接入 termux-services。下面按这个过程整理,保留局域网直接访问和后台服务的做法,再补充现在可选的安装方式。
基础工具和 SSH
pkg update && pkg upgrade
pkg install openssh nodejs-lts python python-pip git termux-services clang make pkg-config
termux-setup-storage
passwd
sshd
whoami
ip -4 addr show wlan0设置密码后用 whoami 确认账户名;更适合长期使用的是 SSH 公钥认证。termux-wake-lock 只能减少休眠影响,不能绕过厂商电量管理。
我当时的初始化还包括换源、升级和保持唤醒:
termux-change-repo
pkg up && pkg upgrade
termux-wake-locktermux-setup-storage 只在需要访问共享存储时执行。部分 Android 版本会限制 ip 查询;遇到权限错误时,从手机 Wi-Fi 设置查看地址,并让电脑和手机处于可互通的网络。
我当时使用的 npm 安装方式
先装编译依赖,再执行全局安装:
pkg install -y build-essential binutils pkg-config python3 nodejs-lts
export FORCE_NODE_VERSION=20
npm install --global code-server --unsafe-permFORCE_NODE_VERSION=20 是我当时留下的环境设置,它本身不会安装或切换 Node.js;实际版本要用 node --version 查看。恢复旧环境还需核对所选 code-server 版本的 Node.js 要求,不能把这个变量当成版本管理器。
现在的 code-server Termux 安装说明还提供 Tur 仓库安装方式,可以作为另一条路线:
pkg install tur-repo
pkg install code-server两种安装方式选择一种即可。切换前先用 command -v code-server 和 code-server --version 确认当前运行的是哪个安装位置。
code-server 与安全访问
原来的启动命令直接监听所有接口,方便电脑在同一局域网通过手机 IP 访问:
code-server --bind-addr 0.0.0.0:8080在电脑浏览器输入 http://手机IP:8080,并使用配置文件中的密码登录。这种方式让同网络可达设备也能连接,且 HTTP 不加密;需要让流量经过 SSH 时,改用下面的回环监听和隧道方案。
code-server 默认配置通常启用密码认证并监听 127.0.0.1:8080。检查手机端配置文件,确认 auth: password、bind-addr: 127.0.0.1:8080 和密码字段;配置说明建议保留认证,安全访问指南推荐用 SSH 隧道:
code-server --bind-addr 127.0.0.1:8080手机端 SSH 服务默认使用 8022 端口。电脑端执行:
ssh -p 8022 -N -L 8080:127.0.0.1:8080 TARGET_USER@HOST浏览器打开电脑端的 http://127.0.0.1:8080,密码从手机端 ~/.config/code-server/config.yaml 读取。没有认证和 TLS 时不要监听 0.0.0.0。
服务和后台限制
termux-services 安装后重启当前 shell,让服务管理器环境生效。若已有前台 code-server 占用 8080,先按 Ctrl-C 停止它,再启用服务。项目目录放在 $HOME 下,避免 Android 共享存储的权限和文件监听限制。runit 服务目录可使用一个最小的 run 文件:
mkdir -p "$PREFIX/var/service/code-server"
cat > "$PREFIX/var/service/code-server/run" <<'EOF'
#!/data/data/com.termux/files/usr/bin/sh
CONFIG="$HOME/.config/code-server/config.yaml"
if [ -f "$CONFIG" ]; then
exec code-server --config "$CONFIG" 2>&1
fi
echo "请先以前台方式启动 code-server,生成并检查配置文件" >&2
exit 1
EOF
chmod 700 "$PREFIX/var/service/code-server/run"
mkdir -p "$PREFIX/var/service/code-server/log"
ln -sf "$PREFIX/share/termux-services/svlogger" "$PREFIX/var/service/code-server/log/run"
sv-enable code-server
sv up code-server
sv status code-server这里保留了原 mobile/code-server/run 中“配置存在才启动”的判断,并给变量加上引号。原来我用 cp mobile/code-server/run "$PREFIX/var/service/code-server" 安装脚本,随后执行 chmod 777 "$PREFIX/var/service/code-server/run";上面的内联文件写法方便直接复现,权限改为只给当前用户读写执行的 700,不需要让其他用户也能改服务脚本。
日志仍使用原来的 svlogger。根据 termux-services 官方说明,排查时查看:
tail -n 100 "$PREFIX/var/log/sv/code-server/current"
pgrep -af code-serverAndroid 需要允许 Termux 后台运行,并关闭针对 Termux 的电量优化;termux-wake-lock 只能减少休眠影响。应用被系统回收后服务仍可能停止。我还记录过 pkg install proot-distro 作为另一种环境选择,但没有留下后续配置,因此这里不把它展开成已经完成的部署流程。