ansible控制主机和受控主机之间免密及提权案例

目录

案例描述

环境准备

案例一--免密远程控制主机

效果展示:

解决方案

 1.添加主机

2.通过ssh-key生成密钥对

3.生成ssh-copy-id

 4.验证

案例二-----免密普通用户提权

 效果展示

解决方案

1.使用普通用户,与案例一   一样,进行发送密钥对和id

keygen

 copy-id

测试

2.在node1用户下的/etc/sudoers/中

 查看:

相关知识:

1.gpasswd

 2.ssh-copy-id

 3.ssh-keygen


案例描述

一、描述:控制主机和受控主机通过root用户以免密验证远程控制受控主机实施对应任务

二、描述: 控制主机和受控主机通过普通用户以免密验证远程控制主机实施特权控制操作

环境准备

我这里一共三台主机,一个控制端,两个受控端

案例一--免密远程控制主机

描述:控制主机和受控主机通过root用户以免密验证远程控制受控主机实施对应任务

 为了确保在ansible执行中,各个主机不会受到这些限制,我们可以提供密钥保存到各个主机上,以实现免密登陆效果。

效果展示:

设置之前效果:

[root@control ~]# ssh root@node1
The authenticity of host 'node1 (192.168.197.153)' can't be established.
ECDSA key fingerprint is SHA256:p1vEMDKw2flRy/TI2CE3STJ451XMUm+Sg7/ztyJMaF4.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'node1,192.168.197.153' (ECDSA) to the list of known hosts.
root@node1's password:
Activate the web console with: systemctl enable --now cockpit.socket

This system is not registered to Red Hat Insights. See https://cloud.redhat.com/
To register this system, run: insights-client --register

Last login: Wed Aug  2 02:55:02 2023 from 192.168.197.1
[root@node1 ~]#

 设置之后效果:

[root@control ~]# ssh node1
Activate the web console with: systemctl enable --now cockpit.socket

This system is not registered to Red Hat Insights. See https://cloud.redhat.com/
To register this system, run: insights-client --register

Last login: Wed Aug  2 05:05:59 2023 from 192.168.197.152

解决方案

 1.添加主机

在/etc/hosts下

192.168.197.153 node1 node1.example.com
192.168.197.154 node3 node1.example.com

2.通过ssh-key生成密钥对

ssh-keygen是一个用于生成SSH密钥对的命令行工具。SSH密钥对由公钥和私钥组成,用于通过SSH协议进行安全的身份验证。

[root@control ~]# ssh-keygen -t RSA
Generating public/private RSA key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
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:6338jg7huU2z/sTmRfgax98A1g/nvbHYyIu5woTOSmY root@control
The key's randomart image is:
+---[RSA 3072]----+
|                 |
|                 |
|                 |
|             . . |
|        S . o + o|
|       . + + o O.|
|     Eo + +.o *.O|
|    +  + + =*B+**|
|     .. . +BBOB+o|
+----[SHA256]-----+

3.生成ssh-copy-id

 ssh-copy-id是一个方便的工具,用于将本地计算机上的公钥复制到远程服务器的授权密钥列表中,以实现无密码的SSH登录。

[root@control ~]# ssh-copy-id  -i node1
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@node1's password:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'node1'"
and check to make sure that only the key(s) you wanted were added.

 4.验证

[root@control ~]# ssh node1
Activate the web console with: systemctl enable --now cockpit.socket

This system is not registered to Red Hat Insights. See https://cloud.redhat.com/
To register this system, run: insights-client --register

Last login: Wed Aug  2 05:10:12 2023 from 192.168.197.152
[root@node1 ~]#

[root@control ~]# ssh node2
Activate the web console with: systemctl enable --now cockpit.socket

This system is not registered to Red Hat Insights. See https://cloud.redhat.com/
To register this system, run: insights-client --register

Last login: Wed Aug  2 05:10:12 2023 from 192.168.197.152
[root@node2 ~]#

 也可以通过ansible的ping模块进行测试

首先在/etcansible/hosts下添加两个主机名称

 测试

[root@control ~]# ansible node1,node2 -m ping -o
node1 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/libexec/platform-python"},"changed": false,"ping": "pong"}
node2 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/libexec/platform-python"},"changed": false,"ping": "pong"}

 

