默认配置/etc/ssh/sshd_config
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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
| # 包含额外的配置文件(例如 /etc/ssh/sshd_config.d/*.conf) Include /etc/ssh/sshd_config.d/*.conf
# 指定监听地址族(any 表示 IPv4 和 IPv6) AddressFamily any
# 是否允许 root 用户登录(建议使用 prohibit-password 或 no 提高安全性) # yes 表示允许 root 用户使用密码、公钥等任意方式登录(不安全) PermitRootLogin prohibit-password # 建议仅允许公钥登录
# 允许使用交互式键盘认证(通常用于 PAM),已关闭更安全 KbdInteractiveAuthentication no
# 是否启用 PAM(Pluggable Authentication Modules,可配合系统用户验证) UsePAM yes
# 是否启用 X11 转发(用于图形界面程序,若无需求可关闭) X11Forwarding yes
# 登录后是否显示 /etc/motd 文件内容(登录提示) PrintMotd no
# 是否使用 DNS 反查客户端主机名(关闭可加快登录速度) UseDNS no
# 接收客户端的本地语言环境变量(常用于国际化) AcceptEnv LANG LC_*
# SFTP 子系统配置(指定 sftp-server 路径) Subsystem sftp /usr/lib/openssh/sftp-server
# 启用密码认证(若使用公钥验证可关闭以提升安全) PasswordAuthentication yes
# 禁止空密码账户登录 PermitEmptyPasswords no
# 可选优化项(默认未启用,如需使用请取消注释):
# 指定监听端口(默认 22) #Port 22
# 指定监听地址(可指定某个 IP) #ListenAddress 0.0.0.0 #ListenAddress ::
# 主机密钥文件路径 #HostKey /etc/ssh/ssh_host_rsa_key #HostKey /etc/ssh/ssh_host_ecdsa_key #HostKey /etc/ssh/ssh_host_ed25519_key
# 设置重新协商加密密钥的限制 #RekeyLimit default none
# 设置日志等级 #SyslogFacility AUTH #LogLevel INFO
# 登录超时时间(默认 2 分钟) #LoginGraceTime 2m
# 是否启用权限严格检查 #StrictModes yes
# 最大认证尝试次数 #MaxAuthTries 6
# 最大并发会话数 #MaxSessions 10
# 是否启用公钥认证(默认是开启的) #PubkeyAuthentication yes
# 指定 authorized_keys 文件路径 #AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
# 主机认证相关配置(一般用不到) #HostbasedAuthentication no #IgnoreUserKnownHosts no #IgnoreRhosts yes
# 是否启用 Kerberos/GSSAPI 等高级认证(默认关闭) #KerberosAuthentication no #GSSAPIAuthentication no
# 是否允许客户端进行代理转发(用于 ssh -A) #AllowAgentForwarding yes
# 是否允许 TCP 端口转发(如 ssh -L/ssh -R) #AllowTcpForwarding yes
# 启用网关端口(使远程端口映射可以监听公网) #GatewayPorts no
# 客户端连接保活(防止断线) #ClientAliveInterval 0 #ClientAliveCountMax 3
# 最大启动连接数量(防止 DoS 攻击) #MaxStartups 10:30:100
# 启用隧道支持 #PermitTunnel no
# chroot 限制目录 #ChrootDirectory none
# 版本信息追加说明(可加版本号标识等) #VersionAddendum none
# 登录前显示 Banner 内容(可用于显示警告、声明) #Banner none
# Match 匹配规则(可根据用户、组等定义不同配置) #Match User anoncvs # X11Forwarding no # AllowTcpForwarding no # PermitTTY no # ForceCommand cvs server
|
安全升级
修改端口号
1 2
| # 修改端口号(建议使用1024-65535之间的端口) Port 2022
|
禁用密码登录,启用密钥认证
1 2 3 4
| # 禁用密码登录(包括 cleartext 密码) PasswordAuthentication no # 允许公钥认证 PubkeyAuthentication yes
|
生成SSH密钥对
1 2 3 4
| # 客户端生成密钥对 ssh-keygen -t rsa -b 4096 -C "zhiqiang2033@gmail.com" # 将公钥复制到服务器 ssh-copy-id -p 2022 user@server_ip
|
配置Fail2ban动态防护
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| # 安装 Fail2ban sudo apt update && sudo apt install fail2ban -y # 配置 Fail2ban 来保护 SSH cat > /etc/fail2ban/jail.local << EOF [sshd] enabled = true # 启用 SSH 防护规则 port = ssh # 监听的端口(默认为 22) filter = sshd # 使用默认的 sshd 过滤器 logpath = /var/log/auth.log # 登录失败日志路径(Ubuntu 系统) maxretry = 5 # 允许的最大失败次数 findtime = 600 # 时间窗口:10 分钟内超过 maxretry 次则封禁 bantime = 3600 # 封禁时间:单位为秒,这里是 1 小时 # ignoreip = 127.0.0.1/8 # 忽略本地回环 IP,不对其封禁(白名单) EOF
|
查看封禁状态
1
| sudo fail2ban-client status sshd
|
手动解封IP
1
| sudo fail2ban-client set sshd unbanip 192.168.0.100
|
手动封禁IP
1
| sudo fail2ban-client set sshd banip 192.168.0.100
|
查看封禁日志
1
| sudo fail2ban-client get sshd banip
|
重启 Fail2ban 服务
1
| sudo systemctl restart fail2ban
|
启用双因子认证(2FA)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| # 安装 Google Authenticator PAM 模块 sudo apt update && sudo apt install libpam-google-authenticator -y
# 运行2FA配置向导 google-authenticator 1.按提示回答问题(建议全部选择“是”以增强安全性) 2.会生成一个二维码和一串密钥,扫码到手机 Google Authenticator 或其他兼容 App 3.记录好备用密钥,用于恢复
# 修改配置/etc/ssh/sshd_config # 增加一行 ChallengeResponseAuthentication yes # 强制认证方式:先公钥,再交互式(即 2FA) AuthenticationMethods publickey,keyboard-interactive
# 修改配置/etc/pam.d/sshd文件顶部附近添加 # nullok 表示如果用户没配置 2FA 不会强制失败,可去掉以强制所有用户必须 2FA。 auth required pam_google_authenticator.so nullok
|
最佳的配置/etc/ssh/sshd_config
这份 SSH 配置禁用密码和 root 登录,只允许公钥认证,改用非默认端口,限制登录尝试次数和会话数,关闭了 X11 和 TCP 转发,防止暴力破解和未授权访问,整体安全且实用,适合严格控制服务器访问。
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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
| # 包含额外的 sshd 配置文件 Include /etc/ssh/sshd_config.d/*.conf # 支持 IPv4 和 IPv6 AddressFamily any # 禁用键盘交互认证(非2FA场景) KbdInteractiveAuthentication no # 启用 PAM(可支持2FA等) UsePAM yes # 登录时不打印 MOTD PrintMotd no # 接受客户端传递的环境变量 AcceptEnv LANG LC_* # sftp 子系统路径 Subsystem sftp /usr/lib/openssh/sftp-server
# --- 基础安全配置 --- # SSH 端口(非默认端口) Port 2022 # 主机密钥路径 HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_host_ecdsa_key HostKey /etc/ssh/ssh_host_ed25519_key
# --- 认证相关 ---
# 禁止 root 账户密码登录 PermitRootLogin no # 禁止密码认证,仅允许密钥登录 PasswordAuthentication no # 禁止空密码 PermitEmptyPasswords no # 启用公钥认证 PubkeyAuthentication yes # 只允许公钥认证(无2FA) AuthenticationMethods publickey
# --- 连接限制 --- # 最大认证失败尝试次数 MaxAuthTries 3 # 最大会话数 MaxSessions 10 # 最大连接数及限制策略(防止拒绝服务) MaxStartups 3:30:10 # 登录超时,超过1分钟自动断开 LoginGraceTime 1m # 客户端活动检测时间间隔(秒) ClientAliveInterval 300 # 客户端最大无响应次数 ClientAliveCountMax 2 # 关闭DNS反查,加快连接速度 UseDNS no
# --- 用户限制 --- # 允许登录的用户列表 AllowUsers ubuntu # 拒绝登录的用户列表 DenyUsers root guest nobody
# --- 其他安全选项 --- # 禁用 X11 转发 X11Forwarding no # 禁止 TCP 转发 AllowTcpForwarding no # 禁止网关端口转发 GatewayPorts no # 禁止隧道接口 PermitTunnel no
|
创建ubuntu账号
1 2
| useradd -m -d /home/ubuntu -s /bin/bash ubuntu echo "ubuntu:123456" | chpasswd
|