小米路由器 +关注 已有23735人关注 +发表新主题
回复

【黑科技】达人教你使用密钥登录小米路由器SSH终端

精华 发表在 晒机评测 2016-03-08 15:43:40  来自PC 复制链接 手机看帖扫一扫!手机看帖更爽 386 57369

        Hi! 大家好,我是超级米粉号。从小米路由诞生至今,在各方面功能已经做到很强大完善了,基本可以满足普通用户,对智能路由器的标准需求。但对于一些真正的程序猿或无线发烧友,它们往往需要满足更高的要求,这些功能简直提不起任何胃口,甚至连塞牙缝都不够,对于它如此强大的性能优势,岂不是赤果果的浪费吗。

       好在小米路由提供了更高的技术支持,即通过身份验证并开启SSH功能,对于爱折腾的米粉来说,简直是重磅福利啊,也确实有不少勇士冒着失去保修资格的风险,打开了这扇神奇的大门。但于此同时也带来了更大的安全风险。今天就让路由达人来告诉你,如何加固这个及其重要的阵地,在疯狂捣鼓的同时也能最大程度的保障整个设备的安全。

【修改加密认证方式的必要性】

        在小米路由器绑定帐号并通过U盘刷入对应固件,开启SSH功能(方法请戳)成功后,默认处于关闭状态的SSH相关22端口,在设备启动之后直接被释放,只要将终端通过有线或无线的方式与路由连接,就可以在XShell、Putty等SSH工具中输入默认密码来登录SSH终端,今后也可随时修改该密钥,采用的是基于SSH第二个版本的,隧道安全协议的加密方式,在彼此通讯传输时信息也均为密文,虽然这样可以有效防止中间人的窃取攻击,也基本上不可能直接还原出密钥内容。但却很可能通过暴力穷举的方式侵入,即不断尝试字典里或随机生成的各种密码组合来试图登入,如果你设置的密钥不够复杂且长期未作修改就格外危险了。要知道SSH终端一旦被入侵,攻击者将会获得路由设备最大的权限,尤其是已经将SSH端口映射到公网的情况,非法操作后果不堪设想。

        所以对于经常需要登录SSH终端,做各种调试的米粉来说,有必要采取相应措施防患于未然,如果是通过安装一些防暴破的软件,并设置相应规则机制来实现防御,对于像基于Openwrt这样严重阉割的Linux发行版本来说,不仅极其麻烦而且并不能保证其稳定性。所以并不现实。最简便有效方法,还是要采用更加安全可靠的密钥认证,同时关闭传统的口令认证机制。因为这种方法采用的是RSA对称密钥加密认证,需提供指定的私密密钥才能完成验证,而且还可为不同的终端配置不同私钥并对其进行加密,完全不必担心恶意攻击破解的问题,免除后患。

        以下为传统口令和RSA对称密钥的身份验证简单原理图,对比后很容易发现,密钥认证过程比口令还要复杂许多,当然也给破解攻击增加了不少阻碍和困难,从而使设备更加安全。


【所需工具】

         工欲善其事,必先利其器。在执正式操作之前,请务必准备好如下工具:

1.已经开启SSH功能的小米路由器(硬盘版/mini版)一台

2.PC一台

3.软件:PC上的SSH终端连接工具Xmanager(附件下载)


【详细教程】

        常言道,实践才是检验真理的唯一标准,前面说了这么多干货,大家也许看得有点不耐烦了吧。下面就正式开始具体的操作流程。

1.在PC端登录小米路由器SSH终端

        首先需要将PC通过有线或无线的方式,连接到小米路由器的局域网内,然后打开Xmanager工具集安装程序将其安装到PC上,并输入产品序列号完成注册,方法和一般安装应用程序类似,按照向导一步步完成即可,此处就不再做详细说明了。接着打开其中的XShell4软件,在弹出的会话窗口中点击“新建”按钮创建一个新的会话。

        然后在“新建会话属性”窗口左侧的“类别”一栏中点击“连接”父项,接着在“常规”一栏中,输入一个有代表性的名称,主机名设为“miwifi.com”,协议设为SSH项。端口号维持22默认。接着再点击左侧的“终端”父项,在“仿真”一栏中将终端类型设为“linux”,然后在“转换”一栏中,将“编码”设为“Unicode(UTF-8)”,如果觉得终端窗口中的字体比较小,看起来不太舒服的话,还可以点击左侧的“外观”父项,然后在这里根据自己的喜好和习惯,对字体颜色及大小做适当调整,全部配置完成后点击“确定”按钮,保存并添加一个指向小米路由器SSH终端会话的快捷方式。

        之后你就可以在每次弹出的会话窗口(或点击菜单栏中的“文件”,再点“打开”项将其调出)中,选中刚才建立的SSH快捷方式项,并点击“连接按钮(或直接双击该项),登录小米路由器的SSH终端执行操作。首次登录如果在本地没有找到相应的主机密钥,就会弹出未知密钥安全警告提示,此时点击“接受并保存”按钮将密钥储存到本地即可,除非删除本地密钥或IP发生变化,下次将不会再提示。

        接着在弹出的用户名窗口中输入用户名root,并勾选“记住用户名”再点击“确定”按钮,然后在身份验证窗口中选择“Password”项,并输入在申请SSH功能的页面上,为这台路由器提供的缺省root密码,无需勾选“记住密码”选项,最后点击“确定”按钮登录终端。


