修改 SSH 端口
修改 SSH 端口是加强服务器安全的基础步骤之一。默认的 22 端口是自动化攻击的常见目标。修改方法如下:
- 使用文本编辑器(如 vi)打开 SSH 配置文件:
vi /etc/ssh/sshd_config - 找到
#Port 22这一行,删除开头的注释符号#,并将数字22修改为你希望使用的端口号(建议使用大于 10000 的端口)。 - 保存并退出编辑器。
重要提示:修改端口前,请确保新端口未被系统其他服务占用,并且已在服务器的防火墙(如 iptables、firewalld)或云服务商的安全组规则中开放,否则将导致无法连接。
配置 SSH 密钥登录并禁用密码登录
仅使用密钥进行身份验证,并完全禁用 root 账户的密码登录,是防止暴力破解最有效的方法之一。以下为完整配置流程。
1. 生成 SSH 密钥对
在本地或一台可信的机器上执行以下命令生成密钥对:
ssh-keygen -t rsa -b 4096
命令执行过程中会提示:
- 设置密钥文件保存路径:通常直接按回车使用默认路径(如
~/.ssh/id_rsa)。 - 设置密钥密码(Passphrase):强烈建议设置一个强密码。这为私钥增加了一层保护,即使私钥文件泄露,攻击者也无法直接使用。
命令执行后,会在 ~/.ssh/ 目录下生成两个文件:
id_rsa:私钥。这是需要绝对保密的文件,请妥善存储在本地安全的位置。id_rsa.pub:公钥。这个文件可以公开,需要上传到服务器。
2. 将公钥上传至服务器
将本地生成的公钥内容追加到服务器上对应用户(此处以 root 用户为例)的授权密钥文件中。
- 首先,确保服务器上
/root/.ssh/目录存在,权限正确:mkdir -p /root/.ssh chmod 700 /root/.ssh - 将公钥内容追加到
authorized_keys文件:cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys - 设置授权文件权限:
chmod 600 /root/.ssh/authorized_keys
3. 配置 SSH 服务端
编辑 SSH 服务端配置文件 /etc/ssh/sshd_config。
vi /etc/ssh/sshd_config
找到并修改以下配置项:
- 启用密钥认证:确保以下行未被注释(即行首没有
#),且值为yes。PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys - 禁用密码认证:将以下行修改为
no,以彻底关闭密码登录。PasswordAuthentication no - (可选)禁用 root 密码登录:如果只想对 root 用户禁用密码,可以设置:
PermitRootLogin prohibit-password此设置允许 root 用户使用密钥登录,但禁止使用密码登录。如果上一步已全局禁用密码,则此设置非必需。
- (可选)修改端口:如果第一步修改了端口,请确认
Port配置项已正确设置。
4. 重启 SSH 服务并测试
在断开当前连接前,务必新开一个终端窗口,使用密钥登录测试配置是否正确,确认无误后再重启服务。
- 对于使用 systemd 的系统(如 CentOS 7+、Ubuntu 16.04+):
systemctl restart sshd - 对于使用 SysV init 的系统(如 CentOS 6):
service sshd restart
关键安全建议:
- 备份私钥:私钥丢失将导致无法登录服务器,请务必做好备份。
- 删除服务器上的私钥:生成密钥对后,切勿将私钥文件(
id_rsa)留在服务器上。公钥上传后,服务器上只需保留authorized_keys文件。 - 使用强密码:为私钥设置一个复杂且唯一的密码。
- 管理多台服务器:建议为每台服务器使用不同的密钥对,以隔离风险。
完成以上步骤后,你的服务器将只能通过 SSH 密钥进行认证登录,安全性将得到显著提升。