Linux服务器如何配置多台机器间的SSH主备免密 脚本化实现

大雪君_4844

大雪君_4844

2026-04-15

322人浏览

原创

主备免密需按角色明确主备,主节点以目标用户生成密钥并分发,ssh-keygen必须在主节点执行,ssh-copy-id须显式指定用户和端口,脚本需校验hosts/known_hosts一致性及authorized_keys权限为600。

linux服务器如何配置多台机器间的ssh主备免密 脚本化实现

主备免密不是“配一次就全通”,而是必须按角色明确谁是主、谁是备,并分别在主节点生成密钥、分发到所有备节点;脚本化关键在于避免手敲重复命令,但不能跳过权限和路径校验。

ssh-keygen 必须在主节点以目标用户身份执行

公钥体系是单向信任:只有主节点的私钥能解密它自己发出的请求,所以密钥必须在主节点上生成,且必须用后续要用于登录的用户(如 hadoop、deploy)执行 ssh-keygen -t rsa。若用 root 生成再拷给普通用户,~/.ssh 所属用户和权限会错乱,导致 ssh 拒绝读取私钥。

  • 执行前先确认当前用户和家目录:whoami 和 echo $HOME
  • 强制指定密钥路径,避免默认覆盖已有密钥:ssh-keygen -t rsa -f ~/.ssh/id_rsa_master -N ""
  • 生成后立刻检查权限:ls -ld ~/.ssh ~/.ssh/id_rsa_master,应为 drwx------ 和 -rw-------

ssh-copy-id 分发时必须显式指定用户和端口

ssh-copy-id 默认用当前用户登录远端,且走 22 端口。若备节点用的是非默认用户(如 hadoop@slave1)或非标准 SSH 端口(如 2222),不加参数会失败并静默创建空 authorized_keys,后续登录仍要密码。

Linux installer
Linux installer

先解析安全源,运行本地CLI安装、启动、卸载Linux桌面应用。用户请求时使用。

下载
  • 正确写法示例:ssh-copy-id -i ~/.ssh/id_rsa_master.pub hadoop@slave1
  • 非标端口加 -p 参数:ssh-copy-id -p 2222 -i ~/.ssh/id_rsa_master.pub deploy@backup-server
  • 若提示 No identities found,说明本地没找到公钥文件,检查 -i 路径是否拼错,或公钥是否真被生成(ls ~/.ssh/id_rsa_master.pub)

脚本中必须校验 /etc/hosts 和 known_hosts 一致性

脚本批量执行 ssh-copy-id 前,如果 /etc/hosts 未同步,或目标主机首次连接时 known_hosts 缺失指纹,脚本会卡在交互式确认(Are you sure you want to continue connecting?),导致自动化中断。

  • 提前统一 hosts:用 scp /etc/hosts user@slaveX:/tmp/hosts && ssh user@slaveX "sudo cp /tmp/hosts /etc/hosts"
  • 绕过首次确认(仅限可信内网):ssh-copy-id -o StrictHostKeyChecking=no -i ...
  • 更稳妥做法:先用 ssh -o ConnectTimeout=5 -o BatchMode=yes user@host exit 2>/dev/null 预探测连通性

备节点无需生成密钥,但需确保 authorized_keys 权限为 600

主备模型下,备节点只接受主节点连接,自身不主动发起 SSH 登录,因此不需要生成密钥对。但 authorized_keys 文件权限若不是 600(即 -rw-------),OpenSSH 会直接忽略该文件,即使内容正确也无效。

  • 脚本中加入修复命令:ssh user@slaveX "chmod 600 ~/.ssh/authorized_keys 2>/dev/null || true"
  • 常见陷阱:用 cat id_rsa.pub >> authorized_keys 追加后,文件可能继承 shell 的 umask(如 002),导致权限变成 602,ssh 拒绝加载
  • 验证方式:ssh -o LogLevel=DEBUG3 user@slaveX exit 2>&1 | grep "Offering public key",看到这行才说明公钥被真正识别

最易被忽略的一点:主节点自己的 ~/.ssh/known_hosts 里必须有所有备节点的 host key 记录,否则脚本里后续用 ssh user@slaveX command 执行远程命令时,仍会因 host key 变更或缺失而失败——这不是免密问题,而是信任链不完整。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

linux linux服务器

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

2023.09.22

529

3

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

2024.03.01

1678

6

java break和continue
java break和continue

本专题整合了java break和continue的区别相关内容,阅读专题下面的文章了解更多详细内容。

2025.10.24

707

6

hadoop是什么
hadoop是什么

hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。本专题为大家免费提供hadoop相关的文章、下载和课程。

2023.06.30

811

5

hadoop三大核心组件介绍
hadoop三大核心组件介绍

Hadoop的三大核心组件分别是:Hadoop Distributed File System(HDFS)、MapReduce和Yet Another Resource Negotiator(YARN)。想了解更多hadoop的相关内容,可以阅读本专题下面的文章。

2024.03.13

1665

9

hadoop的核心
hadoop的核心

hadoop的核心由分布式文件系统 (hdfs) 和资源管理框架 (mapreduce) 组成。想了解更多hadoop的相关内容,可以阅读本专题下面的文章。

2024.05.16

1966

8

Java 大数据处理基础(Hadoop 方向)
Java 大数据处理基础(Hadoop 方向)

本专题聚焦 Java 在大数据离线处理场景中的核心应用,系统讲解 Hadoop 生态的基本原理、HDFS 文件系统操作、MapReduce 编程模型、作业优化策略以及常见数据处理流程。通过实际示例(如日志分析、批处理任务),帮助学习者掌握使用 Java 构建高效大数据处理程序的完整方法。

2025.12.08

1229

12

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

3850

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3313

10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习