Linux SSH免密登录配置(双向免密)

一、环境说明

本次实验基于两台 Linux 服务器,实现双向 SSH 免密互通,环境信息如下:

主机名 IP 地址 子网
node1 172.25.254.141 /24
node2 172.25.254.143 /24

最终实现效果:

  1. node1 无需密码直接 SSH 连接 node2

  2. node2 无需密码直接 SSH 连接 node1

二、前置条件

  1. 两台服务器网络三层互通,可正常 Ping 通;

  2. 服务器防火墙已放行 SSH 服务(22 端口),无端口拦截;

  3. 两台节点 sshd 服务正常运行;

  4. 知晓对方节点 root 管理员密码(首次下发密钥需验证);

  5. 主机名与 IP 解析正常,支持使用主机名直接连接。

三、免密登录核心原理

SSH 免密登录基于非对称密钥认证实现,核心分为私钥、公钥两组密钥:

  1. 本地通过 ssh-keygen 生成 私钥 + 公钥 密钥对;

  2. 私钥:留存于本地服务器,相当于「身份钥匙」,严禁泄露;

  3. 公钥:分发至目标服务器,相当于「身份锁孔」,可安全分发;

  4. 目标服务器将客户端公钥写入授权文件 /root/.ssh/authorized_keys

  5. 后续建立 SSH 连接时,本地自动使用私钥签名,目标端通过公钥校验;

  6. 密钥配对验证通过后,无需输入账号密码,直接完成登录。

四、单向免密配置:node1 → node2

1、客户端生成SSH密钥对

在node1节点执行密钥生成命令:

复制代码
ssh-keygen -t rsa -b 4096

命令参数解析:

部分 含义
ssh-keygen SSH密钥生成工具
-t rsa 生成RSA类型的密钥(最常用)
-b 4096 设定密钥长度4096位(越长越安全)

交互过程详解(全程回车):

复制代码
Enter file in which to save the key (/root/.ssh/id_rsa):
  • 默认密钥存储路径,直接回车,使用默认目录:/root/.ssh/

    Enter passphrase (empty for no passphrase):

  • 私钥无需设置密码,直接回车(设置密码则无法纯免密登录);

    Enter same passphrase again:

  • 二次确认密码,继续回车,完成密钥创建。

密钥文件说明:

文件类型 文件路径 核心作用 安全等级
私钥 /root/.ssh/id_rsa 本地身份凭证,用于加密签名 极高,禁止外泄
公钥 /root/.ssh/id_rsa.pub 对外分发,服务端用于身份校验 可公开,无安全风险

输出解释:

复制代码
Your identification has been saved in /root/.ssh/id_rsa

私钥文件生成完成

复制代码
Your public key has been saved in /root/.ssh/id_rsa.pub

公钥文件生成完成

复制代码
The key fingerprint is:
SHA256:foEKb8FYbVx74w7qGa0HmMyIczZy+RsE89PzOXcFHQA root@node1
  • 指纹:密钥的唯一标识(像身份证号)

  • 用于验证密钥是否被篡改

    The key's randomart image is:
    +---[RSA 4096]----+
    | .E.... |
    | o . . ..|
    | o . + . o . .|
    | B o . o . . |
    | .o=oS o . .|
    | + B+==.= = . |
    | * o= +.
    o . |
    | ..o =.o . |
    | ..+. |
    +----[SHA256]-----+

  • 随机艺术图:密钥的可视化表示,可忽略

2、推送本地公钥至目标节点

在 node1 执行公钥分发命令,将本地公钥写入 node2 授权文件:

复制代码
ssh-copy-id root@node2

命令执行逻辑

  1. 读取本地公钥文件:/root/.ssh/id_rsa.pub

  2. 通过账号密码临时 SSH 连接目标节点 node2;

  3. 自动创建 .ssh 隐藏目录(目录不存在时);

  4. 将本地公钥内容追加至目标端授权文件 authorized_keys

  5. 自动配置目录与文件权限,保障 SSH 安全策略校验。

交互操作

  1. 首次连接输入 yes 确认主机指纹信任;

  2. 输入 node2 节点 root 密码,完成密钥下发;

  3. 输出 Number of key(s) added: 1 即为公钥推送成功。

在目标节点node2上发生了什么:

node2上的文件变化:

1. 创建了目录(如果不存在)

/root/.ssh/

2. 创建或修改了授权文件

/root/.ssh/authorized_keys

3. 文件内容类似:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQD... root@node1

3、测试免密登录

连接流程

  1. node1 调用本地私钥 id_rsa 生成身份签名;

  2. 签名信息发送至 node2 服务端;

  3. node2 读取 authorized_keys 内的公钥进行算法校验;

  4. 校验匹配无误,直接放行,无需手动输入密码。

若直接进入 node2 命令行界面,无密码输入环节,代表单向免密配置成功。

五、反向免密配置:node2 → node1

如需实现双向免密互通 ,在 node2 节点重复上述全套操作即可:

1、生成密钥对

复制代码
ssh-keygen -t rsa -b 4096

全程三次回车,生成 node2 本地密钥;

2、推送公钥至 node1

复制代码
ssh-copy-id root@node1

输入 node1 的 root 密码,完成公钥授权;

3、反向连接测试

复制代码
ssh root@node1

无需输入密码,直接登录即为配置生效。

现在的状态:

方向 是否免密 说明
node1 → node2 node1的公钥在node2的authorized_keys里
node2 → node1 node2的公钥在node1的authorized_keys里

六、双向验证:

在node1上测试:

复制代码
ssh root@node2 
# 应该直接输出:node2

在node2上测试:

复制代码
ssh root@node1 
# 应该直接输出:node1

两台节点执行远程命令无卡顿、无密码输入,说明双向 SSH 免密登录完全生效。

七、核心关键文件总结

  1. 密钥存储目录:/root/.ssh/(所有 SSH 密钥、授权文件统一存放);

  2. 本地私钥文件:id_rsa,核心机密,权限严格管控;

  3. 本地公钥文件:id_rsa.pub,对外授权文件;

  4. 远程授权文件:authorized_keys,存放所有允许免密登录的客户端公钥。

相关推荐
NineData2 小时前
NineData 5.0 产品发布和生态伙伴大会,圆满举办!
运维·数据库·人工智能
薛定猫AI2 小时前
【技术干货】AI Agent 自动化业务流程实战:从零构建智能营销系统
运维·人工智能·自动化
香蕉鼠片2 小时前
Docker
运维·docker·容器
环流_2 小时前
【多线程初识】
linux·运维·服务器
CAAS_IFR_zp2 小时前
vConTACT3: 机器学习实现可扩展和系统的病毒层级分类
linux·运维·服务器
一个人旅程~2 小时前
Linux Mint(Ubuntu)如何在没有网卡驱动情况下利用手机上网安装旧电脑网卡驱动程序指导书
linux·windows·经验分享·电脑
Lugas Luo3 小时前
DVR 存储工具深度分析报告 (测试与产品视角)
linux·嵌入式硬件·测试工具
杨云龙UP3 小时前
ODA-Oracle实践记录:通过Navicat导出导入表CSV文件并清理重复数据,处理OA待办延迟刷新问题_20260416
linux·运维·服务器·数据库·sql·mysql·oracle
Oliver_LaVine3 小时前
java项目启动报错:CreateProcess error=206, 文件名或扩展名太长
java·linux·jenkins