采用dropbear-2016.74来配置
1.解压dropbear
<code>tar -xjvf dropbear-2016.74.tar.bz2</code>2.进入解压文件夹
<code>./configure --host=arm-linux CC=arm-linux-gnueabihf-gcc --disable-zlib</code>编译
<code>make PROGRAMS="dropbear dropbearkey dropbearconvert dbclient scp"</code>3.将生成文件放入开发板,文件结构如下
/usr/sbin/dropbear<br>
/usr/bin/dropbearkey<br>
/usr/bin/dropbearconvert<br>
/usr/bin/dbclient<br> /usr/bin/scp注意:由于dropbear需要ld-linux-armhf.so.3动态链接库,在开发板内名字少了armhf,会导致运行not found
gec@linux:~/Desktop/dropbear/dropbear-2016.74$ strings dropbear | grep /lib/ld<br> /lib/ld-linux-armhf.so.3 //编译机输出解决:在开发板内执行命令创建动态链接器软链接
ln -s /lib/ld-linux.so.3 /lib/ld-linux-armhf.so.3授予执行权限
chmod +x /usr/sbin/dropbear<br>
chmod +x /usr/bin/dropbear*<br>
chmod +x /usr/bin/scp注意:开发板先设置密码,通过passwd root指令来设置
4.生成 SSH Host Key
开发板执行:
mkdir -p /etc/dropbear生成 key:
dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key成功会输出类似:
Generating key, this may take a while...
<br> Public key portion is:<br> ssh-rsa AAAA....5.启动 SSH 服务
dropbear -R -E参数说明:
| 参数 | 作用 |
|---|---|
-R | 自动生成 host key(如果没有) |
-E | 输出日志到终端 |
6.配置开机自启动
1. 创建自启脚本文件
在 /etc/init.d/ 目录下创建一个文件,比如命名为 S50dropbear(数字 50 表示启动顺序,如果你希望它在网络服务启动之后再启动,确保这个数字比网络启动脚本的数字大,比如网络是 S40network,那 dropbear 设为 50 就很合适)。
vi /etc/init.d/S50dropbear2. 写入脚本内容
将以下标准的管理脚本写入该文件。你使用的 -R 参数(自动生成主机密钥)非常适合开发板,我已经将其包含在内:
#!/bin/sh
# 检查 dropbear 程序是否存在
[ -x /usr/sbin/dropbear ] || exit 0
start() {
echo -n "Starting dropbear sshd: "
# 确保 dropbear 需要的配置目录存在 (防止某些最小化根文件系统缺少此目录报错)
mkdir -p /etc/dropbear
# 启动并携带 -R 参数自动生成秘钥
/usr/sbin/dropbear -R
echo "OK"
}
stop() {
echo -n "Stopping dropbear sshd: "
killall dropbear
echo "OK"
}
restart() {
stop
sleep 1
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart|reload)
restart
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac
exit 03. 赋予可执行权限(关键步骤)
你的 rcS 循环会跳过没有可执行权限的文件,所以必须执行以下命令:
Bash
chmod +x /etc/init.d/S50dropbear7.ssh远程连接
万事俱备,使用ubuntu虚拟机ssh远程连接开发板
如出现连接拒接,下面是解决方法
1. 补全名字服务配置文件 /etc/nsswitch.conf(最常见原因)
如果你的文件系统是基于 glibc 构建的,Dropbear 在验证用户时会调用 C 库函数寻找用户。如果缺少 nsswitch.conf 文件,它就不知道该去 /etc/passwd 里面找 root,从而报错“用户不存在”。
解决办法: 在开发板终端执行以下命令,直接创建该文件:
echo "passwd: files" > /etc/nsswitch.conf<br>
echo "group: files" >> /etc/nsswitch.conf<br>
echo "shadow: files" >> /etc/nsswitch.conf2. 补全合法的 Shell 列表 /etc/shells
出于安全考虑,Dropbear 会检查你登录用户的默认 Shell(比如 /bin/sh 或 /bin/bash)是否记录在系统的安全 Shell 列表里。如果这个文件不存在或没有你的 Shell,它也会拒绝登录。
解决办法: 在开发板终端执行以下命令,把常用的 Shell 加进去:
echo "/bin/sh" >> /etc/shells<br>
echo "/bin/bash" >> /etc/shells<br>
echo "/bin/ash" >> /etc/shells3. 检查 root 用户的密码记录
虽然你说了“已经设置密码”,但我们需要确认系统有没有正确把它写入 shadow 文件。 在开发板上输入:
Bash
cat /etc/passwd | grep root正常的输出应该是类似这样的(注意第二列应该是 x,表示密码存在 /etc/shadow 中,且最后的 shell 一般是 /bin/sh 或 /bin/bash): root:x:0:0:root:/root:/bin/sh
如果你看到的是 root::0:0...(两个冒号中间为空)或者 root:*:0:0...,说明密码记录有问题。你可以再在开发板上执行一次 passwd root 重新设置一下密码,确保写入。
后记
本来是用openssh来编译的,网上找了一圈发现都挺复杂的,虽然我编译成功了,但是一运行就一堆库not found给我这小白整不会了,问ai也答不出所以然。
后面ai提示可以用dropbear来进行编译,简单且快速,网上也找到了成功编译且连接的博客。后面根据ai的提示进行了编译,我也不懂只能完全依靠ai,chatgpt给的静态编译指令是错的,导致一直拒接连接,后面给gemini看编译过程才解决问题,也花了5个小时左右,东搞搞西搞搞的,所以教程可能有点乱,不过流程是对的。本篇文章也百分之99出自ai,我只是进行了简单总结。ai,太伟大了!



