在使用 buildroot 构建的嵌入式 Linux 上启动后 sshd 无法启动?

在使用 buildroot 构建的嵌入式 Linux 上启动后 sshd 无法启动?

我已经使用 buildroot 的默认配置为 Raspberry Pi 完成了最小安装。我还从 menuconfig 中选择了 openssh 和 openssl:

Package Selection for the target  --->
    [*] Networking  --->
        [*]   openssh
    [*] Library -->
        Crypto -->
            -*-   openssl
            [*]      openssl binary
            [ ]      openssl additional engines

我将 Pi 分配给192.168.0.14,但无法通过 ssh 连接到它。 nmap 显示 Pi 的所有端口都已关闭,有时根本不显示 Pi,我觉得这很奇怪 - 每当 nmap 扫描它时,LINK LED 就会闪烁,所以我猜它连接得很好。

update-rc.d我通常使用或管理启动服务systemctl,但是我只能通过 ssh 连接到 Pi - 我没有 HDMI 或串行端口。我不确定如何手动设置。/etc/init.d/S50sshd存在于 Pi 中,所以它应该在启动后启动 ssh,不是吗?

相关配置文件:/etc/ssh/sshd_config,/etc/init.d/S50sshd

我在SD卡中找不到任何相关日志。

编辑:

根据X Tian的评论建议,我获得了日志。唯一记录的是/var/log/messages。相关部分:

Jan  1 00:00:02 buildroot auth.info sshd[75]: Server listening on 0.0.0.0 port 22.

看来 sshd 正在启动。这个问题似乎是别的事情。

root@pc:~# ssh 192.168.0.14
ssh: connect to host 192.168.0.14 port 22: Connection refused
root@pc:~# ping 192.168.0.14
PING 192.168.0.14 (192.168.0.14) 56(84) bytes of data.
64 bytes from 192.168.0.14: icmp_seq=1 ttl=64 time=32.8 ms
64 bytes from 192.168.0.14: icmp_seq=2 ttl=64 time=55.6 ms
64 bytes from 192.168.0.14: icmp_seq=3 ttl=64 time=79.1 ms
^C
--- 192.168.0.14 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 32.808/55.871/79.140/18.917 ms
root@pc:~# exit
debian@pc:~ nmap -F 192.168.0.14
Starting Nmap 6.47 ( http://nmap.org ) at 2015-05-30 03:25 BRT

Nmap scan report for 192.168.0.14
Host is up (0.085s latency).
All 100 scanned ports on 192.168.0.14 are closed

有趣的是,关闭 Pi 并断开以太网电缆后,我仍然能够 ping 该地址。现在我真的迷失了。我认为最好只压缩并上传/下的所有文件如果有人知道在哪里查看(这不是生产环境,密码和私钥未使用,它们是为了测试目的而设置的)。

答案1

您的 sshd_config 不允许您以 root 身份登录时使用空密码,并且 root 帐户没有设置密码。

更改 ssh_config

#PermitEmptyPasswords no

PermitEmptyPasswords yes

要在日志中获取更多信息,请尝试提高 ssh 的日志记录级别

#LogLevel INFO

LogLevel DEBUG

进一步阅读有关更改 sshd 日志级别的信息这个答案

答案2

在你的分析中你说:

关闭 Pi 并断开以太网电缆后,我仍然能够 ping 通该地址

这是重复的 IP 症状。换句话说,您有 2 个(或更多)设备具有相同的 IP 地址。

您应该使用以下两种方式检查设备的 MAC 地址:

在您的设备上,执行 aifconfig并检查该HWaddr字段。

root@rpi# ifconfig
eth0      Link encap:Ethernet  HWaddr B8:27:EB:BE:1C:67  
          inet addr:192.168.1.11  Bcast:192.168.1.255  Mask:255.255.255.0

在您的远程计算机上,执行arp -a <device IPaddr>并检查该ether字段。

jml@pc$ arp -a 192.168.1.11
? (192.168.1.11) at b8:27:eb:be:1c:67 [ether] on eth0

在我的示例中,两个 MAC 地址是相同的。如果没有,您将必须检查网络的所有 IP 地址(静态动态的)。

大多数情况下,此问题是由于与其他静态地址一起使用的 DHCP 服务器配置错误造成的。例如,如果您的 DHCP 服务器在192.168.1.10和之间有一个池192.168.1.20,您一定不在此范围内还有其他静态地址。

回到你的 Pi 问题。只需尝试为其分配一个不在您的 DHCP 范围内的新 IP 地址。或者重新配置您的 DHCP 服务器,为您的静态地址留出更多空间。

答案3

/etc/init.d/S50sshd 存在于 Pi 中,因此它应该在启动后启动 ssh,不是吗?

不完全是。该/etc/init.d/S50sshd文件已被使用,但调用的是相应运行级别文件夹中的文件。当您运行时,update-rc.d它只是在所需文件夹的 init.d 中创建指向 S50sshd 的符号链接/etc/rc?.d/

您可以通过以下方式查看当前状态:

ls etc/rc*.d/*ssh*

(我希望它出现在运行级别 2、3、4 和 5 上)

并使用以下命令创建它们:

ln -s /etc/init.d/ssh /etc/rc2.d
ln -s /etc/init.d/ssh /etc/rc3.d
ln -s /etc/init.d/ssh /etc/rc4.d
ln -s /etc/init.d/ssh /etc/rc5.d

答案4

我在 buildroot 时也遇到过这个问题。事实证明,尽管 etc/init.d/S50sshd 由于 /var/empty 权限,sshd 仍无法启动(该提示来自仔细查看控制台打印)

Starting sshd: /var/empty must be owned by root and not group or world-writable.

# ls -l /var/                                                                                                                                                                                               
total 0                                                                                                                                                                                                     
..                                                                                                                                 
drwxr-xr-x    2 sshd     sshd            40 Jan  1 00:09 empty  

我的解决方案是删除它,重新创建它(我已经是root了)

# ls -l /var/                                                                                                                                                                                               
total 0                                                                                                                                                                                                     
..                                                                                                                                 
drwxr-xr-x    2 root     root            40 Jan  1 00:09 empty  

然后手动启动sshd。

相关内容