Ubuntu 上开启 SSH 服务、禁用密码登录并仅允许密钥认证

1. 安装 OpenSSH 服务

如果尚未安装 SSH 服务,运行以下命令:

bash 复制代码
sudo apt update
sudo apt install openssh-server

2. 启动 SSH 服务并设置开机自启

bash 复制代码
sudo systemctl start ssh
sudo systemctl enable ssh

3. 生成 SSH 密钥对(本地机器)

在本地终端生成密钥对(如未生成过):

bash 复制代码
ssh-keygen -t ed25519 -C "your_email@example.com"
  • 默认保存路径:~/.ssh/id_ed25519(私钥)和 ~/.ssh/id_ed25519.pub(公钥)。
  • 可选设置密钥密码(增强安全性)。

Ubuntu 22.10 及更高版本默认禁用了 ssh-rsa 签名算法(基于 SHA-1 哈希算法),原因是该算法存在安全风险,OpenSSH 从 8.7 版本开始不再默认支持,所有这里没有使用rsa签名算法


4. 将公钥上传到服务器

使用 scp 自动上传公钥:

bash 复制代码
 scp .\.ssh\id_ed25519.pub username@server_ip:~/.ssh

复制公钥内容到服务器的 ~/.ssh/authorized_keys 文件:

bash 复制代码
sudo cat ~/.ssh/id_ed25519.pub > ~/.ssh/authorized_keys

5. 禁用密码登录

编辑 SSH 配置文件:

bash 复制代码
sudo nano /etc/ssh/sshd_config

修改以下参数:

ini 复制代码
PasswordAuthentication no
PubkeyAuthentication yes

保存后重启 SSH 服务:

bash 复制代码
sudo systemctl restart ssh

6. 验证配置

  • 测试密钥登录

    bash 复制代码
    ssh username@server_ip

    应无需输入密码直接登录(若密钥有密码则需输入密钥密码)。

  • 检查密码登录是否禁用

    bash 复制代码
    ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no username@server_ip

    应提示 Permission denied


7. 防火墙配置(可选)

若启用 UFW 防火墙,允许 SSH 端口(默认 22):

bash 复制代码
sudo ufw allow ssh

注意事项

  • 备份密钥 :私钥(id_ed25519)需妥善保管,丢失将无法登录。
  • 紧急恢复:禁用密码前确保密钥登录可用,否则可能被锁。
  • 配置文件路径 :若修改无效,检查 /etc/ssh/sshd_config.d/ 下的附加配置。

通过以上步骤, Ubuntu 系统将仅允许 SSH 密钥认证,显著提升安全性。

相关推荐
FoldWinCard7 小时前
D5 Linux 网络及端口命令
linux·运维·服务器
零涂毕业设计8 小时前
毕业设计模块开发-OLED显示屏(IIC协议0.96寸)STM32 ESP32 FPGA Linux驱动免费分享
linux·stm32·单片机·嵌入式·esp32·fpga·oled
tedcloud1238 小时前
OmniRoute怎么部署?开源AI模型路由平台Linux部署教程
linux·服务器·人工智能·开源·音视频
霸道流氓气质8 小时前
KMS 密钥管理服务(Key Management Service)原理与实践
linux·服务器·数据库
SakitamaX9 小时前
LVS(Linux Virtual Server)概念详解
linux·运维·lvs
小张同学a.9 小时前
Linux系统管理
linux·运维
阿龙的工作记录9 小时前
深入理解Linux设备驱动模型
linux·嵌入式硬件·工作记录
代码村新手9 小时前
Linux的基本指令
linux·运维·服务器
hkj880810 小时前
Ubuntu 切换java版本
java·linux·ubuntu
撩得Android一次心动12 小时前
Linux编程笔记3【个人用】
linux·笔记