如何在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)
酷番叔酷番叔
上一篇 2天前
下一篇 2天前

相关推荐

  • 如何攻克Linux无线网卡驱动开发?

    核心前提条件硬件基础获取无线网卡的芯片型号(如lspci/lsusb)、数据手册(Datasheet)和编程参考(Programming Reference),确认接口类型:PCIe、USB、SDIO 或 SPI,开发环境Linux内核源码(与目标内核版本一致),安装build-essential、libelf……

    2025年7月15日
    3800
  • uname m命令查看什么?

    在Linux系统中,确定操作系统是32位还是64位对软件兼容性、硬件支持和性能优化至关重要,以下是几种简单可靠的方法,适用于大多数Linux发行版(如Ubuntu、CentOS、Debian等),所有操作均需在终端中执行,步骤:打开终端(快捷键 Ctrl+Alt+T 或通过应用菜单搜索“Terminal”),输……

    2025年7月12日
    3200
  • 烧录前准备,你漏了啥?当心烧录失败!

    在ARM Linux设备上烧录IMG镜像文件是系统部署、恢复或设备刷新的常见操作,以下为详细步骤及注意事项,适用于树莓派、Orange Pi、NanoPi等主流ARM开发板及嵌入式设备,遵循E-A-T原则(专业性、权威性、可信度),确保内容可靠,必备工具硬件:ARM Linux设备(如树莓派)读卡器(若烧录到S……

    2025年7月13日
    3300
  • Linux高效抓包,如何安全定位网络故障?

    核心工具与安装tcpdump(命令行首选)安装Debian/Ubuntu:sudo apt install tcpdumpCentOS/RHEL:sudo yum install tcpdump基础命令 tcpdump -i eth0 # 监听eth0网卡tcpdump port 80 # 抓取80端口流量tc……

    2025年7月21日
    2800
  • 如何快速提升网站流量?

    Linux 以其稳定性著称,但极端操作仍可导致系统崩溃,本文仅用于技术研究,帮助用户理解系统脆弱点并避免生产环境事故,请勿在关键设备中尝试以下操作,内核级操作:直接触发系统崩溃强制写入只读内存echo c > /proc/sysrq-trigger # 触发内核崩溃(需启用SysRq)sudo dd if……

    2025年6月30日
    3300

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信