当前位置: 首页 > 工具软件 > TinySSH > 使用案例 >

Android 系统中如何运行 sshd?

曾翰飞
2023-12-01

本文和大家分享的主要是android系统中运行sshd相关知识,希望对大家学习android有所帮助,一起来看看吧。

  新的 Z5C 到手。拿 root 装软件。然后发现一个很重要的事情:我之前在 Z3C + Android 4.4.4 上用得好好的 Rooted SSH/SFTP Daemon ,在登录的时候报了这么个错:

  CANNOT LINK EXECUTABLE: "/system/lib/libc++.so" is 32-bit instead of 64-bit

  page record for 0xXXXXXXXXXX was not found (block_size=32)

  网上搜了一下, 解决方法 是有的,要重新编译 dropbear。可我之前研究过,我这软件使用的 dropbear 是一个 修改版 ,和我用的这个 app 一样,好久没更新了……

  于是想找个新的 sshd。之前我是使用的 SSHDroid 。后来它需要付费版才能使用密钥认证了……而我的要求就两点:可以以 root 份登录,并且支持密钥认证。在 Play 商店里能找到的 sshd 我都试过了一遍,竟然没一个能满足这么基本的需求的…………

  之所以需要以 root 身份登录,而不是登录之后再获取 root,是因为跑命令时 su 之后很容易出现奇怪的问题,和缓冲、终端控制有关。

  于是我只好失望地放弃使用 app,转到自己熟悉的领域——Linux 系统,编译一个 sshd adb 进去跑好了。

  一开始使用的是 socat + tinyssh 的方案。这个方案我之前在光猫上实现过,tinyssh 的代码很少,很容易编译和修改。socat 直接用 之前编译的版本 就可以了。因为 Android 毕竟不是完整的 Linux userland,所以得把 tinyssh 改一改,主要是用户主目录和默认 shell 的部分。我就直接硬编码进 root 的配置了。然后写个 shell 脚本来启动:

  #!/system/bin/sh

  export ANDROID_ROOT=/system ANDROID_DATA=/data

  PATH=/system/xbin:/su/xbin:/su/bin:/sbin:/vendor/bin:/system/sbin:/system/bin

  socat tcp-l:PORT,reuseaddr,fork exec:'tinysshd /data/tinyssh/keydir' &

  这样就可以了。只支持 Ed25519 密钥登录,挺好的。

  然而,用着用着就发现有点小问题:socat 对经由网络的数据进行转发,有点低效;tinyssh 不支持连接复用,在一个会话中收到新的连接请求时会直接退出;还没有 scp 命令……

  一开始我去 dropbear 那边编译了一个 scp。编辑好配置文件、开始 make 的时候,敲「make PROGRAMS=scp」就可以编译出一个 scp 命令了。然后我就想,既然都用上 dropbear 了,要不就都用了吧。于是把 dropbear 也编译出来了。不是很顺利,主要是以下几个事:

  . 改路径。各种路径,host key 的,pid 文件的,默认 PATH,还要禁用掉 lastlog 和 syslog 什么的

  . 改用户信息。默认 shell、主目录。不要检查 /etc/shells。刚刚发现我还不小心把其中两行代码交换了,是说怎么退出的时候会段错误呢 _(:з∠)_

  . dropbear 的构建系统不支持 out-of-tree 构建,也就是不能像我习惯的那样,「mkdir build-android」然后进去「../configure」 :-(

  另外就是,dropbear 不支持 Ed25519 key,于是我只好用 RSA key 了(DSS 有问题;openssh 的 ECDSA 实现也有问题) :-(

  弄好之后同样写个 shell 脚本方便调用:

  #!/system/bin/shexport ANDROID_ROOT=/system ANDROID_DATA=/data

  /system/xbin/dropbear -R -p PORT

  然后,启动服务的事情。我发现改 /init.rc 不管用。这个是 initramfs,每次重启之后就恢复原状了……我懒得去重新打 initamfs 的包了,就每次重启系统之后接上 USB 线,然后 adb shell进去跑脚本……还好 Z5C 跟 Z3C 不一样,USB 口在外边,很好插。

  终于把 remote root shell 弄好了,接下来就是各种 rsync 和 scp 传文件改配置什么的了,一是复制各种软件的配置文件和数据,二是备份,三是把文件拿电脑上研究、编辑,方便啊!Sony 有个「换机助手」软件,但是它不能在加密了的手机上使用……

  最后,还留下了一个问题:同样的环境,同样是 Wi-Fi 传输,我的电脑和 Z3C 之间传输速度能达到 4MiB/s,但是 Z5C 却只有 300KiB/s 左右的样子……

 

来源:依云's Blog


 类似资料: