openssh rpm包_100台CentOS7要升级OpenSSH怎么办?

背景

现在有 100 台 Centos7 需要升级 OpenSSH 到 8.3,怎么办呢?一台台的操作显然不符合我摸鱼的风格,既然每台操作都一样,Ansible Roles 就有用武之地了。

正常升级流程

首先 rpmbuild 打出 OpenSSH 8.3 的 RPM 包,rpm -Uvh 升级,修改 /etc/pam.d/sshd 文件,重启 sshd 服务,升级完成。

yum install rpm-build zlib-devel openssl-devel gcc perl-devel pam-devel unzip -y
mkdir -p /root/rpmbuild/{SOURCES,SPECS}
cd /root/rpmbuild/SOURCES
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-8.3p1.tar.gz
wget https://src.fedoraproject.org/repo/pkgs/openssh/x11-ssh-askpass-1.2.4.1.tar.gz/8f2e41f3f7eaa8543a2440454637f3c3/x11-ssh-askpass-1.2.4.1.tar.gz
tar zxvf openssh-8.3p1.tar.gz openssh-8.3p1/contrib/redhat/openssh.spec
mv openssh-8.3p1/contrib/redhat/openssh.spec ../SPECS/
chown sshd:sshd /root/rpmbuild/SPECS/openssh.spec
cp /root/rpmbuild/SPECS/openssh.spec /root/rpmbuild/SPECS/openssh.spec_def
sed -i -e "s/%global no_gnome_askpass 0/%global no_gnome_askpass 1/g" /root/rpmbuild/SPECS/openssh.spec
sed -i -e "s/%global no_x11_askpass 0/%global no_x11_askpass 1/g" /root/rpmbuild/SPECS/openssh.spec
cd /root/rpmbuild/SPECS/
rpmbuild -ba openssh.spec

第一个报错: openssl-devel < 1.1 被 openssh-8.3p1-1.el7.x86_64 需要

构建依赖失败:openssl-devel < 1.1 被 openssh-8.3p1-1.el7.x86_64 需要 解决方法:

[root@localhost SPECS]# vim openssh.spec 注释掉 BuildRequires: openssl-devel < 1.1 这一行

第二个报错:RPM build errors:

Installed (but unpackaged) file(s) found:

RPM build errors:
 Installed (but unpackaged) file(s) found:
 /usr/libexec/openssh/ssh-sk-helper
 /usr/share/man/man8/ssh-sk-helper.8.gz

解决方法:

vi /usr/lib/rpm/macros

#%__check_files %{_rpmconfigdir}/check-files %{buildroot}
注释改行

打包成功

c7e4f0f594622bd0bee27b09a2df8574.png
img

升级

# 升级
rpm -Uvh *.rpm
# 修改权限
cd /etc/ssh/
chmod 400 ssh_host_ecdsa_key ssh_host_ed25519_key ssh_host_rsa_key
# 允许 root登录
echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
# 不修改这个文件,会出现密码是对的,却无法登陆。
cat </etc/pam.d/sshd#%PAM-1.0
auth       required     pam_sepermit.so
auth       include      password-auth
account    required     pam_nologin.so
account    include      password-auth
password   include      password-auth## pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    required     pam_loginuid.so## pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open env_params
session    optional     pam_keyinit.so force revoke
session    include      password-auth
EOF# 重启服务
systemctl restart sshd
d007849df811d7c1d95b5959e0e128d6.png
img

Ansible Roles 简介

当我们刚开始学习运用 playbook 时,可能会把 playbook 写成一个很大的文件,到后来可能你会希望这些文件是可以方便去重用的,所以需要重新去组织这些文件。Roles 意为角色,主要用于封装 playbook 实现复用性。在 ansible 中,roles 通过文件的组织结构来展现。

对于一个 role,它的文件组织结构如下图所示。

[root@iZ88n11npysZ ansible]# ls openssh/*
openssh/default:

openssh/files:
openssh8.zip  sshd

openssh/tasks:
main.yaml

openssh/templates:

openssh/vars:

