安卓开启ssh服务
Android SSH服务
我在Android手机上安装运行SSH服务的原因是我想把Android手机作为一个超级移动Linux主机来使用,能够透明地检查Android上的服务和程序,方便传输数据。
Android上的sshd服务分为两类:
-
需要root之后才能安装使用,如 DropBear Server II // ssh/scp (root only)
-
不需要root就可以安装使用,如 SimpleSSHD Termux (推荐)
不需要root就能够使用的sshd服务,只能使用1024端口以上的监听端口,例如 SimpleSSHD 默认使用 2222 端口;此外,非root的sshd服务,登陆以后限制在个人目录沙箱下,权限不能看到整个系统的进程,只能作为简单的个人应用文件传输或转跳其他sshd服务。
SimpleSSHD
安装后
默认端口是 2222
左上角 的三个点 Enable /sdcard
点下部的 START
这时用下面这个命令来连接
ssh -p 2222 192.168.1.150
当你在电脑上输入这个命令并回车后,手机上的SimpleSSHD主界面会出现一个密码,这个密码就是电脑命令行里要输入的密码。输入后回车就已经通过ssh连入了手机了,这时就可以像用ssh操作一台远程的电脑一样来操作了。
手机上的SimpleSSHD主界面 右上用的三个点点一下后选 Settings 再把 Buffer hack for rsync+SuperSU 右面的勾打上,就启用了 rsync 服务。
这时可以通这类似下面这个命令将电脑上的文件(夹)同步到手机上
rsync -Pavh --delete -e 'ssh -p 2222' /mnt/mobile/sync/ 192.168.1.150:/sdcard/sync/
这个命令需要讲解一下:
rsync 是命令名
-Pavh 这四个参数是保留权限 归档 显示过程信息 以人类方便理解的计数单位显示(比如 1MB 2GB 3TB 这样的显示)
--delete 这个参数会删除掉目标路径中有,而源路径中没有的文件。这样就能始终保持目标路径中的内容与源路径中的内容一致。
-e 'ssh -p 2222' 指定了对端所采用的端口。因为SimpleSSHD默认端口是2222,所以这里就设定对端采用2222端口。
/mnt/mobile/sync/ 源路径。就是你想把这个文件夹的内容同步给别人。
192.168.1.150:/sdcard/sync/ 目标路径。就是你想让这个文件夹的内容与源路径中的内容相同。 这里面192.168.1.150是ip地址,后面的半角冒号:不能少,然后/sdcard/sync/是在手机里面的路径地址。
当然也是可以反向把手机里的某个文件夹同步到电脑里的。这里还是以手机ip地址是192.168.1.150,它里面要同步出来的路径是/sdcard/sync/,电脑里的路径是/mnt/mobile/sync/,为例:
rsync -Pavh --delete -e 'ssh -p 2222' 192.168.1.150:/sdcard/sync/ /mnt/mobile/sync/
看见了吗超级简单,只需要把 源 和 目标 互换一下就行了。
首次启动SimpleSSHD,默认启动在端口 2222
上,这个SSH服务建议使用密钥登陆,但是,如果首次运行,还没有复制公钥到服务器端时,提供了一个简单的一次性密码登陆方式。当你使用 ssh -p 2222 server_ip
访问SimpleSSHD服务,由于程序第一次启动是开启了一个终端在前台运行,你会看到控制台在检测了没有密钥存在,就会提示登陆密码,,可以配置密钥直接登陆,参考 https://cloud-atlas.readthedocs.io/zh-cn/latest/android/hack/android_sshd.html
Termux
手机安装Termux软件(命令行终端,F-Droid 或 谷歌商店下载)
# 1. 安装openssh pkg install openssh # 2. 获取本机用户名 第一项uid=.... 括号里的就是用户名,比如:uid=10201(u0_a201) 则用户名为 u0_a201 id # 3. 修改密码 passwd # 4. 开启ssh服务,默认端口8022 sshd # 5. 获取本机ip(以下两个命令均可),找到本机ip ifconfig ip a # 关闭ssh服务 pkill sshd # 允许 Termux 访问内部存储,这将在home目录下创建storage的符号链接 termux-setup-storage
电脑XShell登录:
ssh u0_a201@192.168.1.100:8022
# ssh 用户名@ip:端口。连接成功后输入密码(就是passwd命令设置密码)
ssh -p 2222 server_ip 上面命令没有成功
添加Public key
Termux的sshd只能通过密钥登陆,因此你需要在linux客户机上生成密钥对
ssh-keygen
把linux客户机上的公钥加到Termux中的 .ssh/authorized_keys,这一步比较麻烦
因为你无法使用 ssh-copy-id,只能先把 id_rsa.pub 拷贝到手机上,再在手机上打开该文件,拷贝文件内容后在Termux中用 vi 打开 authorized_keys,并复制内容进去.
不过如果linux客户机上本身也开启了ssh服务的话,则会简单很多,可以在Termux上执行
ssh user@linux_clinet "cat ~/.ssh/id_rsa.pub" >> ~/.ssh/authorized_keys
就行了,其中linux_clinet为linux客户机的地址,user为登陆用户
在客户端上执行
ssh 192.4.4.9 -p 8022
将这里的 192.4.4.9 修改为手机的ip,就能登陆到Termux中了。
手机ip可以通过在 Termux 中运行 ifconfig -a 来查看。
需要说明的是,使用ssh登陆Termux时无需带上用户名,因为Termux是单用户系统。即使你登陆时带上了用户名,Termux也会忽略该用户名
为了方便,我们可以配置一下ssh client的配置文件,将下面内容加入到 ~/.ssh/config 文件中
Host termux HostName 192.4.4.9 Port 8022
这样只需要执行 ssh termux 就能登陆termx了。