SSH、OpenSSH
SSH
- 是Secure的缩写,意为“安全外壳协议”,是一种可以为远程登录提供安全保障的协议
- 使用SSH,可以把所有传输的数据进行加密,“中间人”攻击方式就不可能实现,能防止DNS欺骗和IP欺骗
OpenSSH
- 是SSH协议的免费开源实现
- 我们可以通过OpenSSH让Mac远程登录到iPhone
如何使用OpenSSH远程登录到iPhone?
安装OpenSSH
- 首先,需要在iPhone上通过Cydia安装OpenSSH工具,通过添加软件源http://apt.saurik.com进行安装。
- 安装完成之后,可以通过查看OpenSSH下的【DESCRIPTION】来查看使用步骤。
使用OpenSSH远程登录iPhone
SSH是通过TCP协议通信,所以要确保Mac和iPhone在同一局域网下
-
具体连接步骤:
- 在Mac终端输入<font color=red>ssh 账户名@服务器主机地址</font>
ssh root@192.168.199.105
- 如果是第一次登录,会弹出权限验证,输入yes即可
- 然后会让你输入密码,OpenSSH的默认密码是:<font color=red>alpine</font>
- 输入完密码就登录到了iPhone上。
- 如果要退出登录,输入<font color=red>exit</font>即可
-
在iPhone上有两种用户,root和mobile
- root是最高权限账户,$HOME是/var/root
- mobile是普通权限账户,只能操作一些普通文件,不能操作系统级别的文件,$HOME是/var/mobile,mobile用户登录方式同root账户
- 登录root和mobile账户之后,可以通过以下命令来修改root账户和mobile账户的登录密码。
passwd passwd mobile
SSL、OpenSSL
SSL
- Secure Sockets Layer的缩写,是为网络通信提供安全及数据完整性的一种安全协议,在传输层对网络连接进行加密
OpenSSL
- 是SSL的开源实现
- 现在大部分的Https请求其实就是等价于:Http+OpenSSL
- 我们之前使用的OpenSSH加密其实就是通过OpenSSL来来实现的。
SSH的通讯过程
SSH的通信过程主要分为3个阶段
建立安全连接
- 在建立安全连接的过程中,服务器会提供自己的身份证明.
- 如果客户端并无服务器端的公钥信息,就会询问是否连接此服务器.
- 如果确认连接,则客户端会将服务器的公钥信息存放到<font color=red>~/.ssh/known_hosts</font>中
- 如果服务器的ip地址发生改变,可以通过删除<font color=red>~/.ssh/known_hosts</font>中已经存在的公钥信息,然后重新访问即可。
- 除了手动删除公钥信息的方式,还可以使用如下命令来删除
ssh-keygen -R 服务器ip地址
客户端认证
ssh2提供两种账号认证方式
基于密码的客户端验证
基于秘钥的客户端验证(免密码登录)
- 通过以下命令在客户端生成一对相关联的密钥(Key Pair):一个公钥(Public Key),一个私钥(Private Key),
ssh-keygen
此时~/.ssh文件夹下会多出两个文件id_rsa、id_rsa.pub
- 把客户端的公钥内容追加到服务器的授权文件(~/.ssh/authorized_keys)尾部
ssh-copy-id root@服务器主机地址
-
也可以手动将公钥追加到服务器的授权文件中
- 复制客户端的公钥到服务器某路径
scp ~/.ssh/id_rsa.pub root@服务器主机地址:~
- SSH登录服务器
ssh root@服务器主机地址
- 在服务器创建.ssh文件夹
mkdir .ssh
- 追加公钥内容到授权文件尾部
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
- 删除公钥
rm ~/id_rsa.pub
如果设置了免密码登录之后,还是需要输入密码。那么就需要在服务器端设置文件权限,使用如下命令:
chmod 755 ~
chmod 755 ~/.ssh
chmod 644 ~/.ssh/authorized_keys
数据传输
通过USB进行SSH登录
22端口
- 端口就是设备对外提供服务的窗口,每个端口都有个端口号(范围是0~65535,共2^16个)
- 有些端口号是保留的,已经规定了用途
- iPhone默认是使用22端口进行SSH通信,采用的是TCP协议
通过USB进行SSH登录
- 默认情况下,由于SSH走的是TCP协议,Mac是使用SSH通过网络连接的方式登录到iPhone,要求iPhone连接WiFi
- 为了加快传输速度,也可以通过USB连接的方式进行SSH登录。
- Mac上有个服务程序usbmuxd(它会开机自动启动),可以将Mac的数据通过USB传输到iPhone,程序在如下地址:
/System/Library/PrivateFrameworks/MobileDevice.framework/Resources/usbmuxd
使用usbmuxd工具来进行端口映射
- 通过以下地址下载usbmuxd工具包(下载v1.0.8版本,主要用到里面的两个python脚本:tcprelay.py和usbmux.py)
点击下载
这两个python脚本在python3下运行会失败,需要在python2版本运行
- 通过以下命令,将iPhone的22端口(SSH端口)映射到Mac本地的10088端口
这里的10088端口可以自己随意定义,只要不使用保留的端口号就行。
cd ~/Documents/usbmuxd-1.0.8/python-client
python tcprelay.py -t 22:10088
这里加上-t是为了同时支持多个ssh连接。<font color=red>注意:要想保持端口映射状态,不能终止此命令行(如果要执行其他终端命令行,请新开一个终端界面)</font>
- 端口映射完毕后,以后如果想跟iPhone的22端口通信,直接跟Mac本地的10088端口通信就可以了
- 新开一个终端界面,使用如下命令SSH登录到Mac本地的10088
ssh root@localhost -p 10088
usbmuxd会将Mac本地10088端口的TCP协议数据,通过USB连接转发到iPhone的22端口
- 远程拷贝文件也可以直接跟Mac本地的10010端口通信
#将Mac上的~/Desktop/1.txt文件,拷贝到iPhone上的~/test路径
scp -P 10088 ~/Desktop/1.txt root@localhost:~/test
使用itnl工具来进行端口映射
- 首先下载itnl工具
- cd到itnl工具所在目录
- 执行命令
./itnl --lport 22 --lport 10088
如果出现permission deny,则使用chmod 755 itnl为itnl增加执行权限
- 不要关闭当前窗口,新开一个终端窗口,使用如下命令登录到mac的10088端口
ssh root@localhost -p 10088
iOS终端的中文乱码问题
默认情况下,终端不支持显示中文,解决方案:新建一个~/.inputrc文件,文件内容是:
#不将中文字符转化为转义序列
set convert-meta off
#允许向终端输出中文
set output-meta on
#允许向终端输入中文
set meta-flag on
set input-meta on
如果是想在终端编辑文件内容,可以通过Cydia安装一个Vi IMproved(软件源http://apt.saurik.com)