首先需要有一个 roles 目录。同时,在 roles 目录所在目录中,还要有一个 playbook 文件,此处为main.yaml,main.yaml 文件是 ansible-playbook 需要执行的文件,在此文件中定义了角色,当执行到角色时,将会到 roles中对应的角色目录中寻找相关文件。

roles 目录中的子目录是即是各个 role。例如,此处只有一个名为 openssh 的 role,在 role 目录中,有几个固定名称的目录(如果没有则忽略)。在这些目录中,还要有一些固定名称的文件,除了固定名称的文件,其他的文件可以随意命名。以下是各个目录的含义:

  • tasks 目录:存放 task 列表。若 role 要生效,此目录必须要有一个主 task 文件 main.yml,在 main.yml 中可以使用 include 包含同目录(即 tasks )中的其他文件。
  • handlers 目录:存放 handlers 的目录,若要生效,则文件必须名为 main.yml 文件。
  • files 目录:在 task 中执行 copy 或 script 模块时,如果使用的是相对路径,则会到此目录中寻找对应的文件。
  • templates 目录:在 task 中执行 template 模块时,如果使用的是相对路径,则会到此目录中寻找对应的模块文件。
  • vars 目录:定义专属于该 role 的变量,如果要有var文件,则必须为 main.ym l文件。
  • defaults 目录:定义角色默认变量,角色默认变量的优先级最低,会被任意其他层次的同名变量覆盖。如果要有 var 文件,则必须为 main.yml文件。
  • meta 目录:用于定义角色依赖,如果要有角色依赖关系,则文件必须为 main.yml。

看到这些估计你是懵的,下面看例子就明白了。

使用 Ansible Roles 批量升级 OpenSSH

这里演示的是使用 Ansible Roles 对 100 台 CentOS 7 批量升级 OpenSSH 到 8.3 版本。这是最初级的 Roles示例。

首先是文件结构。

[root@iZ88n11npysZ ansible]# ls openssh/*
openssh/default:

openssh/files:
openssh8.zip  sshd

openssh/tasks:
main.yaml

openssh/templates:

openssh/vars:

入口文件为 tasks/main.yaml,看下内容

[root@iZ88n11npysZ openssh]# cat tasks/main.yaml 
---



- name: Copy ssh to agent.
  unarchive:
    src: openssh8.zip
    dest: /tmp

- name: Copy ssh file to agent.
  copy:
    src: sshd
    dest: /etc/pam.d/sshd
    backup: yes



- name: Install zabbix-agent
  shell: |
    cd /tmp && rpm -Uvh /tmp/openssh*.rpm
    cd /etc/ssh/ 
    chmod 400 ssh_host_ecdsa_key ssh_host_ed25519_key ssh_host_rsa_key
    echo "PermitRootLogin no" >> /etc/ssh/sshd_config
- name: Restart zabbix-agent
  systemd:
    state: restarted
    name: sshd

放在 files 目录下 openssh8.zip 是打包出来OpenSSH 8.3 的 rpm 包,再压缩为 zip 包。

sshd 是要修改的 /etc/pam.d/sshd  文件

所以这个 main.yaml 的意思就是把 openssh8.zip 解压到目标主机 /tmp 目录下,要修改的文件复制到目标主机目录下,然后执行升级,最后重启 sshd 服务。

要升级所有机器的时候就在最外层的 main.yaml 写上主机和 roles 执行即可,如图

a2c664fc0fc8d063b339ef13217fe5c5.png

亲测十几秒即可升级好一台。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/334407.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 从一个容器获取对象,如何从 Spring IoC 容器中获取对象?

前面几篇文章主要分析了 Spring IoC 容器如何初始化&#xff0c;以及解析和注册我们定义的 bean 信息。其中&#xff0c;「Spring 中的 IoC 容器」对 Spring 中的容器做了一个概述&#xff0c;「Spring IoC 容器初始化」和「Spring IoC 容器初始化(2)」分析了 Spring 如何初始化…

thymeleaf与jsp_PagingAndSortingRepository –如何与Thymeleaf一起使用

