我在树莓派5上运行了ssh server供其它计算机连接,并且,在sshd_config中关闭了密码认证,开启密钥文件认证。
很长一段时间,运行基本没问题。但最近连续出现了几次相同的问题:
远程电脑连接树莓派5的时候,提示FATAL ERROR: Connection refused.无法连接到服务器
。
树莓派5上一通乱查么,最后尝试sudo systemctl restart ssh后马上就可以连接成功。
但过两天,可能又出现相同的情况。我应该怎么排查问题?
ps:
树莓派5上有防火墙(防火墙已经开放12222/tcp),但关闭防火墙后问题依旧存在,推断与防火墙无关。平时防火墙打开的情况下,远程电脑可以成功连接。
抓包这活比较生,有没有教程链接可以给我一个,网上搜索了几个,都不太明确。
sudo tcpdump -s0 -w a.pcap ‘tcp port 22 or icmp’
故障重现:
笔记本电脑ssh连接pi5被拒绝。
抓包处理过程:
先在pi5上运行抓包(tcp port 22),然后在笔记本上抓包(icmp)。之后在pi5上另一个终端运行sudo systemctl restart ssh
,然后笔记本电脑ssh连接pi5成功并传输文件成功。然后,查看两个设备上的抓包输出。
奇怪的是,啥包也没抓到:
$ sudo tcpdump -s0 -w a.pcap tcp port 22
[sudo] peter 的密码:
tcpdump: listening on wlan0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
^C2311 packets captured
2311 packets received by filter
0 packets dropped by kernel
上面是pi5输出,下面是笔记本电脑输出:
ps:
我的ssh端口不是22,抓包命令实际端口为自定义的端口。上面pi5命令把端口做了隐私处理后才贴上来。
生成的 pcap 文件看看呀。另外成功的时候没啥好看的。
确实是 sshd 服务器拒绝了连接。你看看 sshd 和内核日志里有报错吗?
sshd日志的话,我看了下/etc/ssh/sshd_config的内容,好像没有开启日志记录(那个#号没有去掉):
# Logging
#SyslogFacility AUTH
#LogLevel INFO
下面是pi5日志目录中的文件:
$ ls /var/log/
alternatives.log boot.log.2 bootstrap.log faillog i2p lightdm swtpm
apt boot.log.3 btmp firebird journal private timeshift
boot.log boot.log.4 cups fontconfig.log lastlog README wtmp
boot.log.1 boot.log.5 dpkg.log hp libvirt runit
内核日志,应该怎么查看?
journalctl --since=问题开始前的时间
哦,你系统重启之后 sshd 服务就没跑起来……systemctl status ssh.service 看看?
1 个赞
我看有个disabled,看来是需要systemctl enable ssh一下。你说系统重启,我想起来好像有过systemctl disable ssh的操作。
ps:
刚才systemctl enable ssh后,重启pi5试了一下,ssh连接成功。应该就是它了。
我回忆了一下,应该是防火墙没有配置好的时候,先把ssh给disable了;防火墙配置好以后,却忘记enable ssh了。
@lilydjwg