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

news2024/10/6 14:28:06

目录

案例描述

环境准备

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

效果展示:

解决方案

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

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

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

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

相关文章

不懂路由协议分类?这五个常用路由协议一定要掌握

摘要: 路由协议在计算机网络中起着非常重要的作用,用于选择数据包传输路径,能够帮助网络管理员有效地管理网络流量。路由协议有很多种,例如RIP、EIGRP、IS-IS等,那么路由协议如何分类?分享给大家一些常用的…

kubernetes之Ingress

一、背景 Ingress是k8s中实现7层负载的实现方式,是公开集群外部流量到集群内服务的HTTP和HTTPS路由 二、Ingress基础 通常Ingress实现由Ingress 控制器和Ingress组成,Ingress控制器负责具体实现反向代理及负载均衡,Ingress负责定义匹配规则和…

Pytorch(四)

目录 一、RNN(递归神经网络) 二、GAN(对抗生成网络) 三、OCR 四、注意力机制 一、RNN(递归神经网络) 主要应用于NLP(自然语言处理) 二、GAN(对抗生成网络) 原理:存在一个生成器与判别器,随着双方矛盾升级,从而双方性能不断增强。 GAN网络组成:生成网…

uniapp使用阿里图标

效果图: 前言 随着uniApp的深入人心,我司也陆续做了几个使用uniapp做的移动端跨平台软件,在学习使用的过程中深切的感受到了其功能强大和便捷,今日就如何在uniapp项目中使用阿里字体图标的问题为大家献上我的一点心得&#xff0…

【Linux】—— 进程的创建和退出

序言: 在上期,我们已经对 Linux的进程的相关知识进行了相关的学习。接下来,我们要学习的便是关于进程控制 的基本知识!!! 目录 (一)进程创建 1、fork函数初识 2、写时拷贝 3、f…

Vue2 第十三节 使用Vue脚手架 (二)

1. ref属性 2. props配置项 3.mixin混入 4.plugin插件 一. ref属性 ① 作用:用于给节点打标识(给元素或者组件注册引用信息,id的替代者) ② 语法: 应用在html标签上获取的是真实的DOM元素,应用在组件…

SpringCloudAlibaba之Nacos配置中心

第一步&#xff1a;引入jar包 <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> 第二步&#xff1a;在resources下创建一个bootstrap.yml文档…

微信可以防止被拉黑,原来这样设置→

微信真是隔三差五上个热搜&#xff0c;这不得被别的 App 羡慕死 这不&#xff0c;前几天#原来微信可以防拉黑#的话题冲上了热搜。 说到拉黑&#xff0c;大伙大部分应该都体验过&#xff0c;在生活中我们和好朋友之间难免有摩擦&#xff0c;往往有些朋友情绪一上来就把你拉黑了。…

20230802-下载jdk1.8、jre

搜索oracle oracle官网 https://www.oracle.com/cn/

举办活动发布会,如何得到媒体支持?

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 举办活动发布会并得到媒体报道的支持是一个关键的宣传和推广手段。以下是一些建议&#xff0c;帮助你增加吸引媒体关注和报道的机会&#xff1a; 1. 策划新闻价值&#xff1a;确保你的发…

Python教程(6)——Python变量的基础类型。|整数类型|浮点数类型|字符串类型|布尔类型|

学习编程语言&#xff0c;不得不忽视变量这个概念。Python 中的变量是用于存储数据的名称&#xff0c;你可以将值赋给变量&#xff0c;并在程序的其他地方使用该变量来引用该值。变量在程序中起到存储和操作数据的作用。 如果学过C/C语言的同学&#xff0c;定义了变量后&#…

【测试学习四】掌握测试用例的设计方法有哪些~

目录 需要知道&#xff1a;了解测试用例 &#x1f337;1、测试用例的基本要素&#xff1f; &#x1f337;2、什么是好的测试用例&#xff1f; &#x1f337;3、不学习测试用例的设计方法&#xff0c;能不能对一个物体或软件进行测试&#xff1f; 一、基于黑盒测试用例的设计…

AlphaControls crack

AlphaControls crack AlphaControls-一组通用和一些独特的组件&#xff0c;支持皮肤(AlphaSkins)&#xff0c;并具有一些附加功能。所有皮肤元素都可以有自己的属性&#xff0c;用于高级绘制渐变、逼真的框架、半透明和模糊的阴影。图形功能实时生成所有计算和绘图。添加了用于…

InnoDB存储引擎——MVCC(多版本并发控制)介绍

文章目录 1.MVCC多版本并发控制基本概念2.MVCC实现原理2.1 innodb引擎的表结构中的三个隐藏字段2.2 innodb引擎的undo log日志2.3 innodb引擎的readview2.4 MVCC实现原理小结 1.MVCC多版本并发控制基本概念 快照读、当前读、MVCC的介绍。 快照读&#xff0c;select不加锁&am…

【JAVASE】什么是方法

⭐ 作者&#xff1a;小胡_不糊涂 &#x1f331; 作者主页&#xff1a;小胡_不糊涂的个人主页 &#x1f4c0; 收录专栏&#xff1a;浅谈Java &#x1f496; 持续更文&#xff0c;关注博主少走弯路&#xff0c;谢谢大家支持 &#x1f496; 方法 1. 方法概念及使用1.1 什么是方法1…

python——案例8:设定列表:listl=[0,1,2,3,4,5],求列表之和

案例8&#xff1a;设定列表&#xff1a;listl[0,1,2,3,4,5],求列表之和total0 list1[0,1,2,3,4,5] #列表lis1for ele in range(0,len(list1)):totaltotallist1[ele] print("列表中元素之和&#xff1a;",total) #输出结果

C# 图表控件库 ScottPlot

推荐使用ScottPlot原因&#xff1a; 1.图形界面简洁&#xff0c;样式丰富 2.代码较少 3.官方提供多种实例源码&#xff0c;并可以直接通过图形界面查看&#xff0c;便于快速开发 Github源码链接&#xff1a;https://github.com/ScottPlot/ScottPlot 官网WindowFrom Demo实例…

Steam搬砖蓝海项目

这个项目早在很久之前就已经存在&#xff0c;并且一直非常稳定。如果你玩过一些游戏&#xff0c;你一定知道Steam是什么平台。Steam平台是全球最大的综合性数字发行平台之一&#xff0c;玩家可以在该平台购买、下载、讨论、上传和分享游戏和软件。 今天我给大家解释一下什么是…

APP测试流程的总结

本规范基于app大小版本测试经验总结。 第一阶段&#xff1a;需求分析&#xff08;技术产品&#xff09; 1. 新需求是否合理 2. 新旧需求时否存在冲突 3. 理出测试重点 4. 估算测试时间 5. 不熟悉的需求点&#xff0c;确认&#xff08;负责人&#xff0c;竞品&#xff09; 6. …

Java之Map接口

文章目录 简述Map中key-value特点 Map接口的常用方法Map的主要实现类&#xff1a;HashMapHashMap概述 Map实现类之二&#xff1a;LinkedHashMapMap实现类之三&#xff1a;TreeMapMap实现类之四&#xff1a;Hashtable&#xff08;古老实现类&#xff09;Map实现类之五&#xff1…