262cb05f3a9f904c612bb693a641a096
工具篇:终端工具-OpenSSH

1.概述

之前我们用 Cycript 连接了手机,进行项目的联调。这个实际上是因为手机上有一个 cycript 的程序,通过这个程序连接。

OpenSSH(OpenBSD Secure Shell)是 SSH 协议的免费开源实现。SSH 协议簇可以用来进行远程控制,或在计算机之间传送文件。通过 OpenSSH 连接手机,实际上是登录手机。

2.越狱设备安装 OpenSSH

越狱设备可在 Cydia 中搜索 OpenSSH,安装即可。

3.Mac 连接越狱设备

3.1 通过 WIFI 连接(需要越狱设备与 Mac 在同一局域网)

连接指令如下:

ssh root@192.168.0.111

3.1.1 公钥认证

第一次连接时,会有一个认证提示:

The authenticity of host '192.168.0.111 (192.168.0.111)' can't be established.
RSA key fingerprint is SHA256:8atbuPj7DO3mNmy5XglHq7bYQSvyQ1nyjrTACZJIXrs.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

输入【yes】即可。
上面认证信息里的 8atbuPj7DO3mNmy5XglHq7bYQSvyQ1nyjrTACZJIXrs, 实际上是手机公钥的 SHA256 加密结果,我们输入 yes 之后,对应的手机公钥,就会保存到我们的这个文件:【/Users/GofLee/.ssh/known_hosts】。可以通过指令,查看文件中,保存的手机公钥。

~/.ssh > cat known_hosts
192.168.0.111 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDqSZ11Dqp5ZKRsMtbIOLqsMxEt/36n7uB8iq24IEiW921fKNpAFTKZLP/T7TpCdo3A7V/PvStGOPPtaI3TnwYAI2lYMvzOOlRt0WJplfWdbTXGe1O/TyKRz9WBI7NKZuOwts/ePNgp22n6vDIcmG6aIerM5ypWzsXD7jr/NVqs/xvEj7ikFBQLKlFbJyJ8h7EyZgcHkSOo598ulre6Ispks6izxiHW9Gycc2i/5H+tBJT0eyx6SylVTpWlg+j8BePd2SpCJ7/z7YjGQf94DMlOwP/Y9zOXC/E1h+VdGXD97jWuKciwFSW3RccOYlONDjrcPISdgmopu9+fARxa6cUV

这个公钥,在移动设备上,也可以查看:

~ > ssh root@192.168.0.111
root@192.168.0.111's password:
LeeGof-5C:~ root# cd /etc/ssh
LeeGof-5C:/etc/ssh root# ls -l
total 272
-rw-r--r-- 1 root wheel 242153 Jan  9  2016 moduli
-rw-r--r-- 1 root wheel   1526 Jan  4  2008 ssh_config
-rw------- 1 root wheel    668 Apr 13 07:31 ssh_host_dsa_key
-rw-r--r-- 1 root wheel    590 Apr 13 07:31 ssh_host_dsa_key.pub
-rw------- 1 root wheel    965 Apr 13 07:31 ssh_host_key
-rw-r--r-- 1 root wheel    630 Apr 13 07:31 ssh_host_key.pub
-rw------- 1 root wheel   1675 Apr 13 07:31 ssh_host_rsa_key
-rw-r--r-- 1 root wheel    382 Apr 13 07:31 ssh_host_rsa_key.pub
-rw-r--r-- 1 root wheel   3227 Feb  9  2008 sshd_config
LeeGof-5C:/etc/ssh root# cat ssh_host_rsa_key.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDqSZ11Dqp5ZKRsMtbIOLqsMxEt/36n7uB8iq24IEiW921fKNpAFTKZLP/T7TpCdo3A7V/PvStGOPPtaI3TnwYAI2lYMvzOOlRt0WJplfWdbTXGe1O/TyKRz9WBI7NKZuOwts/ePNgp22n6vDIcmG6aIerM5ypWzsXD7jr/NVqs/xvEj7ikFBQLKlFbJyJ8h7EyZgcHkSOo598ulre6Ispks6izxiHW9Gycc2i/5H+tBJT0eyx6SylVTpWlg+j8BePd2SpCJ7/z7YjGQf94DMlOwP/Y9zOXC/E1h+VdGXD97jWuKciwFSW3RccOYlONDjrcPISdgmopu9+fARxa6cUV

第一次确认之后,就将设备的公钥保存到电脑上面,所以后续连接就不需要了。

3.1.2 公钥登录

上面的连接,每次都需要输入密码,不是很方便。这里我们先简单介绍一下 OpenSSH 使用密码的通信过程。
使用 SSH 连接移动设备的过程,电脑是客户端,移动设备是服务器。整个过程大概有这样几步:

  • 电脑连接手机,手机首先将自己的公钥发给电脑;
  • 电脑使用公钥,将登录密码加密,发给手机;
  • 手机使用私钥解密登录密码,如果密码正确就同意登录。

SSH 也可以直接通过公钥进行认证,免去输入密码的校验。下面我们来分析一下公钥登录的原理和实现。

公钥登录原理

  • 电脑将公钥发给移动设备;
  • 移动设备随机的生成一段字符串,发给电脑;
  • 电脑利用私钥加密字符串;
  • 移动设备利用公钥解密字符串。
    和 HTTPS 的握手过程有点类似,认证完成后,就可以进行通信了。

公钥登录实现

  • 第一步:生成公钥/私钥对。
ssh-keygen
  • 第二步:将生成的公钥拷贝到移动设备。
ssh-copy-id root@192.168.0.111

指令输出结果:
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/Users/GofLee/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.0.111's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'root@192.168.0.111'"
and check to make sure that only the key(s) you wanted were added.

  • 第三步:使用公钥登录移动设备。
    ```
top Created with Sketch.