170. 【Linux】ssh-keyscan 处理“离线环境”多节点互信任问题
昨天写了篇 169. 《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
- 在远程服务器(192.168.2.7)上,生成了公钥;
- 在远程服务器(192.168.2.7)上,将生成的公钥拷贝到
~/.ssh
目录下的 authorized_keys 文件中; - 在远程服务器(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 互连时,弹出确认选项,这个也是应该避免的。
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 ] donedone
三、
基本就到这了,不明白的可以互相交流。
编程新手可以找找现成的代码,copy、copy 用用,很多时候都能处理问题,也很快乐。
但学编程久了,肯定不要脱离手敲代码这一步,编程基础的构建需要足够的练习。
说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 170. 【Linux】ssh-keyscan 处理“离线环境”多节点互信任问题
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 170. 【Linux】ssh-keyscan 处理“离线环境”多节点互信任问题