【Linux】ssh-keyscan 解决“离线环境”多节点互信任问题

简介: 【Linux】ssh-keyscan 解决“离线环境”多节点互信任问题

前言


上篇 《Linux 命令行与 shell 脚本编程大全》收官,只顾着自己开心了,今天写篇“离线环境”下基于ssh-keyscan的多个 Linux 服务器节点的互信任解决方案。

做 Linux 运维的同学基本都知道先使用ssh-keygen命令再使用ssh-copy-id命令可以实现两台服务器互相信任,ssh 登录将无需密码,ssh 远程执行脚本也将无需输入密码,省去人工交互的步骤(这步很重要,毕竟加上人工就不算完全的自动化,因为没解放人工劳动力)。

这里“离线环境”指的是不能连入外网安装expect工具,非离线环境下可以安装expect工具在脚本中实现互信任,能解决问题,具体方案可自行百度。但是缺点是安装了新的依赖,而且离线安装有点麻烦。


正文


一、ssh-copy-id 原理


这里先简单说明一下ssh-copy-id的原理,看看它做了什么事。

比如执行,


ssh-copy-id root@192.168.2.7


  1. 在远程服务器(192.168.2.7)上,生成了公钥;
  2. 在远程服务器(192.168.2.7)上,将生成的公钥拷贝到~/.ssh目录下的 authorized_keys 文件中;
  3. 在远程服务器(192.168.2.7)上,将 ~/.ssh目录的权限设置成700,将~/.ssh/authorized_keys文件权限设置成600


二、开始跳过 ssh-copy-id 实现 ssh-copy-id 第 2 不,并且更新 known_hosts 文件。


说明:

known_hosts 文件也是自动化的关键,如果只是重复了ssh-copy-id 的功能,将导致第一次使用 ssh 互连时,弹出确认选项,这个也是应该避免的。

5.webp.jpg

known_hosts 导致的确认选项


测试环境要求:

  • 一台客户端服务器,用于远程执行命令
  • 两台待互相信任的服务器,并且都建立了需要互相信任的用户(脚本的是:test 用户),并且在各自的 ~/.ssh目录下都生成了 id_rsa 密钥。
    直接上脚本,


for node in ${env_nodes}  # 开始迭代, env_nodes 是一个包含多个节点服务器 IP 的可迭代序列
do
    node_index=0  # 各个服务器都设置了 hostname(命名格式是 hostname + 数字),这里的 node_index 是为了构造 hostname
    for node_trust in ${env_nodes}  # 开始内部迭代
    do
        # 去远程服务器(node_trust),将```id_rsa.pub```公钥复制到客户端服务器下
        ssh test@${node_trust} "cat /home/test/.ssh/id_rsa.pub" > /tmp/id_rsa2.pub
        # 将公钥发送到远程服务器(node)
        scp -r /tmp/id_rsa2.pub test@${node}:/tmp/id_rsa2.pub
        # 去远程服务器(node)将公钥追加到 authorized_keys文件
        ssh test@${node} "cat /tmp/id_rsa2.pub >> /home/test/.ssh/authorized_keys"
        # for known_hosts
        # 通过 ssh-keyscan -H 命令对 known_hosts 文件进行散列计算。这将把文件中的所有主机名/ip地址替换为相应的散列值。 
        # 原来文件的内容将会添加一个”.old”后缀后保存。这些散列值只能被 ssh 和 sshd 使用。 
        # 这个选项不会修改已经经过散列的主机名/ip地址,因此可以在部分公钥已经散列过的文件上安全使用。 
        ssh test@${node} "ssh-keyscan -H test${node_index},${node_trust} >> ~/.ssh/known_hosts && ssh-keyscan -H ${node_trust} >> ~/.ssh/known_hosts && ssh-keyscan -H test${node_index} >> ~/.ssh/known_hosts"
        echo "[$( date +'%Y-%m-%d %T' )] ${node} <-> ${node_trust} :ok"
        node_index=$[ ${node_index} + 1 ]     
    done
done


三、


基本就到这了,不明白的可以互相交流。

编程新手可以找找现成的代码,copy、copy 用用,很多时候都能解决问题,也很快乐。

但学编程久了,一定不要脱离手敲代码这一步,编程基础的构建需要足够的练习。


目录
相关文章
|
8月前
|
存储 Linux 开发工具
Linux环境下使用Buildroot配置软件包
使用Buildroot可以大大简化嵌入式Linux系统的开发和维护工作,但它需要对Linux系统和交叉编译有深入的理解。通过上述步骤,可以有效地配置和定制软件包,为特定的嵌入式应用构建高效、稳定的系统。
957 11
|
9月前
|
网络安全 开发工具 git
配置本地环境以管理Git多账户SSH连接的方法
通过以上步駟设置后, 您可以轻松管理多個 Git 账户并且根据不同项目需求切换 SSH 密匙进行版本控制操作。
1190 20
|
10月前
|
存储 监控 Linux
Linux环境锁定关键文件防止误删操作流程。
总结以上内容,在Linux环境下锁定重要文档避免误删涉及到多种技术手段与策略组合运作, 包括但不限于利用chatter指挥官固化文档状态至只读模式、运作ACL精准调整访问权利列表、编排自动化流程简
511 20
|
10月前
|
Linux
Linux环境下的UDEV机制及其与守护进程的关联
实际使用时管理员需要熟悉编写合适udev rules去满足特殊需求;同时也需要注意避免编写过度复杂导致无法预料结果rules.UDEVD虽然稳健但错误配置可能导致无法预料问题因此需谨慎处理相关配置工作.
379 16
|
10月前
|
存储 Linux
Linux环境下删除大文件后磁盘空间未释放问题诊断流程。
以上诊断流程涉及Linux底层机制与高级管理技能结合之处,并需要管理员根据实际环境灵活调整诊断策略与解决方案。
745 8
|
10月前
|
Ubuntu 安全 Linux
Ubuntu 24.10 发行版登场:Linux 6.11 内核、GNOME 47 桌面环境
Ubuntu 24.10 还带来了 GNOME 47,增强了性能和稳定性,并引入了新功能。此版本的 Ubuntu 还默认在采用 Nvidia 显卡的硬件上切换到 Wayland,并在支持的硬件上默认使用开源的 Nvidia 560 内核模块。 另外需要注意的是,Ubuntu 24.10 是稳定版本,但作为非 LTS 版本,仅支持 9 个月。
|
10月前
|
安全 Linux 网络安全
Linux系统初步设置本地Git环境和生成SSH密钥的步骤。
现在您的Linux系统已经配置好了Git环境,并创建并添加了SSH密钥,可以安全地与远端仓库进行交互,无论是克隆、推送还是拉取操作。此过程确保了数据传输的安全并使版本控制流程更为顺畅。使用Git时应考虑定期更新并管理您的凭据,以确保安全性。
1495 0
|
Linux 数据安全/隐私保护 索引
linux inode索引节点使用率100% 解决+hustoj忘记密码+最新MDK注册方法
linux inode索引节点使用率100% 解决+hustoj忘记密码+最新MDK注册方法
255 1
|
存储 安全 Linux
【看表情包学Linux】磁盘基础知识 | CHS 寻址 | 逻辑扇区 LBA | 索引节点 inode | 伪删除 inode bitmap 1→0
【看表情包学Linux】磁盘基础知识 | CHS 寻址 | 逻辑扇区 LBA | 索引节点 inode | 伪删除 inode bitmap 1→0
639 0