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

[Do374]Ansible一键搭建sftp实现用户批量增删

[Do374]Ansible一键搭建sftp实现用户批量增删

  • 1. 前言
  • 2. 思路
  • 3. sftp搭建及用户批量新增
    • 3.1 配置文件内容
    • 3.2 执行测试
    • 3.3 登录测试
    • 3.4 确认sftp服务器配置文件
  • 4. 测试删除用户

1. 前言

最近准备搞一下RHCA LV V,外加2.9之后的ansible有较大变化于是练习下Do374的课程内容.
工作中有几台sftp的服务器,由于sftp的目录权限比较特殊,有时候手工配置会出现一些报错需要排查.
于是手写了个ansibleplay来完成一键搭建及后续的用户添加工作.

2. 思路

整个sftp配置主要分为以下步骤:

  1. 安装配置ssh服务,并开通防火墙(这部分工作在实现ansible之前其实已经完成了)
  2. 根据用户清创建用户
  3. 确认sftp的主目录权限正常
  4. 根据清单创建用户的sftp主目录和上传目录
  5. 根据清单配置sshd主配置文件:/etc/ssh/sshd_config
  6. 重置sshd服务

3. sftp搭建及用户批量新增

3.1 配置文件内容

服务器清单文件:

变量含义
name用户名
password密码
home_directorysftp主目录
users:
- name: ut_k8s_put
  password: "ut_k8s_put_123"
  home_directory: "/ftp/pabc/ut_k8s_put"
- name: it_k8s_get
  password: "it_k8s_get_123"
  home_directory: "/ftp/pabc/it_k8s_get"
- name: ftp_k8s
  password: "ftp_k8s_123"
  home_directory: "/ftp/public/ftp_k8s"

ansible playbook文件:
主要实现以下功能:

  1. 根据用户清单创建用户
  2. 创建/ftp目录
  3. 根据用户清单创建用户sftp主目录
  4. 根据用户清单创建用户sftp upload目录
  5. 配置sshd主配置文件sshd_config文件
  6. 重置sshd服务,这个地方尽量使用reload,工作中发现如果用restart的话在某些会话没有被释放的情况下会造成sshd服务重启卡主.
---
- name: Use block module to config sftp service
  hosts: serverc
  gather_facts: false
  vars_files:
  - user_list.yaml
  tasks:
  - name: user_add
    ansible.builtin.user:
      name: "{{ item.name }}"
      comment: "{{ item.name }} to sftp"
      shell: /sbin/nologin
      password: "{{ item.password | password_hash('sha512') }}"
      create_home: yes 
    with_items: "{{ users }}"
  - name: create sftp root directory
    ansible.builtin.file:
      path: /ftp
      state: directory
      owner: root
      group: root
      mode: '0755'
  - name: create sftp directory
    ansible.builtin.file:
      path: "{{ item.home_directory }}"
      state: directory
      owner: root
      group: "{{ item.name }}"
      mode: '1750'
    with_items: "{{ users }}"
  - name: Create upload directory
    ansible.builtin.file:
      path: "{{ item.home_directory }}/upload"
      state: directory
      owner: "{{ item.name }}"
      group: "{{ item.name }}"
      mode: '1750'
    with_items: "{{ users }}"
  - name: replace sftp config
    ansible.builtin.lineinfile:
      path: /etc/ssh/sshd_config
      regexp: '^Subsystem sftp'
      line: Subsystem sftp internal-sftp
  - name: Add configs into the sshd_config file
    ansible.builtin.blockinfile:
      path: /etc/ssh/sshd_config
      block: |
        Match User {{ item.name }}
          chrootDirectory {{ item.home_directory }}
          X11Forwarding no
          AllowTcpForwarding no
          ForceCommand internal-sftp
          
      marker: "# {{ item.name }} config {mark}"
    with_items: "{{ users }}"
  - name: restart sshd service
    ansible.builtin.systemd:
      state: reloaded
      name: sshd

