如何在Linux系统中开启SSH密钥登录认证功能?

在Linux系统中,开启SSH密钥登陆能够显著提升服务器安全性,相比传统密码登陆,密钥认证基于非对称加密,有效避免暴力破解风险,同时实现免密快速登陆,以下是详细的配置步骤,涵盖本地密钥生成、服务器端配置及安全加固全流程。

linux 如何开启ssh密钥登陆

本地客户端生成SSH密钥对

SSH密钥对包含公钥(用于上传至服务器)和私钥(需妥善保存在客户端),以Linux/macOS客户端为例,使用ssh-keygen命令生成密钥:

  1. 执行密钥生成命令
    打开终端,运行以下命令(推荐使用Ed25519算法,安全性高于传统RSA):

    ssh-keygen -t ed25519 -C "your_email@example.com"

    若需兼容旧系统,可使用RSA算法(2048位以上):

    ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
  2. 设置密钥存储路径和密码
    命令执行后,会提示以下信息:

    • Enter file in which to save the key:直接按回车,默认保存到~/.ssh/id_ed25519(私钥)和~/.ssh/id_ed25519.pub(公钥);
    • Enter passphrase:设置私钥密码(建议设置,防止私钥泄露被滥用),若无需密码可留空(不推荐)。

    完成后,~/.ssh/目录下会生成两个文件:

    • id_ed25519:私钥,绝不能泄露或上传至服务器
    • id_ed25519.pub:公钥,需上传至服务器。

将公钥上传至Linux服务器

使用ssh-copy-id命令(推荐)

客户端已安装SSH工具时,此命令可自动将公钥追加至服务器~/.ssh/authorized_keys文件:

ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server_ip

执行后输入服务器用户密码,即可完成上传。

手动上传公钥

ssh-copy-id不可用(如Windows客户端),可通过以下步骤操作:

linux 如何开启ssh密钥登陆

  1. 在客户端查看公钥内容
    cat ~/.ssh/id_ed25519.pub
  2. 在服务器端创建SSH目录并授权
    mkdir -p ~/.ssh
    chmod 700 ~/.ssh
  3. 追加至authorized_keys文件
    echo "客户端公钥内容" >> ~/.ssh/authorized_keys
  4. 设置文件权限
    chmod 600 ~/.ssh/authorized_keys

服务器端SSH服务配置

编辑SSH配置文件

使用文本编辑器(如vinano)打开SSH主配置文件:

sudo vi /etc/ssh/sshd_config

关键配置项修改

确保以下配置项正确设置(可结合下表调整):

配置项 默认值 建议值 说明
PubkeyAuthentication yes yes 开启密钥认证(必须启用)
PasswordAuthentication yes no 禁用密码认证(建议测试成功后再修改,避免无法远程访问)
PermitRootLogin prohibit-password no 禁止root用户直接通过SSH登陆(提升安全性)
AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys 指定公钥存储路径(默认无需修改)
Port 22 自定义端口 修改SSH端口(避免默认端口被扫描,如2222)

注意事项

  • 修改PermitRootLogin时,若需root权限,建议通过普通用户sudo操作,而非直接root登陆;
  • 若修改Port,需确保防火墙开放新端口(如sudo ufw allow 2222)。

保存并退出配置文件

vi中按Esc输入wq保存。

设置目录和文件权限(关键步骤)

SSH服务对权限敏感,若权限不当,会导致密钥认证失败,需确保以下权限设置:

# 设置SSH目录权限(仅用户可读写执行)
chmod 700 ~/.ssh
# 设置authorized_keys文件权限(仅用户可读写)
chmod 600 ~/.ssh/authorized_keys

常见问题:若权限错误,服务器日志(/var/log/auth.log/var/log/secure)会提示“Permission denied”或“Bad owner or permissions”。

重启SSH服务使配置生效

根据系统类型执行对应命令:

  • Systemd系统(Ubuntu 16.04+/CentOS 7+)
    sudo systemctl restart sshd
  • Upstart系统(Ubuntu 14.04等)
    sudo service ssh restart

