Ubuntu的sshd配置

点击此处即可看到 sshd_config 守护进程手册

sshd 配置文件位置:

1
/etc/ssh/sshd_config

过滤空白行注释行

1
grep -Ev '^$|^[# ]' /etc/ssh/sshd_config

该文件配置

  • 修改ssh的端口
  • 禁止root登录
  • 禁止密码登录,只能用被信任的机器登录,用公私钥进行登录

需要修改 /etc/ssh/sshd_config文件如下参数:

1
2
AddressFamily any # 

0.0.0.0 含义是绑定该机器所有的网卡

配置多端口SSH

关于为什么要设置多端口,每个端口设置不同用户以及使用密钥登录,这是为了防止暴力破解,把密码破解出来。因为我发现我服务器一直在被攻击。

可以用该命令查看服务器登录失败的用户:

1
sudo grep -E "sshd.*Failed" /var/log/auth.log | grep "$(date-1+'%b %d')"

这是在设备为云服务器时候的配置,否则需要先调整/etc/ssh/sshd_config; 然后在/etc/ssh/sshd_config.d/目录下添加一个自定义的CONFIG.conf文件,文件内容如下,搭配ufw,如果启动了ufw,需要先配置ufw

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# 端口 322:允许管理员用户(如 root)登录,权限全开
Port 322
# 端口 699:仅允许普通用户(如 AdminROOT)登录,限制权限,但是需要先创建这个用户
Port 699
# 端口 1340:数据上传,需要先创建一个用户 DataTransmission
Port 1340

Match LocalPort 322
# 允许root登录此端口(覆盖全局的no)
PermitRootLogin yes
# 允许密码登录(覆盖全局的no,支持root密码登录)
PasswordAuthentication yes
# 仅允许root用户访问此端口(拒绝其他所有用户)
AllowUsers root@*
# 仅端口22使用自定义公钥路径(如 /root/.ssh/root_authorized_keys)
# AuthorizedKeysFile /root/.ssh/root_authorized_keys

# 端口 699 配置:仅允许 AdminROOT 用户登录,强制密钥认证
Match LocalPort 699
# 禁止root登录此端口
PermitRootLogin no
# 强制禁用密码登录(仅允许密钥)
PasswordAuthentication no
PubkeyAuthentication yes
# 仅允许AdminROOT用户访问(可限制来源IP,如 AdminROOT@192.168.1.*)
AllowUsers AdminROOT@*
# 自定义公钥路径
AuthorizedKeysFile /root/.ssh/authorized_keys

# 端口 1340 配置:仅允许 DataTransmission 用户登录,强制密钥认证
Match LocalPort 1340
# 禁止root登录此端口
PermitRootLogin no
# 强制禁用密码登录(仅允许密钥)
PasswordAuthentication no
PubkeyAuthentication yes
# 仅允许 DataTransmission 用户访问(可限制来源IP,如DataTransmission@192.168.1.*)
AllowUsers DataTransmission@*
# 自定义公钥路径
AuthorizedKeysFile /home/DataTransmission/.ssh/authorized_keys

当这里配置产生错误后,可以通过22端口密码登录设备,对设备进行配置

查看登录失败的信息

查看所有 SSH 登录失败的记录(包含 IP 和用户名)

1
sudo grep "Failed password for" /var/log/auth.log

下面是我服务器部分暴力破解的信息:

1
2
3
4
5
6
7
8
2025-10-12T15:36:38.900931+08:00 JHK sshd[1017099]: Failed password for invalid user hj from 92.118.39.36 port 47506 ssh2
2025-10-12T15:38:13.429630+08:00 JHK sshd[1018211]: Failed password for invalid user dell from 112.216.129.27 port 44486 ssh2
2025-10-12T15:38:50.045640+08:00 JHK sshd[1018584]: Failed password for invalid user tuwenkai from 92.118.39.152 port 59676 ssh2
2025-10-12T15:40:12.797845+08:00 JHK sshd[1019404]: Failed password for invalid user caobx from 193.32.162.38 port 59496 ssh2
2025-10-12T15:40:46.420189+08:00 JHK sshd[1019737]: Failed password for root from 207.180.240.227 port 45900 ssh2
2025-10-12T15:45:07.597722+08:00 JHK sshd[1022323]: Failed password for invalid user kyz from 85.235.135.46 port 45216 ssh2
2025-10-12T15:46:38.889394+08:00 JHK sshd[1023230]: Failed password for invalid user chenmg from 2.57.122.56 port 57772 ssh2
2025-10-12T15:49:53.929380+08:00 JHK sshd[1025186]: Failed password for invalid user chenyongcan from 92.118.39.152 port 32950 ssh2

以IP:92.118.39.36为示例:

只提取失败的 IP 地址(去重统计)

如果想单独列出所有尝试失败的 IP 地址,并统计次数(用于识别恶意 IP):

1
sudo grep "Failed password for" /var/log/auth.log | grep -oE '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | sort | uniq -c | sort -nr

至于命令含义去AI一下就可以搜索到了

只提取失败的用户名(包含合法用户和无效用户)

1
sudo grep "Failed password for" /var/log/auth.log | awk '{print $9}' | sort | uniq -c

输出:这里只是一点点服务器上面的数据,实际更多这里是次数名字

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1 xuhh
1 xujie
1 xumingyu
1 xuminqia
1 xxx
1 xyn
1 xyyf
1 yancaiyun
1 lf
1 liyx
1 lizhupeng
1 ljguo
2 .log
1 lue
1 lwq1

查看更详细的失败信息(包括断开连接、无效用户等)

除了密码错误,还可能有 “无效用户”“连接断开” 等失败情况,可使用更宽泛的筛选:

1
sudo grep "sshd.*Failed" /var/log/auth.log