SSH密码登录容易遭受暴力破解攻击。搬瓦工VPS开通后,建议立即配置SSH密钥登录并禁用密码认证。密钥认证比密码安全得多,RSA/Ed25519密钥几乎无法被暴力破解,同时还免去了每次输入密码的麻烦。
Tip: 配置SSH密钥前,请确保你可以通过搬瓦工KiwiVM面板的Shell终端访问VPS,以防配置出错后无法登录。
Linux/macOS系统:
# 生成Ed25519密钥(推荐,更安全更快)
ssh-keygen -t ed25519 -C "your_email@example.com"
# 或生成RSA 4096位密钥
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
生成过程中的提示:
~/.ssh/id_ed25519,直接回车即可生成后会产生两个文件:
~/.ssh/id_ed25519 # 私钥(绝不能泄露!)
~/.ssh/id_ed25519.pub # 公钥(上传到服务器)
Windows系统(PowerShell):
# Windows 10/11内置OpenSSH,直接在PowerShell中运行:
ssh-keygen -t ed25519 -C "your_email@example.com"
# 密钥保存在 C:\Users\你的用户名\.ssh\ 目录
Windows系统(PuTTY):
使用PuTTYgen生成密钥:打开PuTTYgen,选择Ed25519或RSA(4096位),点击Generate,移动鼠标生成随机数。生成后保存私钥(.ppk文件)并复制公钥文本。
方法1:使用ssh-copy-id(最简单)
# Linux/macOS一键上传
ssh-copy-id -i ~/.ssh/id_ed25519.pub root@your_vps_ip
# 指定端口
ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 22 root@your_vps_ip
方法2:手动上传
# 查看本地公钥内容
cat ~/.ssh/id_ed25519.pub
# 登录VPS后,创建.ssh目录(如果不存在)
mkdir -p ~/.ssh
chmod 700 ~/.ssh
# 将公钥内容追加到authorized_keys文件
echo "你的公钥内容" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
方法3:一行命令完成
cat ~/.ssh/id_ed25519.pub | ssh root@your_vps_ip "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
上传公钥后,测试是否可以免密码登录:
# 使用密钥登录
ssh root@your_vps_ip
# 如果使用非默认密钥文件
ssh -i ~/.ssh/id_ed25519 root@your_vps_ip
如果成功登录且没有提示输入密码(或只提示输入密钥的passphrase),说明密钥配置正确。
Tip: 务必确认密钥登录成功后,再进行下一步禁用密码登录。否则可能导致无法登录VPS。
确认密钥登录正常后,编辑SSH配置文件禁用密码认证:
# 编辑sshd配置
nano /etc/ssh/sshd_config
# 修改以下配置项:
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
# 确保公钥认证已开启
PubkeyAuthentication yes
# 禁止root密码登录(但允许root密钥登录)
PermitRootLogin prohibit-password
重启SSH服务使配置生效:
systemctl restart sshd
验证密码登录已禁用:打开一个新的终端窗口尝试用密码登录,应该被拒绝。同时用密钥登录应该正常。
除了密钥认证,还可以进行以下SSH安全加固:
# /etc/ssh/sshd_config 完整安全配置
# 修改默认端口(减少扫描)
Port 2222
# 仅使用SSH协议2
Protocol 2
# 禁止空密码登录
PermitEmptyPasswords no
# 限制登录尝试次数
MaxAuthTries 3
# 设置登录超时
LoginGraceTime 30
# 禁止X11转发(如不需要图形界面)
X11Forwarding no
# 关闭TCP转发(如不需要)
AllowTcpForwarding no
# 禁用DNS反解(加快连接速度)
UseDNS no
# 设置存活检测(防止僵尸连接)
ClientAliveInterval 60
ClientAliveCountMax 3
如果修改了SSH端口,记得更新防火墙规则放行新端口。
在本地创建SSH配置文件,简化连接命令:
# 编辑 ~/.ssh/config
nano ~/.ssh/config
# 添加VPS连接配置
Host bwg
HostName your_vps_ip
User root
Port 2222
IdentityFile ~/.ssh/id_ed25519
ServerAliveInterval 60
ServerAliveCountMax 3
之后只需输入ssh bwg即可快速连接。
每台设备生成独立的密钥对,将每台设备的公钥都添加到VPS的authorized_keys中:
# authorized_keys文件可以包含多个公钥,每行一个
cat ~/.ssh/authorized_keys
# ssh-ed25519 AAAA... 设备1
# ssh-ed25519 AAAA... 设备2
# ssh-rsa AAAA... 设备3
如果某台设备丢失或不再使用,从authorized_keys中删除对应的行即可撤销访问权限。
如果密钥登录失败,检查以下几点:
# 检查.ssh目录和文件权限(这是最常见的问题)
ls -la ~/.ssh/
# 目录权限应该是 700
# authorized_keys权限应该是 600
# 私钥权限应该是 600
# 修复权限
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
# 查看SSH登录日志定位问题
tail -50 /var/log/auth.log # Ubuntu/Debian
tail -50 /var/log/secure # CentOS
# 使用-v参数调试连接过程
ssh -v root@your_vps_ip
配合Fail2ban可以进一步保护SSH服务,阻止暴力破解攻击。完整的VPS安全方案请参考VPS安全加固指南。
Tip: 更多教程请查看新手教程。