前言

Termux 是一个 Android 下的终端模拟器,可以在手机上模拟 Linux 环境。它是一个手机 App,可以从应用商店直接下载安装,打开就能使用,它提供一个命令行界面,让用户与系统交互。它支持 apt 软件包管理,可以十分方便安装软件包,而且完美支持 Python 、 PHP 、 Ruby 、 Go 、 Nodejs 、 MySQL 等工具。随着智能设备的普及和性能的不断提升,如今手机、平板等设备的硬件标准已经直逼入门级桌面计算机,使用 Termux 完全可以把手机变成一个强大的小型服务器。你甚至可以使用 Termux 通过 Nmap、Sqlmap、BBScan、subDomainsBrute、Hydra、RouterSploit 等工具实现端口扫描、注入检测、子域名爆破、多协议弱口令爆破、路由器漏洞检测框架多种功能,把手机打造成一个随身携带的渗透神器,成为现实版的艾登·皮尔斯。

下载安装

官方推荐从 F-DroidGoogle Play 这两个平台下载,安装完打开就是下面这个样子。

基本操作

俗话说”会跑之前,要先学会走“,先了解基本操作,以后搞一些骚操作就轻而易举了。

选项和菜单

长按屏幕会出现可选择的复制光标,同时会显示Copy(复制)、Paste(粘贴)、More...(更多)这几个选项。

点击More...进入到下一级菜单。

长按屏幕
├── COPY: 复制
├── PASTE: 粘贴
├── More: 更多
   ├── Select URL: 选择 URL
   └── Share transcipt: 传输当前会话的所有输出(通过Android api)
   └── Reset: 重置
   └── Kill process: 杀掉当前终端会话进程
   └── Style: 风格配色(需安装 Termux:Styling 插件)
   └── Keep screen on: 保持屏幕开启
   └── Help: 帮助文档(Termux Wiki)

从左侧屏幕边缘向右滑动可以拖出导航栏,在这里可以新建、切换、重命名会话(session)和调出输入法。

常用快捷键

在使用终端时,需要使用到AltCtrlEsc等键,但手机上并没有这些键。

Termux 中可以使用音量减按钮来模拟Ctrl键。例如,音量减+L相当于在键盘上按下Ctrl+L

以下是一些在终端中常用的快捷键,同样适用于 Termux 中。

  • Ctrl+A -> 光标移动到开始位置
  • Ctrl+E -> 光标移动到最末尾
  • Ctrl+K -> 剪切此处至末尾的所有内容
  • Ctrl+U -> 剪切此处至开始的所有内容
  • Ctrl+W -> 剪切此处到左边的单词
  • Ctrl+Y -> 粘贴由Ctrl + UCtrl + DCtrl + W剪切的单词
  • Ctrl+L -> 相当于clear命令,清屏
  • Ctrl+C -> 终止进程/命令
  • Ctrl+D -> 关闭终端
  • Ctrl+Z -> 挂起(发送 SIGTSTP 到)当前进程

音量加按钮可以作为产生特定输入的特殊键,可以粗略的理解为笔记本电脑上的Fn键。

  • 音量加+E -> Esc
  • 音量加+T -> Tab
  • 音量加+1 -> F1键(音量增加 + 2相当于F2,以此类推)
  • 音量加+0 -> F10
  • 音量加+B -> Alt+B,使用readline时返回一个单词
  • 音量加+F -> Alt+F,使用readline时转发一个单词
  • 音量加+X -> Alt+X
  • 音量加+W -> 向上箭头键
  • 音量加+A -> 向左箭头键
  • 音量加+S -> 向下箭头键
  • 音量加+D -> 向右箭头键
  • 音量加+L -> |(管道字符)
  • 音量加+H -> (波浪号字符)
  • 音量加+U -> _(下划线字符)
  • 音量加+P -> Page Up键(上一页)
  • 音量加+N -> Page Down键(下一页)
  • 音量加+. -> Ctrl+\(SIGQUIT)
  • 音量加+V -> 显示音量控制
  • 音量加+Q -> 显示额外的按键视图
  • 音量加+K -> 同上

