ssh连接被拒绝,需要sudo systemctl restart ssh

我在树莓派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 文件看看呀。另外成功的时候没啥好看的。

包在这里:

pi5抓包
笔记本电脑抓包

这两个设备的抓包是有故障的情况下抓的。

确实是 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 :+1: