如何在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配置文件

使用文本编辑器(如vi或nano)打开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_config中PubkeyAuthentication为yes;
  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

相关推荐

  • linuxsql乱码如何设置

    nux中SQL乱码,可检查数据库字符集设置、客户端连接字符集

    2025年8月17日
    21400
  • linux如何遍历进程

    Linux 中,可以使用 ps 命令结合循环或管道来遍历进程,例如使用

    2025年8月10日
    22000
  • Linux源码阅读如何入手?关键方法与避坑指南

    阅读Linux源码是深入理解操作系统原理、提升系统编程能力的有效途径,但内核代码庞大复杂(仅主线代码就超千万行),需遵循科学方法循序渐进,以下从准备工作、阅读顺序、工具使用、调试技巧等方面展开说明,帮助高效掌握内核源码阅读方法,阅读前的准备工作夯实基础知识Linux内核涉及操作系统、计算机体系结构、C语言等多领……

    2025年9月30日
    29200
  • Linux系统挂起后如何正确唤醒?

    Linux挂起(Suspend)是操作系统将当前运行状态保存到内存或磁盘,进入低功耗模式的技术,常用于便携设备或短暂离开场景以节省能源,唤醒则是从低功耗状态恢复到运行状态的过程,涉及硬件检测、内核恢复和用户空间服务重启等多个环节,本文将详细说明Linux挂起的状态类型、唤醒流程、具体操作方法及常见问题排查,Li……

    2025年8月27日
    23500
  • Linux如何修改文件与文件夹的权限?

    Linux文件和文件夹权限是系统安全的核心机制,决定了不同用户对资源的访问能力,理解权限的表示与修改是Linux管理的基础,Linux权限分为读(r)、写(w)、执行(x)三类,分别对应查看内容、修改内容、进入目录或执行文件的能力,权限对象包括文件所有者(u)、所属组(g)、其他用户(o),通过“-rwxr-x……

    2025年8月28日
    30100

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信