SSH 提升安全的常用参数与配置
分为命令行临时参数、sshd_config服务端配置、客户端 ssh 参数三部分,规避弱密码、暴力破解、转发滥用等风险。
一、ssh 客户端命令行安全参数(ssh 命令时使用)
bash
# 基础安全连接示例
ssh -o参数 用户@ip
表格
| 参数 | 作用 |
|---|---|
-o StrictHostKeyChecking=yes |
严格主机密钥检查,服务器密钥变化直接拒绝连接,防止中间人攻击;不自动接受陌生主机密钥 |
-o UserKnownHostsFile=/dev/null |
不写入 known_hosts(临时测试用,生产不建议) |
-o PasswordAuthentication=no |
禁止密码登录,只允许密钥登录,客户端层面拒绝密码弹窗 |
-o ForwardAgent=no |
关闭 Agent 转发,避免跳板机泄露本地私钥,高危,默认建议关闭 |
-o ForwardX11=no |
关闭 X11 图形转发,避免漏洞利用 |
-o PermitLocalCommand=no |
禁止本地命令执行 |
-o ConnectTimeout=10 |
连接超时 10 秒,防止挂住 |
-C |
压缩传输(带宽差使用,安全无增益) |
-2 |
强制使用 SSH‑2 协议,废弃 SSH‑1(现在新版默认就是 2) |
-i /path/private.key |
指定私钥文件,注意私钥权限必须600 |
示例,只允许密钥、拒绝密码、严格校验主机密钥:
bash
ssh -o PasswordAuthentication=no -o StrictHostKeyChecking=yes root@192.168.1.10
⚠️
ForwardAgent=yes很多人图方便开,风险很高:跳板机被入侵后攻击者可以使用你本地 agent 的私钥去访问其他机器,生产尽量不用。
二、服务端 /etc/ssh/sshd_config(最重要,防护服务器)
修改后必须执行 systemctl restart sshd
ini
# 1. 禁用密码登录,只密钥登录(最核心防暴力破解)
PasswordAuthentication no
ChallengeResponseAuthentication no
# 2. 禁止root直接ssh登录
PermitRootLogin no
# 3. 只允许指定用户登录,白名单
AllowUsers admin user01
# 4. 禁用废弃SSH1协议
Protocol 2
# 5. 关闭危险转发
X11Forwarding no
AllowAgentForwarding no
AllowTcpForwarding no # 如果不需要端口转发就关掉;需要则设yes
PermitTunnel no
# 6. 减少会话闲置超时,空闲自动断开
ClientAliveInterval 300
ClientAliveCountMax 2
# 7. 最大认证尝试次数,防止暴力猜密码
MaxAuthTries 3
# 8. 限制最大并发会话
MaxSessions 5
# 9. 禁止空密码账户登录
PermitEmptyPasswords no
# 10. 公钥认证开启
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
三、密钥文件权限(安全基石,权限不对 ssh 直接拒绝)
服务端
bash
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chown -R $user:$user ~/.ssh
客户端本地私钥
bash
chmod 600 id_rsa
四、其他安全实践
- 修改默认 22 端口:
Port 2222,降低自动化扫描攻击(不能解决真正入侵,仅减少日志噪音,不要当成主要安全手段) - 配合防火墙 firewalld/iptables,只放行信任源 IP 访问 ssh 端口
- 安装 fail2ban,自动拉黑暴力爆破 IP
- 避免使用
ssh -A(开启 agent 转发) - 不要私钥设置无密码,私钥务必设置 passphrase;本地可用
ssh‑agent缓存密码
五、排查命令
bash
# 查看sshd加载的有效配置
sshd -T
# 测试ssh配置语法是否错误,避免重启sshd直接断连
sshd -t