开发测试环境SSH应平衡便捷与安全:限制登录范围(/etc/hosts.allow/deny)、保留密码登录但加固(MaxAuthTries 3、LoginGraceTime 60等)、密钥与密码并存、禁用root直连、保持端口22及SSHv2协议。

开发测试环境不需要像生产环境那样严防死守,但也不能完全放任。关键是在“能快速连上、方便调试”和“不引入明显风险”之间找平衡点。
限制登录范围,但不过度收紧
用 /etc/hosts.allow 和 /etc/hosts.deny 快速圈定可访问来源,比改防火墙规则更轻量:
- 只允许内网段(如 192.168.10.0/24)和本地回环访问 SSH
- 在 /etc/hosts.allow 中写:sshd: 192.168.10.0/24 127.0.0.1
- 在 /etc/hosts.deny 中写:ALL: ALL
- 不用重启 sshd,改完立即生效,适合频繁变动的测试网络
保留密码登录,但加基础防护
开发人员常需临时连不同机器,密钥管理反而拖慢节奏。可以保留密码登录,但必须加固:
- 设置 MaxAuthTries 3,防暴力试错
- 启用 LoginGraceTime 60,未完成认证的连接60秒后自动断开
- 禁用空密码:PermitEmptyPasswords no
- 不关闭 PasswordAuthentication yes,但确保用户密码有一定复杂度(比如用 pam_pwquality 约束)
简化认证流程,避免锁死自己
测试机重装频繁,密钥容易丢失或失效。建议分两步走:
- 先启用密钥登录:PubkeyAuthentication yes,鼓励团队使用
- 但不强制禁用密码:PasswordAuthentication yes 保持兜底能力
- 禁止 root 直接登录:PermitRootLogin no(这是底线,不能妥协)
- 给开发账号配 sudo 权限,需要提权时用 sudo -i,不暴露 root 密码
端口与超时:够用就行,不折腾
测试环境没必要改端口来“防扫描”,但要防止会话长期挂起:
- 保留默认端口 22,省去运维工具适配成本
- 配置空闲断开:ClientAliveInterval 600(10分钟发一次心跳),ClientAliveCountMax 2(两次失败即断开)
- 这样既释放僵尸连接,又不会频繁掉线影响调试
- 协议只用 SSHv2:Protocol 2,旧版 v1 必须关掉


















