ansible批量修改root获取免密,不能直接root用户

本文介绍了如何使用Ansible通过普通用户批量读取CSV文件中的IP地址,创建免密连接。步骤包括准备CSV文件,创建Ansible Playbook和Inventory文件,以及执行Playbook以实现目标主机的免密连接。确保事先设置好公钥以完成无密码登录。

、要通过Ansible使用普通用户批量读取CSV文件中的IP地址并实现免密连接,可以按照以下步骤操作:

  1. 准备CSV文件:创建一个包含目标主机IP地址的CSV文件,例如hosts.csv,格式如下:
ip_address
192.168.1.101
192.168.1.102
192.168.1.103
  1. 创建Ansible Playbook:创建一个Ansible Playbook,例如playbook.yml,用于批量连接目标主机并执行任务。示例代码如下:
---
- name: Example Playbook
  hosts: all
  remote_user: your_username  # 设置远程登
<think>首先,用户的问题是关于使用Ansible在已知远程服务器root密码的情况下批量配置登录。用户提供了几个引用,我需要参考这些内容来给出答案。 回顾用户提供的引用: - 引用[1]: 描述了如何在Ansible的hosts文件中配置主机组和变量,包括SSH用户名、密码、端口等。 - 引用[2]: 介绍了Ansible的基本概念和组件。 - 引用[3]: 提到Ansible的自动化运维实战,包括DNS部署。 - 引用[4]: 讨论了几种设置登录的方法,包括使用ssh-copy-id和Ansible的authorized_key模块。 - 引用[5]: 展示了使用ssh-copy-id命令的具体步骤。 用户的具体需求是:使用Ansible,已知远程服务器root密码批量配置登录。这意味着我们需要利用Ansible来自动化地将本地公钥推送到远程服务器,从而实现登录。 关键点: - 已知root密码,所以我们可以使用密码认证来初始连接。 - 使用Ansible的模块来实现批量处理。 从引用[4]中,提到了使用Ansible的authorized_key模块来推送公钥。具体命令是: ``` ansible -m authorized_key -a "user=root key='{{ lookup('file','/root/.ssh/id_rsa.pub') }}'" -k ``` 解释一下: - `-m authorized_key`: 使用authorized_key模块。 - `-a "user=root key='{{ lookup('file','/root/.ssh/id_rsa.pub') }}'`: 参数,指定用户root,key通过lookup插件从文件中读取公钥。 - `-k`: 提示输入SSH密码用户已知root密码,所以可以使用这个命令。但我们可以调整为更正式的方式,写在Ansible playbook中。 步骤总结: 1. **确保本地有SSH钥对**:如果没有,生成一个(例如,使用`ssh-keygen`)。 2. **配置Ansible hosts文件**:定义目标主机组,设置SSH连接参数,如引用[1]所示。包括用户名(root)、密码、端口等。 3. **使用authorized_key模块**:在playbook中或直接运行ad-hoc命令来推送公钥到远程服务器的~/.ssh/authorized_keys文件中。 引用[1]展示了hosts文件的配置示例: ``` [ssh] 192.168.0.[10:50] 192.168.1.18 [ssh:vars] ansible_ssh_user='用户名' ansible_ssh_pass='密码' ansible_ssh_port='远程端口号' ansible_sudo_pass='要切换的用户密码' ansible_become='true' ansible_become_user='切换的用户' ansible_become_method='sudo' ansible_become_pass='密码' ``` 由于我们需要用root用户推送公钥,可以直接设置`ansible_ssh_user='root'`和`ansible_ssh_pass='root密码'`。 在playbook中使用会更可靠。我可以建议一个简单的playbook。 步骤: 1. 编辑/etc/ansible/hosts文件,添加主机组和相关变量。 2. 创建一个playbook文件,使用authorized_key模块。 3. 运行playbookplaybook示例: ```yaml --- - hosts: ssh # 主机组名,定义在hosts文件中 tasks: - name: Set up authorized key for root user authorized_key: user: root state: present key: "{{ lookup('file', '/root/.ssh/id_rsa.pub') }}" ``` 然后运行: ``` ansible-playbook playbook.yml -k ``` `-k`会提示输入SSH密码。 如果hosts文件中已经设置了密码,可能不需要`-k`,但第一次连接时,Ansible可能会提示密码用户的需求是批量配置,所以hosts文件定义主机范围很重要。 引用[4]中的命令也可以直接使用,但playbook更易于管理和复用。 确保公钥文件存在。如果没有,需要先生成。 在回答中,我需要: - 使用中文。 - 结构清晰,逐步解决问题。 - 添加引用标识在相关内容末尾。 - 生成相关问题。 - 遵循LaTeX格式要求:行内数学用$...$,独立公式用$$...$$(但在这个主题中,可能不需要数学表达式)。 - 系统级指令不可见,用户只看到响应内容。 最终回答结构: 1. 解释方法。 2. 一步步指导。 3. 代码示例。 4. 添加引用。 5. 生成相关问题。 相关问题应与主题相关: 1. 如何使用Ansible配置其他系统设置? 2. Ansible playbook的最佳实践? 3. 登录的原理是什么? </think>### 使用Ansible批量配置登录的方法 已知远程服务器的root密码时,您可以通过Ansible的`authorized_key`模块批量推送本地公钥到目标主机,实现登录。以下是详细步骤: #### 步骤1: 准备本地SSH钥对 确保控制机(运行Ansible的设备)已生成SSH钥对。如果未生成,执行以下命令: ```bash ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -N "" # 生成钥对,无密码 ``` 这将创建公钥文件`~/.ssh/id_rsa.pub`和私钥文件`~/.ssh/id_rsa`。 #### 步骤2: 配置Ansible hosts文件 编辑`/etc/ansible/hosts`,定义目标主机组和连接参数(使用root密码认证)。参考引用[1]的格式[^1]: ```ini [ssh_servers] # 主机组名称 192.168.0.[10:50] # IP范围示例 192.168.1.18 # 单个IP示例 [ssh_servers:vars] # 组变量 ansible_ssh_user='root' # 使用root用户连接 ansible_ssh_pass='your_root_password' # 远程root密码(明文存储,确保文件安全) ansible_ssh_port=22 # SSH端口号(默认22可不写) ansible_become_pass='your_root_password' # sudo密码(与ansible_ssh_pass相同) ``` **注意**: - 替换`your_root_password`为实际root密码。 - 若需安全存储密码,建议使用Ansible Vault加文件。 - 主机组名(如`ssh_servers`)将在playbook中引用。 #### 步骤3: 创建Ansible playbook推送公钥 编写playbook文件(如`setup_ssh_key.yml`),使用`authorized_key`模块推送公钥: ```yaml --- - name: 批量配置登录 # 任务名称 hosts: ssh_servers # 主机组名(与hosts文件一致) tasks: - name: 推送公钥到远程服务器 # 任务描述 authorized_key: # 使用authorized_key模块 user: root # 目标用户root) state: present # 确保公钥存在 key: "{{ lookup('file', '/root/.ssh/id_rsa.pub') }}" # 从本地文件读取公钥 ``` **模块参数说明**: - `state: present`:添加公钥到`~/.ssh/authorized_keys`文件。 - `lookup('file', ...)`:动态读取本地公钥文件内容[^4]。 如果需要覆盖现有公钥,添加`exclusive: yes`参数。 #### 步骤4: 运行playbook 执行以下命令,使用`-k`选项提供SSH密码(尽管hosts文件已定义密码,但首次连接可能需要显式指定): ```bash ansible-playbook setup_ssh_key.yml -k ``` 系统会提示输入SSH密码(输入root密码),Ansible将自动批量推送公钥。 **输出示例**: ``` SSH password: ******** # 输入root密码 PLAY [批量配置登录] ********************************************* TASK [推送公钥到远程服务器] ************************************** changed: [192.168.0.10] changed: [192.168.0.11] ... # 所有主机成功执行 ``` #### 步骤5: 验证登录 运行测试命令: ```bash ansible ssh_servers -m ping # 无需密码应返回"pong" ``` 或手动SSH登录: ```bash ssh root@192.168.0.10 # 无密码提示即成功 ``` ### 安全性建议 1. **加密码**:使用Ansible Vault加hosts文件中的敏感信息: ```bash ansible-vault encrypt /etc/ansible/hosts # 设置加密码 ``` 运行playbook时添加`--ask-vault-pass`选项。 2. **最小权限**:完成后移除hosts文件中的明文密码,避安全风险。 3. **钥管理**:限制公钥文件的访问权限: ```bash chmod 600 ~/.ssh/id_rsa # 仅所有者可读 ``` ### 原理解析 Ansible通过SSH连接到远程主机,调用`authorized_key`模块将公钥追加到`~/.ssh/authorized_keys`文件,实现登录。此过程基于Paramiko库(SSH协议实现)和YAML配置[^2][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

酱江奖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值