我已经使用 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。