开发板ssh服务配置
本文最后更新于 167 天前,其中的信息可能已经有所发展或是发生改变。

采用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/S50dropbear

2. 写入脚本内容

将以下标准的管理脚本写入该文件。你使用的 -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 0

3. 赋予可执行权限(关键步骤)

你的 rcS 循环会跳过没有可执行权限的文件,所以必须执行以下命令:

Bash

 chmod +x /etc/init.d/S50dropbear

7.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.conf

2. 补全合法的 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/shells

3. 检查 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,太伟大了!

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