测试密钥登陆

  1. 关闭当前终端窗口,避免残留会话影响;
  2. 重新连接服务器:
    ssh user@server_ip

    若设置私钥密码,需输入密码;否则直接进入服务器,表示密钥认证成功。

    linux 如何开启ssh密钥登陆

禁用密码登陆(可选但推荐)

测试通过后,为提升安全性,可彻底禁用密码登陆:

  1. 再次编辑/etc/ssh/sshd_config,将PasswordAuthentication修改为no
  2. 重启SSH服务:
    sudo systemctl restart sshd

    警告:禁用密码前,务必确认密钥登陆正常,否则可能导致无法远程访问服务器(需通过控制台恢复)。

FAQs

Q1:忘记SSH私钥的passphrase怎么办?
A:私钥的passphrase用于加密私钥文件,若忘记无法直接破解,建议:

  • 若有私钥备份(如通过ssh-keygen -p修改密码前的备份),尝试恢复;
  • 若无备份,需重新生成密钥对,并重新上传公钥至服务器;
  • 为避免遗忘,可将passphrase保存在安全的位置(如密码管理器)。

Q2:无法使用密钥登陆,提示“Permission denied (publickey,password)”如何解决?
A:常见原因及排查步骤:

  1. 检查公钥是否正确上传:在服务器端执行cat ~/.ssh/authorized_keys,确认客户端公钥内容存在;
  2. 检查权限设置:确保~/.ssh目录权限为700,authorized_keys文件权限为600;
  3. 检查SSH配置:确认/etc/ssh/sshd_configPubkeyAuthenticationyes
  4. 查看服务器日志:通过grep sshd /var/log/auth.log(Ubuntu)或grep sshd /var/log/secure(CentOS)定位错误信息(如权限错误、配置语法错误等)。

通过以上步骤,即可完成Linux系统SSH密钥登陆的配置,密钥认证不仅更安全,还能简化登陆流程,适合需要频繁远程服务器的场景,配置时务必注意权限和备份,避免因操作失误导致无法访问服务器。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/21307.html

(0)
酷番叔酷番叔
上一篇 2025年9月8日 07:19
下一篇 2025年9月8日 07:30

相关推荐

  • Ubuntu还是Debian升级最安全?

    准备工作:安装依赖确保系统已安装编译工具和DBus依赖库:sudo apt install build-essential git autoconf automake libtool \ libexpat1-dev libsystemd-dev libglib2.0-dev# Fedora/CentOS/RHE……

    2025年7月25日
    3900
  • 如何添加一行将域名指向本地或服务器IP?

    在Linux系统中绑定域名是将域名指向服务器IP地址的关键步骤,确保用户通过域名访问网站,以下是详细操作指南,涵盖主流Web服务器配置和注意事项:绑定域名前的准备工作域名与DNS解析在域名注册商(如阿里云、GoDaddy)后台添加 A记录,将域名指向服务器公网IP(example.com → 192.0.2.1……

    2025年7月7日
    5100
  • linux如何启动界面

    Linux系统中,通常可通过图形界面登录管理器(如GDM、LightDM等)或命令

    2025年8月18日
    3400
  • 如何高效提取Linux文件?

    常见压缩文件提取.tar.gz 或 .tgz 文件命令: tar -xzvf filename.tar.gz参数说明:-x:解压-z:处理gzip压缩-v:显示过程(可选)-f:指定文件名示例:解压到指定目录: tar -xzvf archive.tar.gz -C /target/directory.tar……

    2025年8月7日
    3900
  • Linux如何查询进程号?命令与操作步骤详解

    在Linux系统中,进程号(PID,Process ID)是每个进程的唯一标识符,用于系统管理、进程监控和资源调度,无论是排查系统问题、终止异常进程,还是优化性能,准确查询进程号都是基础操作,Linux提供了多种命令来查询进程号,不同命令适用于不同场景,本文将详细介绍这些方法及其使用技巧,基础命令:ps——静态……

    2025年9月16日
    2500

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信