Termux手机运维
我的手机是OnePlus7 Pro 官方系统, 没有root, 仅安装一个Termux应用来使用
初衷
之前我写过两篇博客:
近期考虑了下, 原生的termux功能肯定是不如原生Linux强的, 因此, 我想在手机上单独跑一个Linux系统, 而后利用frp做穿透, 可以将ssh端口暴露至公网. 可以利用手机运行Linux, 并且能随时随地访问.
简单的linux环境
在上个博客vscode_remote在Android上运行记录中, 已经可以使用anyfed
来运行fedora
系统, 原理的话就是proot
, 这次我学聪明了, 直接搜索了proot linux
找到了官网中的这部分内容:
https://wiki.termux.com/wiki/PRoot
可以直接利用proot-distro
来运行和启动系统
1 | proot-distro install <alias> |
ssh服务以及frp服务
ssh服务
主要需要编辑/etc/ssh/sshd_config
22端口肯定是不可用的, 我因此换成了8122, 手机上默认都是用root用户的, root用户也需要允许密码登录
PermitRootLogin yes
frp服务
使用frp主要是希望将自己的端口映射到公网中, 这样可以随时随地连接, token和server_addr 需要自己提前准备好.
1 | [common] |
服务启动以及守护进程
由于我们是使用了proot
, 并不是一个完整的Linux系统, 没有办法使用systemd做守护进程.
没办法, 我选择了supervisor做服务管理, 目前仅管理了sshd以及frp.
.bashrc中, 检查到supervisor未启动, 则进行启动:
1 | if [ ! -f /proc/$(cat /var/run/supervisord.pid)/status ]; then |
启动了supervisor之后, 发现supervisorctl无法连接, 这个主要是unix socket的读取问题, proot的限制略多. 我这里使用的替换方案是, 改用tcp端口
主要修改: /etc/supervisor/supervisord.conf
,
1 | [inet_http_server] |
1 | # 这样再去运行命令就正常了 |
安全性与易用性讨论
安全性
回顾一下刚刚的博客中的操作, 你可数过我有多少不安全的操作, 这里我分别列一下:
- 日常使用root用户操作
PermitRootLogin yes
允许root用户密码登录- frp穿透后, 暴露到公网的IP和端口
- supervisor使用tcp socket, 意味着机器上所有用户均有管理权限
建议大家平时在工作中千万不要有上面的用法!!!
由于我是在Termus
中使用的proot, 所以这个root权限的功能很小, 可以这么用, 这个系统中没有其他用户, supervisor也可以直接这么用.
frp
穿透仅在我启动应用时才会进行, 也就是说, 平时关闭了Termux
, 并不会将端口暴露在公网中.
易用性
- 与直接使用
Termux
不同, 使用一个较为完整的Linux系统体验上会好很多, 有glibc, 可以运行各种Linux软件, 与开发服务器无异 - 定制化的启动与关闭, 针对在外运维的同学, 手头上只有手机(硬核的朋友也可以直接在手机上运维.) . 舒适一些的方案是在网吧找一台电脑, ssh连到自己的手机上, 也可以使用vscode remove作为一台临时的开发机
- 平时手机上我会安装公司提供的VPN, 在termux中也可以走VPN, 这个小Linux系统也获得了和办公网一样的体验
总结
博客只是介绍一种我自己平时在用的远程运维的方案, 我平时很少带电脑出门, 能用手机跑一个Linux系统实在是方便了很多. 另外, 仅依靠终端能做到的事情有限, 运维管理的网页端最好也有配套的设施, 这样非工作时间出现问题就能更好更快的处理了.