2.修改ROOT账户的缺省密码

        如果每次登录SSH终端都使用缺省的root密码,不仅显得很麻烦,而且还特别不安全,所以建议及时将密码修改为自己的内容,也能为以后的调试及维护工作提供便利。在SSH终端输入如下命令并回车,然后输入两次新密码依次回车,输出提示“Password for root changed by root”表示修改成功,下次登录终端时直接使用新密码即可。

  passwd                                  #修改root账户的SSH终端登录密码


3.在本地生成一个RSA加密密钥

        要启用密钥认证方式登录终端,首先得在本地生成一个RSA对称密钥。点击菜单栏中的“工具”,接着点“新建用户密钥生成向导”打开密钥生成向导窗口,然后把密钥类型设置为“RSA”,如果对安全和重要性没有太高需求,密钥长度为1024位已足够保险,当然也可调高一些,来增加破解难度和安全系数,但解密速度可能会稍变慢,设置好后点“下一步”继续。

        然后等待程序生成公钥,完成后直接点“下一步”按钮,并输入该密钥的名称,建议和小米路由器的SSH快捷方式名称相同或类似,以便于今后和其他密钥区分,接着在输入两次密钥的密码,这样为密钥本身也做了一次加密,安全性堪比网银使用的U盾,想破解几乎无门。

        设置好后点击“下一步”按钮,会显示公钥信息,此时需要将公钥格式设置为“SSH2-OpenSSH”,然后点击“保存为文件”按钮并以“authorized_keys”为名,把公钥加密代码文件存储到本地PC上,最后点击“完成”退出向导。到这里我们已经生成了一个,用于SSH终端登录验证的RSA密钥并提取出了公钥。


4.将公钥文件上传到路由器并重启SSH服务

        下面还需要将刚才提取出来的“authorized_keys”公钥文件,上传到路由器的SSH密钥存储指定目录中,很多的Linux发行版本,如Redhat(CentOS)系统默认将密钥放置在“~/.ssh”目录中(家目录下的.ssh隐藏目录),而Openwrt的dropbear服务就是sshd服务,所以在小米路由器中会有所不同,密钥是存储在“/etc/dropbear”目录的,我们只要将公钥文件放置在该目录下并赋予644权限。最后在重启一次dropbear服务,就能够通过密钥登录啦,可以通过输入并执行如下命令来实现。

  cd /etc/dropbear                         #切换到“/etc/dropbear”密钥存储目录

  rz                                   #上传“authorized_keys”公钥文件到该目录(或直接拖入)

  chmod 644 authorized_keys                  #为“authorized_keys”文件赋予644权限

  ls -l authorized_keys                     #查看文件的基本属性信息(确定设置权限操作是否成功)

  /etc/init.d/dropbear restart                #重启dropbear服务(SSH服务)

 


5.验证密钥登录

        完成以上操作后,需要验证是否可以通过密钥登录。直接关闭XShell软件并重新打开,然后尝试再次通过SSH登录路由器终端,在用户身份验证窗口中,将认证方式切换为“Pubilc key”,并下拉选择刚才创建的RSA密钥,然后输入密钥的密码,最后点击“确定”按钮看是否可以正常登录终端。如果是又直接返回到身份验证窗口而无法进入终端,说明设置未生效或密钥不匹配,请尝试按照以上方法重新上传公钥文件,或重启路由器后再试。


