主要介绍自己最近制作面具模块时, 为了方便调试, 所研究的电脑端免密远程登陆手机termux以及sftp, 涉及zsh oh-my-zsh termux-services openssh tsu等安装使用.

最终实现的效果如图所示.

所涉及的软件

  • f-droid 用于下载安装termux

  • winscp SFTP FTP管理

  • PuTTY 用到了PuTTY Key Generator工具, 转换秘钥文件格式

1.安装termux-services, 用于服务管理, 类似与linux systemctl. 安装openssh, 用于远程登陆

pkg up #更新软件
pkg install termux-services
pkg install openssh

之后需要重启一下termux

2.启用sshd服务

sv status sshd # 查询sshd状态, 发现没有启用
#~ down: sshd: 9s; run: log: (pid 15686) 9s
sv-enable sshd # 启用
#~ run: sshd: (pid 15767) 4s; run: log: (pid 15686) 65s

3.安装zsh oh-my-zsh以及常用的插件zsh-autosuggestions zsh-syntax-highlighting zsh-history-substring-search, 嘎嘎好用

sh -c "$(curl -fsSL https://raw.githubusercontent.com/linuxscreen/termux/main/zsh-install.sh)"

现在可以命令提醒和高亮了, 这里介绍下zsh-history-substring-search, 用于搜索之前执行过的命令, 例如忘记了启用sshd服务的完整命令, 就可以先输入sshd, 然后按方向键上, 得到上次执行的命令sv-enable sshd

4.都安装了termux, 想必应该都安装了面具或者KernelSU, 获取了root权限, 但是如果直接用su切换root, 就没法使用oh-my-zsh了, 这里推荐安装tsu

pkg install tsu
tsu
# root用户zsh配置, 这里直接软链接termux普通用户的配置即可
ln -s ~/../.oh-my-zsh ~/.oh-my-zsh
ln -s ~/../.zshrc ~/.zshrc
# 退出然后重新切换就生效了
exit
tsu

5.powershell上远程登陆termux

# 退出tsu
# 首先分别在termux和powershell中执行ssh-keygen, 一路回车
ssh-keygen
# termux上公钥文件写入authorized_keys
cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys
# 复制termux私钥文件到电脑, 这里重命名为termux_private_key
/data/data/com.termux/files/home/.ssh/id_ed25519 >> C:\Users\<username>\.ssh\termux_private_key
# 电脑端进入目录C:\Users\<username>\.ssh, 新建文件config, 内容如下:
---------------------------------------------------------
Host umi # 自定义
HostName 192.168.123.168 #手机的ip地址,termux上ifconfig获取
Port 8022 # termux ssh默认端口为8022
User root # 随便填,建议直接root
ServerAliveInterval 60
ServerAliveCountMax 3
PreferredAuthentications publickey
IdentityFile ~/.ssh/termux_private_key # 私钥文件名
--------------------------------------------------------

现在打开powershell或者windows terminal, 输入命令ssh termux即可连接到手机termux, 输入tsu即可切换root用户

6.配置winscp可以root登陆termux sftp, 方便文件管理

# 手机termux端执行以下命令, 注意使用普通用户
cd /data/data/com.termux/files/usr/etc/ssh/ 
cp ~/../usr/etc/ssh/sshd_config ~/../usr/etc/ssh/sshd_config.back # 备份原配置文件
echo "PrintMotd yes\nPasswordAuthentication yes\nPermitRootLogin yes\nPubkeyAuthentication yes\nAuthorizedKeysFile /data/data/com.termux/files/home/.ssh/authorized_keys\nStrictModes no\nSubsystem sftp /data/data/com.termux/files/usr/libexec/sftp-server" > ~/../usr/etc/ssh/sshd_config # 写入新配置文件
# 切换root, 执行以下命令
tsu
chown root:root /data/data/com.termux/files/usr/var/empty # 解决报错
sshd -p 2222 # 设置root用户sshd后台运行, 端口2222

电脑端安装putty和winscp, 执行以下操作

  • 打开PuTTY Key Generator: Conversions->import key->选择私钥文件(termux_private_key)->save private key->忽略警告->导出文件

  • winscp新建节点, 输入手机ip, 端口2222, 用户名root 高级->SSH->验证->秘钥文件->选中刚才生成的文件(ppk格式)->确认->保存

登陆即可, 至此实现开头的效果

效果图左边使用的远程控制软件为 QtScrcpy