3.2 执行测试

ansible-navigator run sftp.yaml -m stdout

在这里插入图片描述

3.3 登录测试

尝试sftp远程登录服务器并上传文件.

sftp ut_k8s_put@serverc
cd upload/
put token.txt
bye

在这里插入图片描述

3.4 确认sftp服务器配置文件

确认sftp服务器上的配置文件和目录使用情况.

用了block模块的情况下后续删除修改也会方便很多,每个用户前后都有mark作为标记.
在这里插入图片描述
查看目录结构
显然我们刚才的文件也传到了正确的位置

[root@serverc ~]# tree /ftp
/ftp
├── pabc
│   ├── it_k8s_get
│   │   └── upload
│   └── ut_k8s_put
│     └── upload
│         └── token.txt
└── public
    └── ftp_k8s
        └── upload

8 directories, 1 file

4. 测试删除用户

user_del.yaml

users:
- name: ut_k8s_put
  password: "ut_k8s_put_123"
  home_directory: "/ftp/pabc/ut_k8s_put"
- name: it_k8s_get
  password: "it_k8s_get_123"
  home_directory: "/ftp/pabc/it_k8s_get"

playbook

---
- name: remove sftp users
  hosts: serverc
  gather_facts: false
  vars_files:
  - user_del.yaml
  tasks:
  - name: remove user configs from sshd_config
    ansible.builtin.blockinfile:
      path: /etc/ssh/sshd_config
      backup: yes
      state: absent
      marker: "# {{ item.name }} config {mark}"
    with_items: "{{ users }}"
  - name: remove user from system
    ansible.builtin.user:
      name: "{{ item.name }}"
      state: absent
      remove: yes
    with_items: "{{ users }}"
  - name: restart sshd service
    ansible.builtin.systemd:
      state: reloaded
      name: sshd

执行删除

ansible-navigator run sftp_remove.yaml -m stdout

在这里插入图片描述
执行之后可以看到,清单文件中的2个用户已经删除,之前另外一个创建的用户还是正常
在这里插入图片描述
尝试用剩下的那个用户再次连接
确认剩下的那个用户并不受影响
在这里插入图片描述
至此使用ansible批量配置sftp增加或删除用户完成.


http://www.kler.cn/a/506763.html

相关文章:

  • UDP报文格式
  • 【WPS】【WORDEXCEL】【VB】实现微软WORD自动更正的效果
  • Linux浅谈——管道、网络配置和客户端软件的使用
  • 玩转随机数:用 JavaScript 掌控不可预测的魔力!
  • TCP 连接状态标识 | SYN, FIN, ACK, PSH, RST, URG
  • mayavi -> python 3D可视化工具Mayavi的安装
  • 如何设置请求头模拟浏览器访问?
  • HTML标签笔记
  • 【Golang 面试题】每日 3 题(三十三)
  • 【React】JSX底层处理机制
  • Git 版本控制:.gitignore 文件完全指南
  • 如何制作一个高质量的 Dockerfile 镜像:从入门到实践
  • 【进程与线程】进程的状态
  • AI与药学:大语言模型赋能药物推荐
  • 为什么我喜欢在 CSS 中使用 RegEx
  • npm发布组件(vue3+webpack)
  • Vue学习之旅:从生命周期到工程化开发与组件实践(生命周期+工程化开发)
  • @Query(org.springframework.data.jpa.repository.Query)
  • HTTP 到 HTTPS – 以下是操作步骤
  • 【Java设计模式-5】装饰模式:给咖啡加点“佐料”
  • 海太长江隧道:科技防水筑就跨江新通道
  • 卷积神经04-TensorFlow环境安装
  • Dexie.js 的批量操作与索引优化
  • 《深度学习神经网络训练:数据集下载资源列表》
  • 使用Eclipse将Springboot项目打jar包
  • GPU算力平台|在GPU算力平台部署轻量级中文OCR项目(chineseocr_lite)