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

Ubuntu SSH密钥登录:告别密码

在Linux服务器管理中,SSH(Secure Shell)是最常用的远程连接工具。然而,传统的密码登录方式存在诸多安全隐患:弱密码易被暴力破解、密码泄露风险高、难以管理多个服务器等。相比之下,SSH密钥登录通过非对称加密技术,提供了更高级别的安全保障。

本文将详细介绍如何在Ubuntu服务器上配置SSH密钥登录,并完全禁用密码认证。无论你是个人开发者还是系统管理员,这套方案都能显著提升服务器的安全性。

环境准备

服务器环境

操作系统:Ubuntu 22.04.5 LTSSSH服务:OpenSSH Server用户权限:具有sudo权限的用户

客户端环境

操作系统:Windows 10/11连接工具:FinalShell(也可使用其他SSH客户端)

第一部分:服务器端SSH服务安装与基础配置

1.1 更新系统并安装SSH服务

首先,通过控制台或VNC登录到Ubuntu服务器。如果服务器尚未安装SSH服务,执行以下命令:

# 更新软件包列表
sudo apt update# 安装OpenSSH服务器
sudo apt install openssh-server -y

1.2 启动并启用SSH服务

安装完成后,启动SSH服务并设置为开机自启:

# 启动SSH服务
sudo systemctl start ssh# 设置开机自启
sudo systemctl enable ssh# 检查服务状态
sudo systemctl status ssh

正常情况下,你应该看到"active (running)"状态。
1.3 配置防火墙(如有需要)

如果服务器启用了防火墙,需要允许SSH连接:

# 允许SSH端口(默认22)
sudo ufw allow ssh# 启用防火墙
sudo ufw enable# 检查防火墙状态
sudo ufw status

第二部分:SSH密钥生成与配置

2.1 生成Ed25519密钥对

Ed25519是目前最推荐的SSH密钥算法,它比传统的RSA算法更安全、更快速:

# 生成Ed25519密钥对
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -C "$(whoami)@$(hostname)-$(date +%Y-%m-%d)"

系统会提示:

输入保存位置:直接回车使用默认路径输入私钥密码:建议设置强密码(至少8位,包含大小写字母、数字和特殊符号)再次确认密码:输入相同的密码

2.2 设置正确的文件权限

正确的文件权限是SSH密钥安全的关键:

# 设置.ssh目录权限
chmod 700 ~/.ssh# 设置私钥权限(只有所有者可读写)
chmod 600 ~/.ssh/id_ed25519# 设置公钥权限(所有者可读写,其他人可读)
chmod 644 ~/.ssh/id_ed25519.pub# 查看权限设置
ls -la ~/.ssh/

输出应类似:

drwx------  2 user user 4096 Dec 18 18:30 .
drwxr-xr-x 18 user user 4096 Dec 18 18:20 ..
-rw-------  1 user user  509 Dec 18 18:30 id_ed25519
-rw-r--r--  1 user user  128 Dec 18 18:30 id_ed25519.pub

2.3 配置公钥认证

创建授权文件并将公钥添加到其中:

# 创建authorized_keys文件(如果不存在)touch ~/.ssh/authorized_keys# 设置授权文件权限
chmod 600 ~/.ssh/authorized_keys# 将公钥添加到授权文件
cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys# 验证公钥已添加
cat ~/.ssh/authorized_keys

2.4 测试本地密钥认证

在服务器本地测试密钥认证是否正常工作:

ssh -i ~/.ssh/id_ed25519 localhost

第一次连接会提示确认主机指纹,输入"yes"继续。如果设置了私钥密码,会提示输入。成功登录后,执行exit退出。

第三部分:配置SSH服务器安全策略

3.1 备份原始配置

在修改SSH配置前,务必备份原始文件:

# 创建带时间戳的备份
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup.$(date +%Y%m%d)

3.2 编辑SSH配置文件

使用nano编辑器修改SSH配置:

sudo nano /etc/ssh/sshd_config

找到并修改以下配置项:

# 启用公钥认证
PubkeyAuthentication yes# 禁用密码认证(关键安全设置)
PasswordAuthentication no# 禁用键盘交互认证
KbdInteractiveAuthentication no# 禁止空密码
PermitEmptyPasswords no# 限制root登录方式(建议设置)
PermitRootLogin prohibit-password# 其他安全增强设置
MaxAuthTries 3           # 最大认证尝试次数
LoginGraceTime 30        # 登录宽限时间(秒)
ClientAliveInterval 300  # 客户端活动检测间隔
ClientAliveCountMax 2    # 客户端活动检测最大次数

3.3 应用配置更改

# 测试配置文件语法
sudo sshd -t# 如果没有错误,重启SSH服务
sudo systemctl restart ssh# 确认服务正常运行
sudo systemctl status ssh

3.4 验证配置生效

# 确认密码认证已禁用
sudo grep -E "PasswordAuthentication|PubkeyAuthentication" /etc/ssh/sshd_config# 确认其他相关配置
sudo grep -E "PermitRootLogin|KbdInteractiveAuthentication" /etc/ssh/sshd_config

期望输出:

PasswordAuthentication no
PubkeyAuthentication yes
PermitRootLogin prohibit-password
KbdInteractiveAuthentication no