thymeleaf与jsp在本教程中&#xff0c;我将演示如何通过分页显示Thymeleaf中的企业客户列表。 1 –项目结构 我们有一个正常的Maven项目结构。 2 –项目依赖性 除了正常的Spring依赖关系之外&#xff0c;我们还添加Thymeleaf和hsqldb&#xff0c;因为我们使用的是嵌入式数据…

MySQL 批量生成 SQL 脚本语句解决实际的业务需求/如何拼接字符串/拼接字符串的 SQL 语句

文章目录实际需求分析思路写拼接 SQL 脚本的脚本语句执行得到脚本语句保存成 SQL 脚本文件实际需求 有些行政区域的字段 area_fullname 是空的&#xff0c;如何补全呢&#xff1f;如下所示&#xff1a; 分析思路 &#xff08;一&#xff09;如何取到每个区域的上级名称和上…

php的变量都放在哪里,php变量一般放在哪个位置

php变量一般放在哪个位置php定义变量的要求格式&#xff0c;是非常宽松的&#xff0c;至于在哪里定义变量就需要看你的需求&#xff0c;可以在构造函数&#xff0c;也可以在你定义的方法中定义局部变量&#xff0c;也可以在构造函数外面定义全局变量。// 局部变量 函数内部func…

oauth2令牌刷新_了解OAuth2令牌认证

oauth2令牌刷新1.简介 在本教程中&#xff0c;我们将了解OAuth2令牌身份验证 &#xff0c;以便只有经过身份验证的用户和应用程序才能获得有效的访问令牌&#xff0c;该令牌随后可用于访问服务器上的授权API&#xff08;在OAuth术语中仅是受保护的资源&#xff09;。 使用基于…

jsap支付_Java命令行界面(第20部分):JSAP

jsap支付JSAP &#xff08; Java Simple Argument Parser &#xff09;2.1是本系列文章的第二十篇&#xff0c;重点是处理Java的命令行参数。 JSAP页面描述了该库存在的原因&#xff1a;“我在Internet上找到了多个解析器&#xff0c;所有解析器都处理了开关&#xff0c;但是没…

python语句大全input_input提示文字 Python基础输入函数,if-else语句,if-elif

input&#xff08;&#xff09;函数 此功能用于获取用户输入。 &#xff08;调用1&#xff09;input后&#xff0c;程序将立即暂停并等待用户输入。在用户完成内容输入后&#xff0c;单击Enter&#xff0c;程序将继续向下执行。 例如&#xff1a; input() &#xff08;2&#x…

ftp限流java,FTP流量限制的方法

一般来说&#xff0c;下载都是通过FTP来实现的&#xff0c;这样简单的采用ACLs就可以实现的。不过这样存在一个问题&#xff0c;就是原来正常的网络访问也给禁止了&#xff0c;无法继续工作&#xff0c;另外&#xff0c;还有大量的DOWNLOAD不通过FTP&#xff0c;而是借助HTTP协…

argparser_Java命令行界面(第22部分):argparser

argparserJohn Lloyd的argparser是本系列的第二十二篇有关基于Java的命令行参数解析的文章中介绍的库。 该库的主页除了提供单个源代码示例外&#xff0c;还提供了指向基于Javadoc的API文档 &#xff0c;JAR文件&#xff0c;ZIP文件和TAR文件的链接。 本帖子中使用的示例与本系…

判断 小程序 是否 滚动到页面底部 scrolltolower_微信小程序长列表性能优化——recycle-view

背景&#xff1a;第七次人口普查项目使用是微信小程序原生框架&#xff0c;组件是根据用户需求由项目组前端组组长封装完成的。采集小程序正式登记首页列表页面&#xff0c;根据腾讯老哥在sentry上的监控可以看出&#xff0c;列表页面前端性能比较差&#xff0c;主要表现在一些…

java rop_Java命令行界面(第23部分):Rop

