Ubuntu环境下临时禁用部署账户及限制部署窗口访问的替代方案咨询
针对部署账户访问时间限制的替代方案(Ubuntu环境)
针对你提到的Ubuntu环境下限制部署账户仅在特定窗口访问的需求,重命名.ssh文件夹确实能实现,但这个方法比较粗暴,可能会影响到部署账户下其他依赖.ssh目录的操作(比如known_hosts缓存)。这里有几个更优雅、风险更低的替代方案:
1. 利用sshd配置的Match+Time指令实现精准控制
这是最推荐的方案,直接通过sshd的原生配置实现,不需要额外脚本或工具。
配置步骤:
- 编辑
/etc/ssh/sshd_config文件,先默认拒绝部署账户的登录权限:DenyUsers deploy-user - 在文件末尾添加匹配规则,仅允许部署账户在指定时间窗口内登录:
这里的Match User deploy-user Time 09:00-17:00 PermitLogin yesTime参数支持更灵活的格式,比如指定工作日:Time Mon-Fri 09:00-17:00,或者具体日期范围。 - 重启sshd服务使配置生效:
sudo systemctl restart sshd
优点:
- 原生支持,无需额外依赖
- 精准针对部署账户和SSH登录方式,不影响其他操作
- 配置变更可逆,风险低
2. 用cron定时切换authorized_keys文件
如果不想修改sshd全局配置,可以通过定时任务切换部署账户的密钥文件,替代重命名整个.ssh目录。
配置步骤:
- 先备份部署账户正常的
authorized_keys文件:cp /home/deploy-user/.ssh/authorized_keys /home/deploy-user/.ssh/authorized_keys.prod - 创建一个空的密钥文件作为非窗口期的替代:
touch /home/deploy-user/.ssh/authorized_keys.deny - 添加cron定时任务(用
crontab -e编辑部署账户的定时任务,或者用系统级cron):# 部署窗口开始时恢复正常密钥 0 9 * * * cp /home/deploy-user/.ssh/authorized_keys.prod /home/deploy-user/.ssh/authorized_keys && chmod 600 /home/deploy-user/.ssh/authorized_keys # 部署窗口结束时替换为拒绝文件 0 17 * * * cp /home/deploy-user/.ssh/authorized_keys.deny /home/deploy-user/.ssh/authorized_keys && chmod 600 /home/deploy-user/.ssh/authorized_keys
优点:
- 仅影响密钥验证,不破坏
.ssh目录结构 - 操作简单,容易理解和维护
3. 通过PAM模块实现全局登录时间限制
如果需要限制部署账户的所有登录方式(不仅是SSH),可以用Ubuntu自带的PAMtime模块。
配置步骤:
- 编辑
/etc/pam.d/sshd文件,添加PAM时间规则:account required pam_time.so - 编辑
/etc/security/time.conf文件,添加针对部署账户的限制:
格式说明:sshd;*;deploy-user;Al0900-1700服务名;终端;用户名;时间规则,Al代表所有工作日(周一到周日),如果只想限制工作日可以用Wk。 - 重启sshd服务生效:
sudo systemctl restart sshd
优点:
- 全局控制,覆盖所有登录方式(SSH、本地登录等)
- 系统原生模块,无需额外安装工具
4. 防火墙规则配合cron(适合固定部署IP的场景)
如果部署请求来自固定的IP地址,可以通过防火墙在非窗口期拦截该IP的SSH连接。
配置步骤(以ufw为例):
- 添加定时任务,部署窗口开始时允许IP访问:
0 9 * * * sudo ufw allow from 192.168.1.100 to any port 22 - 窗口结束时删除允许规则:
0 17 * * * sudo ufw delete allow from 192.168.1.100 to any port 22
优点:
- 网络层拦截,安全性更高
- 不影响部署账户本身的配置
内容的提问来源于stack exchange,提问作者Andre M
相关产品推荐
相关产品推荐