案例二-----免密普通用户提权

描述: 控制主机和受控主机通过普通用户以免密验证远程控制主机实施特权控制操作

 效果展示

没提权之前,是执行不了某些权限的,如需要root权限去添加用户

[redhat@control ~]$ ssh node1 useradd user1
useradd: Permission denied.
useradd: cannot lock /etc/passwd; try again later.

 提权之后:

[redhat@control ~]$ ssh node1  sudo useradd user1
[redhat@control ~]$

解决方案

1.使用普通用户,与案例一   一样,进行发送密钥对和id

keygen

[redhat@control ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/redhat/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/redhat/.ssh/id_rsa.
Your public key has been saved in /home/redhat/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:2JMBtnjN6BCC7cUpqkeZqWgKvSm3DyIhcbd8LdUYiIw redhat@control
The key's randomart image is:
+---[RSA 3072]----+
| o.+.oo..        |
|. E.*+.* +       |
|.o.*+ + * .      |
|.o*o = = o       |
|=+  o = S        |
|*oo  . . .       |
|*..o             |
|+.+.             |
| o.o.            |
+----[SHA256]-----+

 copy-id

 

[redhat@control ~]$ ssh-copy-id  -i node1
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/redhat/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
redhat@node1's password:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'node1'"
and check to make sure that only the key(s) you wanted were added.
 

测试

[redhat@control ~]$ ssh node1 hostname
node1 

 测试添加用户

[redhat@control ~]$ ssh node1 useradd user1
useradd: Permission denied.--------》被拒绝,没有权限
useradd: cannot lock /etc/passwd; try again later.

2.在node1用户下的/etc/sudoers/中

修改:

查看修改是否成功

[root@node1 ~]# cat /etc/sudoers | grep wheel
## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL
%wheel  ALL=(ALL)       NOPASSWD: ALL

 然后给权限

gpasswd 就是将redhat用户添加到whell组中,必须要执行这个,不然是会出错的,redhat用户不能正常使用提权

[root@node1 ~]# gpasswd -a redhat wheel
Adding user redhat to group wheel

 [redhat@control ~]$ ssh node1 sudo useradd user1
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
Creating mailbox file: File exists

有警告,但是可用,可能我添加出错了node2可正常使用

 node2机子一样的设置,只需要给%wheel添加一个NOPASSWD,这个%代表组的意思,就是添加在组里面,这个组都可以访问,不需要密码

[redhat@control ~]$ ssh node2  sudo useradd user1
[redhat@control ~]$

 查看:

有用户

 

 

相关知识:

1.gpasswd

gpasswd -a redhat wheel是一个命令,用于将用户"redhat"添加到"wheel"用户组。

"wheel"用户组通常用于授予系统管理员或特权用户执行敏感操作的权限。通过将用户添加到"wheel"组,可以实现对系统的控制和管理。

请注意,执行此命令需要具有root或sudo特权用户身份。您需要在终端或命令提示符下执行该命令,并提供适当的凭据。

 2.ssh-copy-id

ssh-copy-id是一个方便的工具,用于将本地计算机上的公钥复制到远程服务器的授权密钥列表中,以实现无密码的SSH登录。

要使用ssh-copy-id命令,按照以下步骤进行操作:

  1. 打开终端或命令提示符。
  2. 输入以下命令,并将username替换为您在远程服务器上的用户名,以及hostname替换为远程服务器的主机名或IP地址:
     

    Copy Code

    ssh-copy-id username@hostname 您也可以使用-p选项指定非默认的SSH端口号。例如,如果SSH服务器侦听在2222端口上,则可以使用以下命令:
     

    Copy Code

    ssh-copy-id -p 2222 username@hostname
  3. 按回车键后,它会提示您输入远程服务器的密码(一次性)。
  4. 如果密码验证成功,ssh-copy-id会自动将本地计算机上的公钥追加到远程服务器上的~/.ssh/authorized_keys文件中。
  5. 完成后,您可以尝试使用ssh username@hostname命令登录到远程服务器,此时不再需要输入密码。

请注意,使用ssh-copy-id之前,确保本地计算机已经生成了SSH密钥对,并且具有可用的公钥。如果没有生成密钥对,请先使用ssh-keygen命令生成密钥对。

 3.ssh-keygen

ssh-keygen是一个用于生成SSH密钥对的命令行工具。SSH密钥对由公钥和私钥组成,用于通过SSH协议进行安全的身份验证。

要使用ssh-keygen生成SSH密钥对,请按照以下步骤操作:

  1. 打开终端或命令提示符。
  2. 输入以下命令:
     

    Copy Code

    ssh-keygen
  3. 按回车键以接受默认选项,或根据需要输入自定义选项。
    • 默认情况下,ssh-keygen将在用户主目录下的.ssh文件夹中生成密钥对。
    • 您可以选择为密钥对指定名称和位置,或为其设置密码(提供额外的安全性)。
  4. 在生成密钥对时,可能会提示您输入密码短语(passphrase)。密码短语是对私钥加密的额外保护层,可以为空。
    • 如果设置了密码短语,则在使用私钥进行身份验证时,还需要提供该密码短语。
  5. 当生成密钥对完成后,将在指定的位置生成两个文件:
    • 公钥文件:通常以.pub结尾,包含您的公钥,用于在远程服务器上进行身份验证。
    • 私钥文件:没有特定的文件扩展名,是私人的密钥,必须妥善保管,不要泄露给他人。

请记住,私钥是非常敏感的信息,不应该与他人分享或暴露在不安全的环境中。公钥可以自由地在需要进行身份验证的服务器上进行使用和配置。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【力扣每日一题】2023.8.2 翻转卡片游戏

目录 题目: 示例: 分析: 代码: 题目: 示例: 分析: 这道题不是什么翻转卡片游戏,这就是纯纯的文字游戏,要是能看懂题目那就是非常简单,接下来我就给大家分…

低代码已经发展到什么水平了?

在数字化转型的浪潮下,企业和组织迫切需要更快速、高效的应用开发方式来满足日益复杂的业务需求。而低代码开发作为一种创新的开发方式,正在引领着应用开发的新潮流。低代码开发允许开发者以可视化的方式快速构建应用,减少了繁琐的代码编写&a…

android 如何分析应用的内存(十五)——Visual Studio Code 调试Android应用

android 如何分析应用的内存(十五)——Visual Studio Code 调试Android 应用 在上一篇文章介绍了jdb调试java应用 接下来介绍用UI界面调试java应用,达到同jdb一样的效果。 同样的UI界面有很多选择,如Eclipse,Android …

数论分块学习笔记

准备开始复习莫比乌斯反演,杜教筛这一部分,先复习一下数论分块 0.随便说说 数论分块可以计算如下形式的式子 ∑ i 1 n f ( i ) g ( ⌊ n i ⌋ ) \sum_{i1}^{n}f(i)g(\lfloor\frac{n}{i}\rfloor) ∑i1n​f(i)g(⌊in​⌋)。 利用的原理是 ⌊ n i ⌋ \lf…

GoogLeNet卷积神经网络-笔记

GoogLeNet卷积神经网络-笔记 GoogLeNet是2014年ImageNet比赛的冠军, 它的主要特点是网络不仅有深度, 还在横向上具有“宽度”。 由于图像信息在空间尺寸上的巨大差异, 如何选择合适的卷积核来提取特征就显得比较困难了。 空间分布范围更广的…

采集数据筛选-过滤不要数据或只保留指定数据

采集文章数据,有时候会遇到一些不需要采集的数据,或者只想采集一些特定的数据,可以使用简数采集器的内容过滤功能,对采集的数据进行筛选,只有符合的数据才采集保留。 可以用于过滤掉一些广告、专题、网站首页等无效数…

ESD防静电监控系统在SMT产线中的应用案例

作为电子厂的关键制造环节之一,SMT(表面贴装技术)产线的效率和质量对企业的竞争力至关重要。为了提高生产线的管理效率和保障生产环境的质量,许多电子厂开始采用MES生产管理系统和ESD防静电监控系统的综合解决方案。 在SMT产线中安…

SpringBoot项目增加logback日志文件

一、简介 在开发和调试过程中,日志是一项非常重要的工具。它不仅可以帮助我们快速定位和解决问题,还可以记录和监控系统的运行状态。Spring Boot默认提供了一套简单易用且功能强大的日志框架logback,本文将介绍如何在Spring Boot项目中配置和…

无涯教程-Perl - 循环语句

在某些情况下,您需要多次执行一个代码块。通常,语句是按顺序执行的:函数中的第一个语句首先执行,然后第二个执行,依此类推。 Perl编程语言提供了以下类型的循环来处理循环需求。 Sr.No.Loop Type & 描述1 while loop在给定条…

浅谈大数据软件的功能性分析

在当今时代的潮流中,工作中遇到大数据处理的时候非常多,因此需要一些大数据分析软件帮助人们进行工作。由于这些软件针对的对象不同,因此使用方法也不同,那么为了帮助更多的人了解大数据分析软件,我们就对这些软件的功…

Spring Cloud+Spring Boot+Mybatis+uniapp+前后端分离实现知识付费平台免费搭建 qt

Java版知识付费源码 Spring CloudSpring BootMybatisuniapp前后端分离实现知识付费平台 提供职业教育、企业培训、知识付费系统搭建服务。系统功能包含:录播课、直播课、题库、营销、公司组织架构、员工入职培训等。 提供私有化部署,免费售…

【3维视觉】3D空间常用算法(点到直线距离、面法线、二面角)

3D空间点到直线的距离 3D空间点到直线的距离 3D空间的曲率 三维空间有三个基本元素,点,线,面。那么曲率是如何定义的呢? 点的曲率? 线的曲率? 面的曲率? 法曲率 设曲面上的曲线在某一点处的切…

prometheus+grafana进行服务器资源监控

在性能测试中,服务器资源是值得关注一项内容,目前,市面上已经有很多的服务器资 源监控方法和各种不同的监控工具,方便在各个项目中使用。 但是,在性能测试中,究竟哪些指标值得被关注呢? 监控有…

Git下:Git命令使用-详细解读

今天给大家讲一讲 Git常用命令的使用说明,希望本篇文章对大家有所帮助。 一、Git 安装 Git 的详细安装教程:见上一篇文章《Git上:Git安装教程》: Git上:全网最全最详细的Git安装教程,建议收藏保存 二、…

TDosCommand 组件来执行 JavaScript 脚本(nodejs)

可以在 Delphi 中使用 TDosCommand 组件来执行 JavaScript 脚本。但是,由于 JavaScript 是一种脚本语言,它通常在浏览器中运行,因此您需要使用一种 JavaScript 引擎来执行 JavaScript 脚本。常见的 JavaScript 引擎有 Node.js、Rhino、V8 等等…

面试题学习以及问题

redis redis缓存 缓存穿透 布隆过滤器主要是用于检索一个元素是否在一个集合中。我们当时使用的是 redisson实现的布隆过滤器。 它的底层主要是先去初始化一个比较大数组,里面存放的二进制0或1。在一 开始都是0,当一个key来了之后经过3次hash计算&…

vscode配置c++环境

第一步:安装vscode编辑器 预先安装: vscode(https://code.visualstudio.com/)在vscode中安装 C/C extension for VS Code(在左侧扩展栏中搜索 “C”) 第二步:安装MinGW-w64工具链 MinGW 提供…

超详情的开源知识库管理系统- mm-wiki的安装和使用

背景:最近公司需要一款可以记录公司内部文档信息,一些只是累计等,通过之前的经验积累,立马想到了 mm-wiki,然后就给公司搭建了一套,分享一下安装和使用说明: 当前市场上众多的优秀的文档系统百…

VBA技术资料MF36:VBA_在Excel中排序

【分享成果,随喜正能量】一个人的气质,并不在容颜和身材,而是所经历过的往事,是内在留下的印迹,令人深沉而安谧。所以,优雅是一种阅历的凝聚;淡然是一段人生的沉淀。时间会让一颗灵魂&#xff0…

设置系统编码 Beta

在yolov5环境搭建过程中会遇到如下的编码错误警告: 这时,按住“ctrlc”中止进程,然后设置系统编码: 电脑右键属性打开: 重启之后等安装好了,记得回去把bae键取消。