如何配置仅允许从指定子域名通过SSH登录VPS?
仅允许特定子域名SSH连接VPS的实现方案
首先明确两种不同需求的实现方式,以及你之前配置失败的原因:
为什么你之前的配置会失败?
AllowUsers *@ssh.example.com 这条规则限制的是发起连接的客户端主机名(即客户端IP的反向解析结果),而非你用来连接的VPS域名。如果你的客户端IP反向解析不匹配ssh.example.com,SSH服务会直接拒绝连接,这就是你需要救援模式恢复的原因。
需求1:仅允许来自ssh.example.com指向的IP的客户端连接
如果你想让只有某个固定IP(对应ssh.example.com)的设备能SSH连接VPS,可按以下步骤配置:
备份配置文件:
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak修改sshd_config:
用编辑器打开文件(如vim /etc/ssh/sshd_config),添加以下规则(二选一):- 若客户端IP的反向解析已指向
ssh.example.com:AllowUsers *@ssh.example.com - 若无法设置反向解析,直接用客户端IP:
AllowUsers *@192.168.1.100 # 替换为你的客户端公网IP
建议指定具体SSH用户(如
AllowUsers yourname@ssh.example.com),缩小权限范围,降低配置错误风险。- 若客户端IP的反向解析已指向
验证配置并重启服务:
- 先检查配置是否合法:
sshd -t - 无错误后重启SSH服务:
systemctl restart sshd - 关键:重启前保留当前SSH连接窗口,同时新开一个窗口测试连接,避免配置错误导致断连。
- 先检查配置是否合法:
需求2:仅允许通过输入ssh.example.com作为目标地址连接
如果你的VPS只有一个公网IP,无法实现这个需求——因为所有域名最终都会解析到同一个IP,TCP连接仅传递IP和端口信息,SSH服务无法区分用户是通过哪个域名发起的连接。
若你的VPS有多个公网IP,可按以下方式实现:
- 将
ssh.example.com指向其中一个IP(如1.2.3.4),主域名指向另一个IP(如1.2.3.5)。 - 修改
sshd_config,让SSH服务仅监听ssh.example.com对应的IP:ListenAddress 1.2.3.4 - 重启SSH服务后,用户通过主域名或其他IP连接时,会因SSH服务未监听对应IP而失败。
内容的提问来源于stack exchange,提问作者VullWen
相关产品推荐
相关产品推荐