java ropRop库在其主页上被描述为“用Java编写的轻量级命令行选项解析器”。 Rop的“简介”还指出&#xff1a;“ Rop的设计目的是最小化同时方便&#xff0c;并涵盖了大多数常见的命令行解析用例。” 这篇文章是本系列中有关解析Java命令行参数的系列文章中的第23部分&#xf…

java 接口 私有_Java 9:好的,坏的和私有的接口方法

java 接口 私有Java 9 是在几周前发布的。 查看发行说明 &#xff0c;其中包含许多有趣的功能。 不过&#xff0c;我觉得并非一切都是不如Oracle和Java行家似乎图片吧 。 我看到了Java世界中的三个趋势&#xff0c;分别是好&#xff0c;坏和丑陋。 让我们从好的开始。 Birdman…

python卸载module_Python学习笔记

拖了一整年终于开始学习Python编程。为了逼自己快速上路&#xff0c;强行要求自己本学期的两门课程全部的coding作业用Python完成。 一门机器学习&#xff08;computational Stats&#xff09;&#xff0c;一门Jeff WU 大佬的实验设计与分析&#xff08;DOE&#xff09;。即使R…

mlp神经网络_白天鹅黑天鹅灰天鹅?卷积神经网络帮你搞定识别

全文共3014字&#xff0c;预计学习时长6分钟本文将通过一系列的天鹅图片来解释卷积神经网络&#xff08;CNN&#xff09;的概念&#xff0c;并使用CNN在常规多层感知器神经网络上处理图像。图像分析假设我们要创建一个能够识别图像中的天鹅的神经网络模型。天鹅具有某些特征&am…

java登录界面命令_Java命令行界面(第26部分):CmdOption

java登录界面命令由于Tweet&#xff0c;我了解了本系列中第26个基于Java的功能强大的库&#xff0c;该库用于解析命令行参数 。 CmdOption在其GitHub主页上被描述为“一个通过注释配置的&#xff0c;用于Java 5应用程序的简单注释驱动命令行解析器工具包。” 该项目的副标题是“…

getopt java_Java命令行界面(第28部分):getopt4j

getopt javagetopt4j的页面将其描述为“一个根据GNU样式解析命令行参数的库。” 然后&#xff0c; 页面介绍getopt4j &#xff1a;“getopt4j库旨在以与glibc &#xff08;GNU C运行时库&#xff09;中的C getopt&#xff08;&#xff09;函数相同的方式解析命令行选项。 与原始…

springboot redis token_Spring Boot + Redis + 注解 + 拦截器来实现接口幂等性校验

优质文章&#xff0c;及时送达作者 | wangzaiplus链接 | www.jianshu.com/p/6189275403ed一、概念幂等性, 通俗的说就是一个接口, 多次发起同一个请求, 必须保证操作只能执行一次比如:订单接口, 不能多次创建订单支付接口, 重复支付同一笔订单只能扣一次钱支付宝回调接口, 可能…

java 示例_功能Java示例 第2部分–讲故事

java 示例这是称为“ Functional Java by Example”的系列文章的第2部分。 我在本系列的每个部分中开发的示例是某种“提要处理程序”&#xff0c;用于处理文档。 在上一部分中&#xff0c;我从一些原始代码开始&#xff0c;并应用了一些重构来描述“什么”而不是“如何”。 …

python range函数范围_Python range函数

Python range函数教程 range函数详解 语法 range(start, stop[, step]) 参数 参数 描述 start 计数从 start 开始。默认是从 0 开始。 stop 计数到 stop 结束&#xff0c;但不包括 stop。 step 步长&#xff0c;默认为1&#xff0c;可以支持负数。 返回值 返回生成的序列。 案例…

openpyxl删除添加excel列_Python | 如何使用Python操作Excel(二)

0 前言在阅读本文之前&#xff0c;请确保您已满足或可能满足一下条件&#xff1a;请确保您具备基本的Python编程能力。请确保您会使用Excel。请确保您的电脑已经安装好Python且pip可用。请确保您已经读过前文&#xff1a;如何使用Python操作Excel(一)LogicPanda&#xff0c;公众…