OpenWRT默认ssh组件使用Dropbear,但不带SFTP,当然你也可以后续再安装,又或者直接使用openssh替代dropbear,像我这样折腾。
编译配置
进入您的编译目录,执行 make menuconfig
进入配置界面
取消Dropbear
路径:Base System
里面取消勾选Dropbear
编译OpenSSH
路径 Network -> SSH
如图勾选
最后记得保存,随后编译安装即可!
SSH登录配置
直接编译安装的OpenSSH默认不支持密码登录,所以你无论怎样也连不上,是不是发现被坑了?
哈哈,皮一下,毕竟这个坑我给大家趟过了,这里提供两种方法。
1、密钥登录
在编译之前,提前写入固件自己登录设备的公钥,具体操作:
进入编译目录,再进入路径:/package/base-files/files/
,随后建立一个二级目录root/.ssh/
,所以完整的路径为:
编译目录/package/base-files/files/root/.ssh
新建一个文件authorized_keys
,写入自己电脑公钥即可,编译刷入固件之后,则无需密码直接登录。
2、利用luci开启密码登录
如果已经安装luci,并且设置了密码,那么适合本方法,具体操作:
登录luci后台,依次找到System -> Starup -> Locale Startup
,会看到一个脚本编辑页面,在最后一行内容exit 0
之前写入以下内容:
sed -i "s/#PasswordAuthentication yes/PasswordAuthentication yes/g" /etc/ssh/sshd_config
sed -i "s/#PermitRootLogin prohibit-password/PermitRootLogin yes/g" /etc/ssh/sshd_config
随后后台System -> Reboot
点击重启,重启之后会发现已经可以直接使用密码登录,随后上面的增加的脚本内容则可以去掉啦。
可能的错误
以上都是基于Openwrt官方源码编译的操作流程,如果您基于lede的源码,那么编译之后可能会出现这个错误:
无论怎么改密码亦或者使用密钥,均无法正常登陆,在luci后台系统日志里面出现以下错误日志:
fatal: privsep_preauth: preauth child terminated by signal 31
那你可以参考一下这个解决方法,至于这个为什么会出现这个问题,暂时未知。