当前位置: 首页 > news >正文

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结尾,包含您的公钥,用于在远程服务器上进行身份验证。
    • 私钥文件:没有特定的文件扩展名,是私人的密钥,必须妥善保管,不要泄露给他人。

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

相关文章:

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

目录 案例描述 环境准备 案例一--免密远程控制主机 效果展示: 解决方案 1.添加主机 2.通过ssh-key生成密钥对 3.生成ssh-copy-id 4.验证 案例二-----免密普通用户提权 效果展示 解决方案 1.使用普通用户,与案例一 一样,进行发送密钥…...

flink1.17 eventWindow不要配置processTrigger

理论上可以eventtime processtime混用,但是下面代码测试发现bug,输入一条数据会一直输出. flink github无法提bug/问题. apache jira账户新建后竟然flink又需要一个账户,放弃 bug复现操作 idea运行代码后 往source kafka发送一条数据 a,1,1690304400000 可以看到无限输出…...

Python导出SqlServerl数据字典为excel

sql代码 SELECTtableName D.name ,tableIntroduce isnull(F.value, ),sort A.colorder,fieldName A.name,catogary B.name,bytes A.Length,lengths COLUMNPROPERTY(A.id, A.name, PRECISION),scales isnull(COLUMNPROPERTY(A.id, A.name, Scale), 0),isOrNotNull Cas…...

PB:DDE服务器函数

1、GetCommandDDE() 功 能:得到DDE客户应用发送的命令。 语 法:GetCommandDDE ( string ) 参 数:string:string类型的变量,用于保存DDE客户应用发送的命令。 返回值:Integer。函数执行成功时返回1,发生错误时返回-1。如果string参数的值为NULL, GetCommandDDE()…...

awk经典实战、正则表达式

目录 1.筛选给定时间范围内的日志 2.统计独立IP 案列 需求 代码 运行结果 3.根据某字段去重 案例 运行结果 4.正则表达式 1)认识正则 2)匹配字符 3)匹配次数 4)位置锚定:定位出现的位置 5)分组…...

Python脚本-时间盲注

BlindBool_get import requests from optparse import OptionParser import threading#存放变量 DBName "" DBTables [] DBColumns [] DBData {} flag You are in #设置重连次数以及将连接改为短连接 #防止因为HTTP连接数过多导致的MAX retries exceeded with …...

面试总结-Redis篇章(十)——Redis哨兵模式、集群脑裂

Redis哨兵模式、集群脑裂 哨兵模式哨兵的作用服务状态监控 Redis集群(哨兵模式)脑裂解决办法 哨兵模式 为了保证Redis的高可用,Redis提供了哨兵模式 哨兵的作用 服务状态监控 Redis集群(哨兵模式)脑裂 假设由于网络原…...

el-table那些事

el-table那些事 获取el-table所有勾选的行数据 用于记录工作和日常学习遇到的坑,需求。 vue3element-plusts 获取el-table所有勾选的行数据 1、需要先声明一个ref变量,并赋值给el-table 2、通过el-table提供的getSelectionRows()函数获取选中的"行…...

kubernetes(一)

文章目录 1. k8s架构2. k8s集群搭建 1. k8s架构 2. k8s集群搭建...

计算机网络(6) --- https协议

计算机网络(5) --- http协议_哈里沃克的博客-CSDN博客http协议https://blog.csdn.net/m0_63488627/article/details/132089130?spm1001.2014.3001.5501 目录 1.HTTPS的出现 1.HTTPS协议介绍 2.补充概念 1.加密 1.解释 2.原因 3.加密方式 对称加…...

(三)Node.js - 模块化

1. Node.js中的模块化 Node.js中根据模块来源不同,将模块分为了3大类,分别是: 内置模块:内置模块由Node.js官方提供的,例如fs、path、http等自定义模块:用户创建的每个.js文件,都是自定义模块…...

502 bad gateway报错

