阅读 139

Pipeline支撑运维自动化:sftp原子模块

需求

如果我们某个业务平台需要和很多第三方渠道对接sftp来交互传输文件,而且要求各三方渠道的目录是相互安全隔离的,那么在配置sftp时需要考虑以下几个问题:

  • 一个业务平台账户可能对应多个三方渠道账户

  • 平台用户、各三方渠道用户对同一个文件读写分离,要么读、要么写

  • 各三方渠道用户目录相互安全隔离

如此看来每新增一个平台或渠道用户可能需要经过一系列的繁琐操作,这对运维来说太不友好了,因此经过总结梳理我们的Pipeline又有了一个原子模块:sftp

sftp配置规范

不要着急,我们依据 先自动化,再标准化;边自动化,边标准化;既自动化,又标准化 思想,先确定sftp的配置管理规范,做到有章可循、有规可依。

1.目录命名规范

(1)三方渠道用户目录

一个三方渠道用户仅对应一个目录。

命名规则:平台名_渠道名

(2)平台用户目录

平台用户因需访问多个三方渠道用户目录,所以权限较高。

命名规则:平台名_渠道名1、平台名_渠道名2 等等

2.sftp配置

# 匹配bigsftp组 vim /etc/ssh/sshd_config port 22 Subsystem sftp internal-sftp Mathch Group bigsftp   ChrootDirectory /data/sftp   ForceCommand internal-sftp   AllowTcpForwarding no   X11Forwarding no 复制代码

配置sftp时需要注意:

  • sftp用户必须使用chroot,否则登录后可以自由切换系统目录,因此需要通过match group匹配

  • 如果使用keepalived高可用,需要保证各主机的uid和gid一致,否则会出现权限问题

3.添加用户

(1)三方渠道用户

# 渠道用户test1,匹配bigsftp组 useradd -u 1111 -G bigsftp -s /sbin/nologin -d /data/sftp/big_test1  test1 passwd xxxxxxxx # 渠道用户test2,匹配bigsftp组 useradd -u 1112 -G bigsftp -s /sbin/nologin -d /data/sftp/big_test2  test2 passwd xxxxxxxx 复制代码

默认情况下,用户家目录为700,由于还需要平台用户访问,因此还需进一步授权

cd /data/sftp chmod 770 big_test1 chmod 770 big_test2 复制代码

(2)平台用户

# 平台用户big, 匹配bigsftp组 useradd -u 1110 -G bigsftp -s /sbin/nologin -d /data/sftp/big  big passwd xxxxxxxx 复制代码

由于平台用户要访问渠道用户目录,因此平台用户需进一步隶属于渠道用户属组

usermod -G test1,test2 big 复制代码

(3)登录验证

sftp -oPort=22  test1@192.168.3.xxx sfpt> ls big_test1  big_test2 # 验证进入其他渠道目录 sftp> cd big_test2 sfpt> ls # 无权限访问 Couldn't get handle: Permission denied 复制代码

sftp原子模块

随着对接的渠道越来越多,繁杂的sftp的权限配置将成为我们的一个负担,因此我们将此需求提取成一个原子模块,通过Pipeline编排的形式来处理。

image.png

1.参数化构建

image.png

注意:

  • PLATFORM 使用"Choice Parameter"参数

  • WORKHOME 使用"Actiate Choices Reactive Parameter"参数,其根据PLATFORM、CHANNEL参数动态变化

switch(PLATFORM) {     case "big":         return ["big_${CHANNEL}"]         break     case "small":         return ["small_${CHANNEL}"]         break     default:         return ["非指定平台"]         break } 复制代码

如有特殊规则,需要启用开启"Use Groovy Sandbox",否则最终结果无法进行动态调整。

2.流水线

@Library('shared-library') _ pipeline {     agent any     options {         timestamps()     }     stages{         stage('平台用户检查') {             steps {                 script {                     sftp.NewPlatform("$SFTP", "$PLATFORM", "$PASSWORD", "$WORKHOME")                 }             }         }         stage('渠道用户创建') {             steps {                 script {                     sftp.NewChannel("$SFTP", "$CHANNEL", "$PASSWORD", "$PLATFORM", "$WORKHOME")                 }             }         }             } } 复制代码

3.流程图

2.png

总结

随着sftp原子模块的完成,我们能够通过自动化完成的运维场景又多了一个:

image.png


作者:木讷大叔爱运维
链接:https://juejin.cn/post/7068922060252119077

文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