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

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

  • [1. 前言](#1. 前言)
  • [2. 思路](#2. 思路)
  • [3. sftp搭建及用户批量新增](#3. sftp搭建及用户批量新增)
    • [3.1 配置文件内容](#3.1 配置文件内容)
    • [3.2 执行测试](#3.2 执行测试)
    • [3.3 登录测试](#3.3 登录测试)
    • [3.4 确认sftp服务器配置文件](#3.4 确认sftp服务器配置文件)
  • [4. 测试删除用户](#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_directory sftp主目录
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"
- 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服务重启卡主.
yaml 复制代码
---
- 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 执行测试

bash 复制代码
ansible-navigator run sftp.yaml -m stdout

3.3 登录测试

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

bash 复制代码
sftp ut_k8s_put@serverc
cd upload/
put token.txt
bye

3.4 确认sftp服务器配置文件

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

用了block模块的情况下后续删除修改也会方便很多,每个用户前后都有mark作为标记.

查看目录结构

显然我们刚才的文件也传到了正确的位置

bash 复制代码
[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

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

yaml 复制代码
---
- 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

执行删除

bash 复制代码
ansible-navigator run sftp_remove.yaml -m stdout

执行之后可以看到,清单文件中的2个用户已经删除,之前另外一个创建的用户还是正常

尝试用剩下的那个用户再次连接

确认剩下的那个用户并不受影响

至此使用ansible批量配置sftp增加或删除用户完成.

相关推荐
WoTrusSSL30 分钟前
什么是 OpenSSL?OpenSSL 如何工作?
服务器·https·ssl
m0_748236581 小时前
SQL-Server链接服务器访问Oracle数据
服务器·sql·oracle
Zfox_1 小时前
【Linux】Socket编程-TCP构建自己的C++服务器
linux·服务器·c语言·c++·tcp/ip
shelby_loo1 小时前
Ubuntu VPS 上 Docker 部署 Nginx 服务器详细教程
服务器·ubuntu·docker
hgdlip1 小时前
IP属地会随着人的移动而改变吗
运维·服务器·网络·ip属地
浩浩测试一下1 小时前
Web渗透测试之伪协议与SSRF服务器请求伪装结合? 能产生更多的效果
运维·服务器·web安全·网络安全·系统安全·网络攻击模型·安全架构
EutoCool1 小时前
Linux:SystemV通信
linux·运维·服务器
檀越剑指大厂1 小时前
【Linux系列】查看服务器是否使用了 SSD 的多种方法
linux·运维·服务器
Cikiss1 小时前
图解Git——服务器上的Git《Pro Git》
服务器·git·后端·源代码管理
李迟1 小时前
几个Linux系统安装体验(续): 中标麒麟服务器系统
linux·运维·服务器