扩展功能按键

前面提到 Termux 可以使用音量键来实现快捷键操作,个人感觉使用音量键不是很不方便。Termux 还提供屏幕扩展功能按键。可以使用音量加+Q或者音量加+K可以显示和隐藏。

此外,功能按键向左滑动可以调出文本输入框,可以更方便的粘贴和对待输入的指令进行更精细的修改。

软件包管理

Termux 除了支持apt命令外,还在此基础上封装了pkg命令,pkg命令向下兼容apt命令。官方建议使用pkg命令,因为它会在安装或升级包时会自动更新 apt 列表,也就是说执行pkg upgrade相当于执行了apt update && apt upgrade,简化了操作流程。

命令 作用
pkg search <query> 搜索包
pkg install <package> 安装包,简写pkg i
pkg uninstall <package> 卸载包
pkg reinstall <package> 重新安装包
pkg update | pkg upgrade 升级软件包,简写pkg up
pkg list-all 列出可供安装的所有包
pkg list-installed 列出已经安装的包
pkg shoe <package> 显示某个包的详细信息
pkg files <package> 显示某个包的相关文件夹路径

Termux 与标准 Linux 目录结构的区别

与大多数 Linux 发行版不同,Termux 不遵循文件系统层次结构标准,你无法在标准路径找到/bin/etc/usr/tmp等目录。为了方便,Termux 提供了一个特殊的环境变量:PREFIX,它相当于/usr目录。

$ tree -d -L 1 $PREFIX
/data/data/com.termux/files/usr
├── bin
├── etc
├── include
├── lib
├── libexec
├── share
├── src
├── tmp
└── var

此外用户主目录也在非常规位置。

$ echo $HOME
/data/data/com.termux/files/home

由于没有 root 权限,想对根目录进行操作是不可能的。

$ ls /
ls: cannot open directory '/': Permission denied

对此可以安装proot,并使用termux-chroot命令可以模拟 root 环境与标准的 Linux 目录结构。

$ pkg i -y proot
$ termux-chroot
$ ls /
bin  data  dev  etc  home  lib  proc  root  sbin  share  storage  system  tmp  usr  var  vendor
$ ls /usr
bin  etc  include  lib  libexec  share  src  tmp  var

这对某些必须要用到标准路径的一些程序会非常有用。

root 权限

前面提到的proot毕竟是模拟的方式,会有一定的局限性。如果手机已经 root ,在 Termux 中使用su虽然可以切换为 root 用户,但是会有一些 Termux 的命令无法正常使用,毕竟这不是一个标准的 Linux 环境。解决方案是安装tsu来获取 root 权限,tsu是 Termux 中的su替代方案。

安装tsu

pkg i -y tsu

使用 root 权限执行命令:

tsudo command

切换到 root 用户:

tsu

在 root 用户下,输入exit命令或者按Ctrl+D可以回到普通用户。

访问外部存储

Termux 默认只能访问自身内部的数据,如果要访问手机中其它的数据,输入下面的命令后,手机弹出对请求权限的窗口,允许即可。

termux-setup-storage

这个操作将创建$HOME/storage目录,此目录中的子目录将通过符号链接到手机存储中的一些常用目录。

$ tree storage 
storage
├── dcim -> /storage/emulated/0/DCIM
├── downloads -> /storage/emulated/0/Download
├── movies -> /storage/emulated/0/Movies
├── music -> /storage/emulated/0/Music
├── pictures -> /storage/emulated/0/Pictures
└── shared -> /storage/emulated/0

此外还可以通过/sdcard来访问外部存储的根目录。

SSH 连接

作为 Linux 终端或者服务器,SSH 都是必须的。不管你是 SSH 连接到 Termux ,还是使用 Termux 去连其它主机,都需要先安装openssh

pkg i -y openssh

Termux 使用 SSH 连接其它主机

基本操作,ssh 命令:

ssh User@Host -p Port

SSH 连接到 Termux