代码在本地运行可以正常访问后端接口,部署服务器报错502。直接检查防火墙状态是否开启,先关闭防火墙试一下。如果是防火墙的原因在打开防火墙,开放需要的端口即可。 1、先查看防火墙状态: systemctl status firewalld2、停止防火…...

Flink学习教程

最近因为用到了Flink,所以博主开了《Flink教程》专栏来记录Flink的学习笔记。 【Apache Flink v1.16 中文文档】 【官网 - Apache Flink v1.3 中文文档】 一、基础 参考链接如下: Flink教程(01)- Flink知识图谱Flink教程&…...

flutter开发实战-实现音效soundpool播放音频及控制播放暂停停止设置音量

flutter开发实战-实现音效soundpool播放音频 最近开发过程中遇到低配置设备时候,在Media播放音频时候出现音轨限制问题。所以将部分音频采用音效sound来播放。 一、音效类似iOS中的Sound 在iOS中使用sound来播放mp3音频示例如下 // 通过通知的Sound设置为voip_c…...

Sequence 2023牛客暑期多校训练营6 E

登录—专业IT笔试面试备考平台_牛客网 题目大意&#xff1a;有一长度为n的数组a&#xff0c;有q次询问&#xff0c;每次要求将[l,r]的区间分成k个连续区间&#xff0c;满足每个区间和都是偶数&#xff0c;能满足要求就输出YES 1<n,q<1e5;0<ai<1e10;1<l<r&l…...

【ASP.NET MVC】使用动软(二)(10)

一、添加动软生成工程 按前文添加动态到工程 双击动软 完成新建数据库服务器后 &#xff0c;需要关闭重新打开 选择简单三层&#xff0c;注意保存位置 注意切换数据库&#xff1a; 生成后拷贝五个文件夹到工程目录 注意目录结构&#xff1a; 添加四个项目到原来的工程&…...

STM32入门学习之独立看门狗(IWDG)

1.STM32的独立看门狗是一个具有独立时钟的片上外设。通常&#xff0c;为了防止程序卡死&#xff0c;可以设置看门狗定时复位。当看看门狗被使能之后&#xff0c;会按初始化时设置的计数值进行计数。当根据计数值计数的倒数时间为0时&#xff0c;便会自动复位程序&#xff0c;即…...

抖音seo矩阵系统源码搭建开发详解

抖音SEO矩阵系统是一个用于提高抖音视频在搜索引擎排名的工具。如果你想开发自己的抖音SEO矩阵系统&#xff0c;以下是详细的步骤&#xff1a; 开发步骤详解&#xff1a; 确定你需要的功能和算法 抖音SEO矩阵系统包含很多功能&#xff0c;比如关键词研究、内容优化、链接建设、…...

2685. 统计完全连通分量的数量;2718. 查询后矩阵的和;1600. 王位继承顺序

2685. 统计完全连通分量的数量 核心思想&#xff1a;枚举所有的连通分量&#xff0c;然后判断这些连通分量是不是完全连通分量&#xff0c;完全连通分量满足边数2e 点数v(v-1)。 2718. 查询后矩阵的和 核心思想&#xff1a;后面的改变更重要&#xff0c;所以我们直接逆向思维…...

SpringBoot统一功能处理(AOP思想实现)(统一用户登录权限验证 / 异常处理 / 数据格式返回)

主要是三个处理&#xff1a; 1、统一用户登录权限验证&#xff1b; 2、统一异常处理&#xff1b; 3、统一数据格式返回。 目录 一、用户登录权限校验 &#x1f345; 1、使用拦截器 &#x1f388; 1.1自定义拦截器 &#x1f388; 1.2 设置自定义拦截器 &#x1f388;创建cont…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域&#xff0c;Hive 作为 Hadoop 生态中重要的数据仓库工具&#xff0c;其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式&#xff0c;很多开发者常常陷入选择困境。本文将从底…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程&#xff1a;如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket&#xff08;服务端和客户端都要&#xff09;2. 绑定本地地址和端口&#x…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...