第四部分:Windows客户端配置(FinalShell)

4.1 获取服务器连接信息

在服务器上执行以下命令,获取连接所需信息:

# 获取服务器IP地址
hostname -I# 查看当前用户名
whoami

记下IP地址(如192.168.1.100)和用户名。

4.2 将私钥下载到Windows

在服务器上显示私钥内容:

cat ~/.ssh/id_ed25519

复制输出的所有内容(包括-----BEGIN OPENSSH PRIVATE KEY-----和-----END OPENSSH PRIVATE KEY-----)。

在Windows电脑上:

创建新的文本文件粘贴复制的私钥内容将文件保存为ubuntu_server.key注意保存位置,建议放在安全目录

4.3 FinalShell安装与配置

安装FinalShell

访问Finalshell官网下载Windows版本运行安装程序,按向导完成安装

导入SSH密钥

打开FinalShell点击菜单栏 工具 → 导入密钥选择刚才保存的ubuntu_server.key文件设置密钥信息:密钥名称:Ubuntu服务器密钥密码:输入生成密钥时设置的私钥密码点击"确定"完成导入

创建SSH连接

在FinalShell主界面,点击 文件夹图标 或 文件 → 新建选择 SSH连接(Linux)填写连接信息:
名称:Ubuntu服务器(密钥登录)
主机:服务器IP地址
端口:22
用户名:服务器用户名
认证方式:公钥认证
私钥:选择"Ubuntu服务器密钥"

点击"确定"保存

4.4 首次连接测试

双击新建的连接首次连接会提示安全警告,选择"接受并保存"如果设置了私钥密码,FinalShell会提示输入成功连接后,会显示服务器终端界面

在连接成功的终端中,可以执行一些验证命令:

# 验证连接信息
whoami
hostname# 测试命令执行
echo "SSH密钥连接成功!"# 查看系统信息
uname -a

第五部分:安全验证与测试

5.1 验证密码登录已被禁用

在另一台电脑或Windows的命令提示符中,尝试使用密码登录:

ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no 用户名@服务器IP

应该看到错误信息:Permission denied (publickey).

5.2 验证密钥登录正常工作

使用FinalShell或命令行进行密钥登录测试:

# 在Windows PowerShell或CMD中(如果安装了OpenSSH客户端)
ssh -i "C:\path\to\ubuntu_server.key" 用户名@服务器IP

5.3 查看SSH登录日志

在服务器上监控SSH登录活动:

# 查看最近SSH登录记录
sudo journalctl -u ssh --since "today" | grep -E "(Accepted|Failed)"# 实时监控登录尝试
sudo tail -f /var/log/auth.log | grep ssh
http://www.jsqmd.com/news/111239/

相关文章:

  • Springboot+Easyexcel将数据写入模板文件并导出Excel
  • JetBrains Fleet倒了,Cursor还能撑多久?
  • 运维系列数据库系列【仅供参考】:达梦:DM8归档日志挖掘
  • VMware ESXI 8.0安装vCenter 8.0
  • 郑州新广发30年专注河南抗风卷帘门!源头厂家8条生产线,月产8000扇接单无忧 - 朴素的承诺
  • 文生中英双语的AI视频工具怎么选?一个英语老师的实测结论
  • zz测试18种RAG技术找到最优方案
  • CANN视频增强实战:基于Ascend实用的平台的历史影像修复
  • 高精度时钟测试仪覆盖多行业的时间同步测试利器 gps时钟测试仪
  • Java经典设计模式可以解决 99% 的 业务场景
  • Xiaomi mimo大模型API接入Claude code
  • Python构建AI Agent自主智能体系统
  • 2025年最新测评:为了保住头发,我把市面上这6款工具测了个遍,专治知网维普“一片红”
  • Python实现Transformer神经网络时间序列模型可视化分析商超蔬菜销售数据筛选高销量单品预测|附代码数据
  • 0代码实现接口自动化测试 —— RF框架实践
  • 测试Mini小车的情况
  • 河南堆积门首选郑州新广发!30年源头厂家,8条生产线月产8000扇,接单无忧 - 朴素的承诺
  • 再也不用看别人脸色!国产CPU带火国产软件,“卡脖子”将成为过去
  • 2025年口碑好的河南铝合金卷帘门厂家最新权威实力榜 (2) - 朴素的承诺
  • 【RTOS】EasyLog的移植与使用
  • 【系统架构】服务器部件说明
  • 2025年口碑好的河南铝合金卷帘门厂家最新权威实力榜 (1) - 朴素的承诺
  • zz六大 LangChain 支持向量库详细对比
  • 深入解析:Web安全攻防深度解析:从理论到实践的全方位防御指南
  • 测试博文标题 at 12/18/2025 7:24:53 PM
  • SpringBoot 单测
  • 测试博文标题 at 12/18/2025 7:24:26 PM
  • 2025CMEF聚焦胰岛素泵厂家创新成果:阿瑞医疗如意泵引领智能控糖新生态 - 品致汇
  • 完整教程:2025 数据分类分级工具核心技术路径对比与优劣分析
  • Jmeter命令行压测 生成HTML测试报告