TOP云提供高性价比云服务器租用,有中国内地/港澳台、海外等全球各地节点,TOP云国内云服务器只要有域名备案号就能直接用,无须重复备案;港澳台及海外云服务器不用备案,购买之后直接使用,省时省力省心。价格实惠,续费同价,2核2G5M仅需27元每月,8核8G50M仅需66元每月,更多配置套餐请进入下面网址了解:
TOP云总站云服务器:https://topyun.vip/server/buy.html
TOP云C站云服务器:https://c.topyun.vip/cart
在云服务器上配置 SSH 密钥登录 是提升安全性的核心措施,可彻底告别密码爆破风险。以下是详细操作指南,涵盖 密钥生成、服务器配置、权限优化及故障排查 全流程:
一、SSH 密钥登录原理
密钥对组成:
私钥(id_rsa):保存在本地客户端,需严格保密(类似密码)。
公钥(id_rsa.pub):上传到服务器,用于验证客户端身份。
优势:
无需记忆复杂密码,避免暴力破解。
支持免密登录(结合 ssh-agent)。
可禁用密码登录,彻底阻断攻击路径。
二、生成 SSH 密钥对(本地客户端)
1. Linux/macOS 或 Windows(WSL/OpenSSH)
# 进入密钥存储目录(默认 ~/.ssh)
cd ~/.ssh
# 生成密钥对(RSA 4096位,兼容性最佳)
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
# 按提示操作:
# - 默认保存路径(直接回车):~/.ssh/id_rsa
# - 设置密钥密码(可选,增强安全性):输入短语或直接回车跳过
生成的文件:
id_rsa:私钥(必须保密!)。
id_rsa.pub:公钥(需上传到服务器)。
2. Windows(PuTTY 用户)
下载 PuTTYgen(官网链接)。
打开 PuTTYgen → 选择 RSA → 点击 Generate(移动鼠标生成随机数)。
保存私钥(.ppk 文件)和公钥(复制文本框内容)。
三、将公钥上传到服务器
方法1:使用 ssh-copy-id(最简单)
# 自动上传公钥到服务器的默认用户(如 ubuntu)
ssh-copy-id -i ~/.ssh/id_rsa.pub username@your-server-ip
# 指定端口(如 SSH 端口改为 2222)
ssh-copy-id -i ~/.ssh/id_rsa.pub -p 2222 username@your-server-ip
原理:将公钥追加到服务器的 ~/.ssh/authorized_keys 文件中。
方法2:手动复制粘贴(适用于无 ssh-copy-id 的环境)
查看本地公钥:
cat ~/.ssh/id_rsa.pub
登录服务器,创建 .ssh 目录并设置权限:
mkdir -p ~/.ssh
chmod 700 ~/.ssh将公钥粘贴到 ~/.ssh/authorized_keys:
echo "粘贴公钥内容" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys # 关键!权限必须为600
四、服务器端配置优化
1. 禁用密码登录(关键步骤)
编辑 SSH 配置文件:
sudo nano /etc/ssh/sshd_config
修改以下参数:
PasswordAuthentication no # 禁用密码登录
PubkeyAuthentication yes # 启用密钥认证
ChallengeResponseAuthentication no # 禁用交互式认证
⚠️ 注意:
修改后必须确保密钥登录可用,否则可能导致无法连接服务器!建议先保留密码登录过渡。
2. 限制登录用户(可选)
AllowUsers username1 username2 # 仅允许指定用户登录
# 或
AllowGroups ssh-users # 仅允许特定用户组
3. 重启 SSH 服务
sudo systemctl restart sshd
# 或旧版系统使用:
sudo service ssh restart
五、测试密钥登录
# 使用密钥登录(默认端口22)
ssh -i ~/.ssh/id_rsa username@your-server-ip
# 指定端口(如2222)
ssh -i ~/.ssh/id_rsa -p 2222 username@your-server-ip
首次连接:需确认服务器指纹(输入 yes)。
成功标志:无需输入密码直接登录。
六、高级安全配置
1. 使用 ssh-agent 管理私钥(免重复输入密码)
# 启动 ssh-agent
eval "$(ssh-agent -s)"
# 添加私钥到 agent(需输入密钥密码)
ssh-add ~/.ssh/id_rsa
# 查看已加载的密钥
ssh-add -l
持久化配置(避免每次重启重新加载):
将以下内容添加到 ~/.bashrc 或 ~/.zshrc:
if [ -z "$SSH_AUTH_SOCK" ]; then
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa
fi
2. 禁用 root 用户远程登录
# /etc/ssh/sshd_config
PermitRootLogin no # 禁止 root 直接登录
替代方案:通过普通用户登录后 sudo 提权。
3. 更改默认 SSH 端口(进一步降低扫描风险)
# /etc/ssh/sshd_config
Port 2222 # 改为非标准端口(如2222)
记得更新防火墙规则(如 ufw allow 2222/tcp)。
七、故障排查
1. 密钥登录失败常见原因
现象 | 可能原因 | 解决方案 |
---|---|---|
Permission denied | 1. 公钥未正确上传<br>2. 文件权限错误<br>3. SSH 配置未生效 | 1. 检查 ~/.ssh/authorized_keys<br>2. 确保权限 700(目录)和 600(文件)<br>3. 重启 SSH |
Agent admitted failure | 私钥未加载到 ssh-agent | 执行 ssh-add ~/.ssh/id_rsa |
Connection refused | 1. SSH 服务未运行<br>2. 防火墙/安全组未放行端口 | 1. sudo systemctl status sshd<br>2. 检查云平台安全组规则 |
2. 日志分析
服务器日志:
sudo tail -f /var/log/auth.log # Ubuntu/Debian
sudo tail -f /var/log/secure # CentOS/RHEL客户端调试:
ssh -vvv -i ~/.ssh/id_rsa username@your-server-ip # 显示详细日志
八、总结与最佳实践
必做操作:
生成密钥对 → 上传公钥 → 禁用密码登录 → 限制登录用户。
增强措施:
使用 ssh-agent 管理私钥。
更改默认 SSH 端口 + 防火墙限制。
定期轮换密钥(如每6个月)。
灾备方案:
保留一个备用管理员账户的密码登录(测试后禁用)。
使用云厂商的 VNC 紧急控制台 作为最后手段。
通过以上配置,你的服务器将实现 军事级 SSH 安全防护! 🔐
(如需进一步自动化,可结合 Ansible 批量部署密钥。)