手机操作起来毕竟束缚太多,在电脑上通过 SSH 连接再进行操作是一件非常优雅的事情。

  • 设置密码:

    passwd
  • 查看用户名:

    whoami

    由于 Termux 是单用户环境,所以这个步骤不是必须的。使用任何用户名都可以进行登录。

  • 查看 IP 地址:

    ifconfig
  • 启动 SSH 服务端:

    sshd

    SSH 服务端程序默认是不启动的,且每次应用关闭再打开也需要再次启动。后面会讲如何自启 SSH 服务端。

集齐 SSH 三要素,现在可以在电脑终端中输入ssh命令或者使用其它 SSH 客户端进行连接了。需要注意的是 Termux 的 SSH 端口是8022

ssh User@Host -p 8022

执行ssh命令后,输入密码就可以连上了,然后就可以在电脑上方便的进行各种骚操作了。

配置 SSH 密钥登录

如果需要将 Termux 的 SSH 端口暴露在公网,为了安全建议配置密钥登录。

操作和一般的 Linux 发行版没有区别,属于基本操作。如果你不知道如何配置可以去看《使用 ssh-keygen 和 ssh-copy-id 配置 SSH 密钥实现免密登陆》和《使用 Xshell 给 Linux VPS 配置 SSH 密钥实现免密登录》这两篇教程补补课,这里不再赘述。

友情提示:sshd_config文件的路径是$PREFIX/etc/ssh/sshd_config

推荐使用 SSH 密钥一键配置脚本,它可以从 GitHub 或者链接中获取公钥并自动配置。只要你在 GitHub 上设置过公钥,配置后就直接可以使用连接 GitHub 仓库的 SSH 密钥进行登录。

SSH 服务端(sshd)自启

如果不想每次 ssh 连接 Termux 前去输入sshd命令可以设置自启。sshd 自启分两种情况,一种是打开 Termux 应用时自启,还有一种是手机开机后自启。

打开应用时自启 SSH 服务端

sshd命令添加到 Shell 配置文件中即可,比如我使用的是 zsh ,那么就添加到~/.zshrc中。如果是 bash ,那么就添加到~/.bashrc

echo "sshd" >> ~/.zshrc

手机开机后自启 SSH 服务端

首先安装 Termux:Boot 插件,安装后给予该插件开机启动的权限,这样 Termux 就可以在开机后自启了。

创建~/.termux/boot/目录(这个目录中放置的脚本会在开机启动 Termux 后执行)。

mkdir -p ~/.termux/boot/

在该目录中新建一个脚本,命名为start-sshd,把sshd命令添加到这个文件中即可。

echo 'termux-wake-lock; sshd' > ~/.termux/boot/start-sshd

termux-wake-lock命令可防止手机休眠导致 Termux 应用的进程被冻结。

设置完成后,手机开机会自动启动 Termux ,并开启 SSH 服务端。

安装 Linux 发行版

Termux 毕竟不是一个完整的 Linux 环境,如果有更深层次的 Linux 环境要求可以在 Termux 中安装和运行 Linux 发行版来模拟完整的 Linux 环境,甚至还可以安装桌面环境。

AnLinux 是一个帮助用户在 Termux 中安装 Linux 发行版的 App。它是一个指引向导,其本质是按照你选择的发行版给出一行安装指令让你去执行。按照 App 中的指引进行安装非常简单,所以这里就不做赘述了。

尾巴

几分钟能读完的文章绝对不是几分钟就能写出来的,写这篇文章大概花了一周左右的时间。其实整体框架写出来很快,只是完善细节花了不少时间,这期间详细阅读了大量的资料,同时也进行了很多尝试,想尽量把一些基础的东西都写全。这还只是个开始,关于 Termux 的玩法我会放到后面的文章中。

系列文章

Termux 使用教程 #1 - Android 手机安装 Linux

Termux 使用教程 #2 - 打造手机上的最强终端

未完待续...

本文参考资料

Termux Wiki

Mytermuxdoc

Termux 高级终端安装使用配置教程