当前位置: 首页 > news >正文

服务器如何配置SSH密钥登录提高安全性?

通过配置SSH密钥登录替代密码登录,可大幅提升服务器安全性(避免暴力破解)。以下是详细操作指南:


一、生成SSH密钥对(本地操作)

1. 生成密钥
ssh-keygen -t ed25519 -C "your_email@example.com"  # 推荐ed25519算法
# 或使用RSA(兼容旧系统):
# ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
  • 按提示设置密钥存储路径(默认~/.ssh/id_ed25519

  • 强烈建议设置密钥密码(Passphrase)

2. 查看公钥
cat ~/.ssh/id_ed25519.pub
# 显示类似:
# ssh-ed25519 AAAAC3Nz... your_email@example.com

二、上传公钥到服务器

方法1:使用ssh-copy-id(最简单)
ssh-copy-id -i ~/.ssh/id_ed25519.pub username@server_ip
# 输入密码后自动部署
方法2:手动部署
# 登录服务器
ssh username@server_ip# 创建.ssh目录(若不存在)
mkdir -p ~/.ssh && chmod 700 ~/.ssh# 写入公钥
echo "ssh-ed25519 AAAAC3Nz..." >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

三、配置SSH服务端(关键安全设置)

sudo nano /etc/ssh/sshd_config
必须修改的配置项:
Port 2222  # 修改默认SSH端口(避免扫描)
PermitRootLogin no  # 禁止root直接登录
PasswordAuthentication no  # 禁用密码登录
PubkeyAuthentication yes  # 启用密钥登录
重启SSH服务:
sudo systemctl restart sshd

四、测试连接

ssh -p 2222 -i ~/.ssh/id_ed25519 username@server_ip
# 首次连接需输入密钥密码(若设置)

五、增强安全措施(可选但推荐)

1. Fail2Ban防护
sudo apt install fail2ban  # Debian/Ubuntu
sudo yum install fail2ban  # CentOS/RHEL

自动封禁暴力破解IP

2. IP白名单限制
# /etc/ssh/sshd_config 末尾添加:
AllowUsers username@your_ip
3. 多因素认证(MFA)
sudo apt install libpam-google-authenticator
google-authenticator

按提示完成配置后,在sshd_config启用:

ChallengeResponseAuthentication yes
AuthenticationMethods publickey,keyboard-interactive

六、故障排查

1. 连接被拒绝
  • 检查防火墙是否放行新端口:

    sudo ufw allow 2222/tcp  # Ubuntu
    sudo firewall-cmd --add-port=2222/tcp --permanent  # CentOS
  • 确认SSH服务运行:

    sudo systemctl status sshd
2. 密钥登录失败
  • 检查权限:

    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys
  • 查看SSH日志:

    sudo tail -f /var/log/auth.log

七、密钥管理最佳实践

  1. 备份密钥:将~/.ssh/目录打包加密存储

  2. 多设备登录:为每个设备生成独立密钥对

  3. 定期轮换:每3-6个月更换一次密钥

  4. 禁用过期密钥:删除服务器上authorized_keys中无用公钥

http://www.lryc.cn/news/579622.html

相关文章:

  • 基于Anything LLM的本地知识库系统远程访问实现路径
  • vue2+elementui使用compressorjs压缩上传的图片
  • 机器人“触摸”水果成熟度突破:SwishFormer模型与DIGIT视触觉传感器在HelloRobot上的水果检测应用
  • 从0到1解锁Element-Plus组件二次封装El-Dialog动态调用
  • Unity-Shader-几何着色器
  • 学习设计模式《十六》——策略模式
  • Linux 73 LAMP4
  • 离线迁移 Conda 环境到 Windows 服务器:用 conda-pack 摆脱硬路径限制
  • 从0开始学习R语言--Day37--CMH检验
  • VR 果蔬运输开启农业物流新变革
  • AI无标记动捕如何结合VR大空间技术打造沉浸式游戏体验
  • 从0到1实战!用Docker部署Qwerty Learner输入法的完整实践过程
  • https如何利用工具ssl证书;使用自己生成的证书
  • 创建 TransactionStatus
  • rabbitmq 与 Erlang 的版本对照表 win10 安装方法
  • Debian-10-standard用`networking`服务的`/etc/network/interfaces`配置文件设置多网卡多IPv6
  • 贝叶斯深度学习:赋予AI不确定性感知的认知革命
  • 日本IT|日本做后端开发需要具备什么技能开发经验?
  • 深入理解CSS中的BFC 与IFC , 布局的两大基础概念
  • Day50 预训练模型+CBAM模块
  • 【Python】图像识别的常用功能函数
  • golang json omitempty 标签研究
  • 服务器如何配置防火墙规则开放/关闭端口?
  • 数据库运维指导书
  • 74. 搜索二维矩阵
  • WPS 如何使用宏录制功能
  • Web 服务器架构选择深度解析
  • 【字节跳动】数据挖掘面试题0006:SVM(支持向量机)详细原理
  • LiteHub中间件之跨域访问CORS
  • 【ArcGISPro】基于Pro的Python环境进行Django简单开发Web