OpenWrt + SSH 刷机方法

如果要刷 U-Boot,则必须事先刷入解锁 u-boot 分区的 OpenWrt 固件。

准备工具:
PuTTY: http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
WinSCP: http://winscp.net/eng/download.php

PuTTY 可以作为 SSH 客户端,登录路由器的 Shell 环境,以执行各种命令。
WinSCP 是一个图形化的 SCP 协议 (基于 SSH 的文件传输协议) 客户端,用于本地和路由的文件传输。

设置 OpenWrt 管理密码 (root 密码):
只有设置了 root 密码,才能使用 SSH 协议工具。
如果已经设置了密码,请跳过这一步。

1. 在 LuCI 里设置管理员密码:
[系统] → [管理权]
forum.php?mod=p_w_upload&aid=MTAwODYwfGM 

2. 使用 telnet 登录路由设置密码
telnet 协议是一种类似于 SSH 的协议,只是它不经过加密,因此在外网环境中不×××全。
OpenWrt 只有在未设置 root 密码时,才能使用 telnet 协议。

PC [开始]→[所有程序]→[附件]→[命令提示符]

Win + R 组合键→输入 cmd→回车

输入 telnet <路由IP地址>

forum.php?mod=p_w_upload&aid=MTAwODYxfDN 

输入 passwd,回车
输入两次密码,分别以回车结束。
注意:输入密码时,密码不会显示,直接输入即可。

forum.php?mod=p_w_upload&aid=MTAwODYyfDY 

使用 WinSCP 传输要刷入的文件 (以 U-Boot 为例):

打开 WinSCP
File Protocol 选择 SCP
Host name 填入路由器 IP 地址
User name 填入 root
Password 填入 root 的密码

单击 [Login]

forum.php?mod=p_w_upload&aid=MTAwODYzfGI 

如果是第一次使用 WinSCP 登录路由,那么 WinSCP 会弹出如下对话框:
其大意是第一次连接此主机,其 RSA 指纹 Key 未被登记,是否要信任此主机
这里单击 Yes,以确认信任此路由。

forum.php?mod=p_w_upload&aid=MTAwODY0fDM 

WinSCP 主界面
左侧切换到要上传的文件的目录
右侧切换到 /tmp 目录
选择 /tmp 目录的原因是:/tmp 目录挂载于内存中,而且容量较大,这样刷写固件时不会跟 Flash 产生冲突。

forum.php?mod=p_w_upload&aid=MTAwODY1fDl 

选择要上传的文件,右键菜单选择 [Upload]

forum.php?mod=p_w_upload&aid=MTAwODY2fDR 

直接单击 [OK] 继续
文件即可上传到路由中。

使用 PuTTY 登录路由:

打开 PuTTY
Host Name 填入路由器 IP 地址
Connection type 选择 SSH (默认)

单击 [Open]

forum.php?mod=p_w_upload&aid=MTAwODY3fDM 

跟 WinSCP 一样,如果是第一次使用 PuTTY 登录路由,那么会有如下提示:
单击 [Yes] 即可。

forum.php?mod=p_w_upload&aid=MTAwODY4fGI 

然后 PuTTY 会要求输入用户名和密码:
用户名填入 root
密码填入 root 密码。这里一样在输入密码时不会显示。
如果用户名密码无误,就会进入 Shell 环境。

forum.php?mod=p_w_upload&aid=MTAwODY5fDJ 

输入 cd /tmp 命令进入 /tmp 目录。
输入 mtd write <文件名> <mtd分区名> 命令以进行刷机操作

下图是以刷入 U-Boot 为例的:

forum.php?mod=p_w_upload&aid=MTAwODcwfDl 

有些教程会在 mtd 命令后加入 -r 参数,此参数的意思为刷写完成后立即重启路由
但这里不建议这么做,因为一旦刷机文件选错,这里还有补救的机会。

关于获取 MTD 分区名:
运行 cat /proc/mtd 命令即可查看

forum.php?mod=p_w_upload&aid=MTAwODc3fDh