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,存放所有允许免密登录的客户端公钥。

相关推荐
网络笨猪1 小时前
# Nginx企业级全套配置\+排错手册
运维·nginx
Yupureki1 小时前
《Linux网络编程》8.网络层IP原理
linux·运维·服务器·网络·ip
yyuuuzz1 小时前
aws亚马逊入门常见认知误区
运维·服务器·网络·云计算·github·aws
Je1lyfish2 小时前
CMU15-445 (2025 Fall/2026 Spring) Project#3 - QueryExecution
linux·c语言·开发语言·数据结构·数据库·c++·算法
DeepFlow 零侵扰全栈可观测2 小时前
运动战:AI 时代 IT 运维的决胜之道——DeepFlow 业务全链路可观测性的落地实践
运维·网络·人工智能·arcgis·云计算
林叔聊渠道分销3 小时前
saas产品运营案例 | 联盟营销计划如何帮助企业提高销售额?
运维·产品运营·sass·流量运营·用户运营
志栋智能4 小时前
告别报告堆砌:超自动化巡检的智能分析与洞察
运维·服务器·网络·人工智能·自动化
xyy_4965 小时前
wsl-localhost
linux
linux修理工5 小时前
linux禁用root登录
linux
雅斯驰6 小时前
AES-128加密+滚动码认证:ATA5702W如何防御中继攻击与信号重放
运维·单片机·嵌入式硬件·物联网·自动化