6.修改配置文件关闭口令认证

        确定可以通过验证密钥来正常登录路由器终端后,我们还得将传统的口令认证方式关闭,不给入侵这留下任何的暴破后门,这就需要修改dropbear的配置文件来实现,即修改“/etc/config/dropbear”文本中的两项参数,首先执行如下命令,用vi编辑器打开该文件.

 vi /etc/config/dropbear                     #用vi文本编辑器打开dropbear服务配置文件       

        可以看到dropbear服务的配置文件非常简单,此时按下a或i键进入插入模式,将“option PasswordAuth”和“option RootPasswordAuth”右边单引号中的“on”都修改为“off”,如果你的SSH是需要映射到外网的,也最好修改下“option Port”单引号中的默认22端口号,避免攻击者很容易扫描并识别到,最后带#的一项是每次登录终端,输出欢迎画面文件的位置,一般都不需要修改,完成所有配置后按ESC键退出插入模式,在按:键进入命令模式,输入“wq”回车,保存并退出vi编辑器(或在退出插入模式后,按住Shift再按两下Z亦可)。

        最后执行如下命令重启dropbear服务,然后关闭并重新打开XShell软件,再次登录时“Password”项会变为灰色并不可选,这说明口令认证已经被关闭了,只能使用密钥认证方式登录终端,即使勾选“记住密码”项每次也需输入密钥密码,更加安全放心。

  /etc/init.d/dropbear restart                #重启dropbear服务(SSH服务)

注意:(1)关闭口令认证后,其他设备如果没有该密钥将无法通过SSH登录终端。可以将密钥导出为文件,并在需要登录PC上的XShell中导入即可。

(2)系统更新或在后台手动刷入开发版的bin固件,会使dropbear的配置文件恢复默认,口令认证将被重新开启,但密钥依然可用。

(3)通过U盘重新刷入开启SSH功能的bin固件后,root密码将恢复为缺省,但口令认证不会开启,密钥依然可用。

(4)将路由器恢复出厂设置(复位)后,“/etc”目录下的内容将全部替换为默认,无法通过密钥认证(密钥文件丢失),同时root密码将恢复为缺省。


7.【扩展内容】编写脚本实现快速关闭口令认证

        在关闭口令登录认证后,如果执行系统OTA升级或在后台手动刷入固件操作,则会导致其再次被打开。虽然通过修改配置文件来重新关闭,是分分钟可以搞定的事儿,但对于一些不太熟悉Linux或vi编辑器的小白来说,可能会显得比较麻烦,更何况路由开发版固件每隔1-2周,就要发布一个新版本呢。其实我们完全可以通过编写一个bash脚本,每次只要执行它即可快速完成,让操作显得更加简便。

        关闭口令认证的脚本我已经写好,大家可以直接通过回复本贴,并在附件中下载“password-off”文件到PC上,如果需要在执行批处理脚本后,连同端口一同变更,可对第7行的端口号进行修改并保存即可。

        然后通过在终端中执行如下命令,将脚本上传到路由器的“/etc”目录下,并赋予可执行权限。

  cd /etc                                #切换到“/etc”目录

  rz                                   #上传“password-off”脚本文件到该目录(或直接拖入) 

  chmod +x password-off                     #为“password-off”文件赋予可执行权限

  ls -l password-off                      #查看文件的基本属性信息(确定设置权限操作是否成功)


        当发现口令认证被重新打开后,可在终端中直接执行如下命令运行该脚本即可快速关闭,看到“successful”的输出信息表示操作已成功,是不是简单快捷了许多呢、

  /etc/password-off                            #执行“password-off”脚本文件

  sh /etc/password-off                           #如果上条执行失败,可在前面加上“sh”命令执行

         关于使用密钥方式替代传统口令,登录小米路由器SSH终端的方法,就先介绍到这里了,有了更稳妥的安全保障,终于可以放下后顾之忧,尽情折腾这款高能玩具啦。同时也希望此教程能够为更多发烧友,带来便捷的使用体验,帮助大家更好的玩转路由。下次如果有机会,还会分享更多实用有趣的玩法,谢谢各位的阅读与支持。


【附件下载】

        写贴不易,且看且珍惜,回复后可直接下载本文中所提到的资源。

以下内容被隐藏,回复本帖后可见


【免责声明】
1.本文版权归@超级米粉号 所有,转载或引用请注明出处。未经允许,请勿私自部分或全部盗用文中的任何内容(如图片),谢谢合作。
2.文中部分资源(如图片)来源于网络,引用均属个人行为,并不反映任何小米社区之意见,小米社区不为其承担任何责任。
3.文中所有技术性叙述,教程等仅代表个人的经验及看法,部分资源来源于网络,所有信息仅供学习交流之用,不能保证绝对的真实准确性,使用及操作均属自愿行为,对于出现的问题或损失本人不为其承担任何责任。

扫描二维码,手机查看本帖
发表
已有3人评分 经验 理由
FL小虾米 +5 很给力!
Mi_245080101 +8 玩的太复杂,能否简单点。
rooming +10 很给力!

总评分: 经验 +23

最新评论 | 正序排列
只看楼主|楼层直达:
回复