SSH 远程登录
Secure Shell(安全外壳协议,简称SSH)是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境。SSH 通过在网络中创建安全隧道来实现 SSH 客户端与服务器之间的连接。虽然任何网络服务都可以通过 SSH 实现安全传输,SSH 最常见的用途是远程登录系统。
SSH 以非对称加密实现身份验证。身份验证有多种途径,例如其中一种方法是使用自动生成的公钥-私钥对来简单地加密网络连接,随后使用密码认证进行登录;另一种方法是人工生成一对公钥和私钥,通过生成的密钥进行认证,这样就可以在不输入密码的情况下登录。任何人都可以自行生成密钥。公钥需要放在待访问的计算机之中,而对应的私钥需要由用户自行保管。认证过程基于生成出来的私钥,但整个认证过程中私钥本身不会传输到网络中。
越狱开发中我们常常会连接越狱手机进行操作,这里有2种方式连接越狱手机:Wifi 和 USB。
首先越狱手机需要在 Cydia 安装 OpenSSH。
安装完后我们再来看2中方式如何进行 SSH 登录
一、Wifi 登录
1、保证 Mac 和 iPhone 在同一网段内
2、查看手机的 IP 地址
IP 地址.png3、连接手机
打开命令行输入 ssh root@手机IP地址
命令连接手机,命令的意思是以 root 的用户身份登录手机。
- root 用户:系统中最高权限的用户,具有对系统完全操控全
- mobile 用户:只能操作普通文件,不能操作系统文件
第一次连接会出现下图中的提示,我们输入 yes 继续,然后会要求我们输入登录密码,默认密码 alpine。
连接成功后接收到的公钥保存在 ~/.ssh/known_hosts
文件中,IP 和公钥对应的保存在文件中,如果登录出现错误说明保存的公钥和登录设备中的公钥不匹配,这是需要将 known_hosts 中的对应IP的公钥删除即可。
为防止别人通过默认密码访问我们的手机,登录成功后我们一般会通过 passwd
命令进行修改密码,输入命令后连续输入2次新密码即可。
4.公钥登录(免密登录)
每次登录都要输入密码,有一种方式可以避免输入密码,那就是公钥登录。公钥登陆需要一对非对称加密的秘钥,私钥放在 MAC 上,公钥放在 iPhone 上,登录时 Mac 会向 iPhone 随机发送一个字符串,登陆用户用公钥对字符串进行加密并将结果发送给 Mac,Mac 使用私钥对其进行解密,如果解密成功证明用户可信,确认可信后就建立了连接。
- 进入到 ~/.ssh 文件夹下
- 通过
ssh-keygen
命令生成一对公钥和私钥,一直回车即可,结束后 ~/.ssh 文件夹下回生成 id_rsa 和 id_rsa.pub 两个文件,前者是私钥,后者是公钥
生成公钥和私钥.png - 将公钥上传到远程设备中,打开命令行工具输入
ssh-copy-id root@手机IP
命令,这一步是将本地公钥上传到远程设备 ~/.ssh/authorized_keys 文件中。
image.png
至此我们已经将公钥和私钥配置好,再次连接手机就不会要求输入密码了,如果登录时仍需要输入密码,可以使用如下命令打印debug信息来排查原因
ssh -vvv root@172.16.121.12
注:确保设备中 ~/.ssh
和 ~/.ssh/authorized_keys
文件的组权限和其他用户权限没有写权限,应为系统认为这是不安全的,会导致授权失败,可以使用如下命令进行纠正
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
二、USB 登录
使用 Wifi 方式连接,需要依赖网络环境,而且传输文件时速度比较慢,而 USB 方式登录则避免了这2个问题。
1.映射端口
SSH 服务器是默认运行在 22 号端口上的,我们需要制定一个本地端口映射到设备的TCP端口 22。
我们使用 libimobiledevice 工具进行映射,使用 brew install libimobiledevice
命令进行安装,安装完成后再使用 iproxy 2222 22
将本地 2222 端口号映射到网络端口 22,出现 waiting for connection 代表映射成功,另开窗口进行连接,连接命令如下:
ssh -p 2222 root@localhost
或
ssh -p 2222 root@127.0.0.1
USB 连接.png
三、配置 SSH
正常的连接命令包括端口号、用户名和 IP 地址,我们感觉比较麻烦,这时我们可以配置 SSH,我们使用一个别名就能进行连接。
- 找到 SSH 配置文件,
~/.ssh/config
文件,如果没有则创建 - 配置格式,需要在配置文件中写入如下格式:
Host -------------- 自定义设备名
Hostname -------- 通过USB端口映射,本地IP或localhost
User ------------- 登录用户
Port ------------- 指定端口号为映射端口号
下面分别 Wifi 和 USB 方式的连接配置:
// Wifi 方式配置
Host wifi
Hostname 192.168.1.111
User root
Port 22
// USB 方式配置
Host usb
Hostname localhost
User root
Port 2222
使用方式如下:
// Wifi 使用方式
ssh wifi
// USB 使用方式
iproxy 2222 22
ssh usb
配置好后联合免密登录使用非常方便。