iOS系统常用账户
iOS系统有2个常用账户:root
、mobile
,默认密码都是 alpine
。
root:最高权限账户,可以操作所有文件,$HOME
是 /var/root
。
mobile:普通权限账户,只能操作一些普通文件,不能操作系统级别的文件,$HOME
是/var/mobile
。
OpenSSH简单教程
前提:在 Cydia 里安装好 OpenSSH
插件,并让 iPhone 和 Mac 处在同一路由器下。
使用 Mac 的终端登录 iPhone:
ssh 账户@iPhone当前连接的WiFi的IP地址
例如,我的 IP 是192.168.51.86,我登录 root 账户:
ssh root@192.168.51.86
输入默认密码:
alpine
退出登录命令:
exit
iOS终端的中文乱码
新建 ~/.inputrc
文件,文件内容问:
set convert-meta off
set output-meta on
set meta-flag on
set input-meta on
然后将电脑里的 /usr/share/locale/en_US.UTF-8
拷贝到手机的相同路径下。
在 ~/.profile
文件中添加 export LC_ALL='en_US.UTF-8'
。
重新使用 SSH 登录 iPhone。
修改账户默认密码
登录 root 账户,然后输入 passwd
命令,再输入2次密码,则可修改 root 账户的默认密码。
输入 passwd mobile
命令,再输入2次密码,则修改 mobile 账户的默认密码。
SSL、OpenSSL
SSL:Secure Sockets Layer 的缩写,是为网络通信提供安全及数据完整性的一种安全协议,在传输层对网络连接进行加密。
OpenSSL:SSL的开源实现,绝大部分 HTTPS 请求等价于:HTTPS + OpenSSL,OpenSSH 的加密就是通过 OpenSSL 完成的。
SSH的通信过程
先了解一下客户端和服务器端的一些密钥和配置文件的位置:
客户端(Mac) | 路径 | 描述 |
---|---|---|
~/.ssh/known_hosts | 保存服务器端公钥信息 | |
~/.ssh/id_rsa.pub | 公钥 | |
~/.ssh/id_rsa | 私钥 | |
/etc/ssh/ssh_config | 作为客户端时的ssh配置文件 |
服务器端(iPhone)
路径 | 描述 |
---|---|
/etc/ssh/ssh_host_rsa_key.pub | 公钥 |
/etc/ssh/ssh_host_rsa_key | 私钥 |
/etc/ssh/sshd_config | 作为服务端时的ssh配置文件 |
~/.ssh/authorized_keys | 密钥认证的授权文件 |
建立安全连接
客户端(Mac) 与 服务器端(iPhone) 在建立安全连接过程中,服务器端会提供自己的身份证明,也就是会将服务器端公钥(/etc/ssh/ssh_host_rsa_key.pub
)等信息发送给客户端(~/.ssh/known_hosts
)。
第一次建立连接,也就是客户端并无服务器端的公钥信息,就会询问是否连接此服务器,同意连接则会将服务器端的公钥等信息写入客户端,下次建立连接就不会再次询问。
如果服务器端的公钥信息发生改变,则应该删除客户端保存的公钥信息(在 ~/.ssh/known_hosts
中找到服务器ip,删除对应行即可。也可以用命令:ssh-keygen -R 服务器主机地址
),重新建立连接。
客户端认证
基于密码的客户端认证:使用账号和密码即可认证,每次连接都需要输入密码,并且此认证方式并不安全。
基于密钥的客户端认证:免密码认证,最安全的一种认证方式。SSH-2默认会优先尝试密钥认证,如果认证失败,才会尝试密码认证。
配置密钥认证
在客户端使用命令,创建公钥(~/.ssh/id_rsa.pub
)和私钥(~/.ssh/id_rsa
),如果已经存在,则会提示是否覆盖。
ssh-keygen
在客户端使用命令,将客户端的公钥内容追加到服务器端的授权文件(~/.ssh/authorized_keys
)尾部,过程中会让输入一次账户密码。
ssh-copy-id 账户@服务器主机地址
我们再次登录服务器端,回车后直接成功登录,无须输入账户密码。注意追加授权文件时使用的账户和再次登录服务器端使用的账户需要是同一个,如果需要使用多个账户则分别添加。
除了使用 ssh-copy-id
命令,还可以直接远程拷贝文件的方式来实现,使用 scp
命令,将客户端的公钥拷贝拷贝到服务器某路径。scp 是 secure copy 的缩写,是基于 SSH 登录进行安全的远程文件拷贝命令,把一个文件copy到远程另外一台主机上。
从电脑拷贝文件到手机上:
scp ~/.ssh/id_rsa.pub 账户@服务器主机地址:~/.ssh
从手机拷贝文件到电脑上:
scp 账户@服务器主机地址:~/.ssh ~/.ssh/id_rsa.pub
其实也就是前面的路径拷贝到后面的路径。
将 id_rsa.pub
的内容追加到 authorized_keys
文件中:
cat id_rsa.pub >> authorized_keys
简单点说,就是将 Mac 上的 ~/.ssh/id_rsa.pub
文件拷贝到手机的 ~/ssh
目录下,然后在手机上进入 ~/.ssh
目录执行 cat id_rsa.pub >> authorized_keys
命令即可。这样就可以免密登录了,记得先修改掉 mobile
和 root
账号的默认密码。
安全传输
至此,就可以开始进行安全传输了。
通过USB进行SSH登录
默认情况下,由于 SSH 走的是 TCP 协议,Mac是通过网络连接的方式 SSH 登录到 iPhone ,要求 iPhone 和 Mac 处于同一路由器下。
为了加快传输速度,也可以通过 USB 连接的方式进行 SSH 登录,Mac 上又个服务程序 usbmuxd
(它会开机自启动),可以将 Mac 的数据通过 USB 传输到 iPhone。
所在路径:/System/Library/PrivateFrameworks/MobileDevice.framework/Resources/usbmuxd
下载 usbmuxd 工具包 v1.0.8 版本,获得 tcprelay.py
和 usbmux.py
脚本文件。下载地址:https://cgit.sukimashita.com/usbmuxd.git/
将远程22端口和本地2222端口做一个端口映射,多个映射以空格隔开:
python ~/DevEnv/usbmuxd/tcprelay.py -t 22:2222
将 iPhone 通过 USB 与 Mac 连接,然后新开一个窗口,登录本地的2222端口:
ssh root@127.0.0.1 -p 2222
从电脑拷贝文件到手机上:
scp -P 2222 ~/.ssh/id_rsa.pub root@localhost:~/.ssh
从手机拷贝文件到电脑上:
scp -P 2222 root@localhost:~/.ssh ~/.ssh/id_rsa.pub
注意
如果一台电脑会通过 USB 连接多台越狱设备,需要先手动备份 ~/.ssh/known_hosts
文件中其他相同ip和端口的内容。然后连接一次新设备后,再把其他备份的数据粘贴回去即可。