首页 > 系统相关 >Centos7搭建sftp

Centos7搭建sftp

时间:2023-05-18 11:55:12浏览次数:50  
标签:username sshd group echo Centos7 targetDir sftp config 搭建

Centos7搭建sftp

根据网上教程写了总结写了个搭建的自动化脚本

#!/bin/bash
function checkVersion() {
  # 获取SSH版本号
  # 获取SSH版本信息
  version_info=$(ssh -V 2>&1)

  # 从版本信息中提取OpenSSH版本号
  openssh_version=$(echo "$version_info" | awk -F'[,_]' '{print $2}')
  # 比较版本号
  if [[ "${openssh_version}" > "4.81" ]]; then
    echo "current OpenSSH version:${openssh_version}"
  else
    echo "OpenSSH version must be >= 4.8p1, but it is ${openssh_version}"
    exit 1
  fi
}
function checkUserGroup() {
  #!/bin/bash
  group_name="$1"
  # 判断用户组是否存在
  if grep -q "^${group_name}:" /etc/group; then
    echo "用户组已存在: ${group_name},无需创建"
  else
    echo "用户组不存在: ${group_name}"
    groupadd "${group_name}"
    result="$?"
    if [[ "$result" == '0' ]];then
      echo "创建用户组:${group_name},创建成功"
    else
      echo "创建用户组:${group_name},创建失败"
    fi
  fi
}

function checkUser() {
  group_name="$1"
  username="$2"
     # 判断用户是否存在
  if grep -q "^${username}:" /etc/passwd; then
    echo "用户已存在: ${username},无需创建"
  else
    echo "用户不存在: ${username}"
    useradd -g "${group_name}" -s /sbin/nologin "${username}"
    result="$?"
    if [[ "$result" == '0' ]];then
      echo "创建用户:${username},用户组:${group_name},创建成功"
    else
      echo "创建用户:${username},用户组:${group_name},创建失败"
    fi
  fi
}
function setPassword() {
  username="$1"
  password="$2"
  # 设置用户密码
  echo "${username}:${password}" | chpasswd

  # 验证密码是否修改成功
  if [[ $? -eq 0 ]]; then
    echo "密码修改成功"
  else
    echo "密码修改失败"
    exit 1
  fi
}
function mkUserDir() {
  username="$1"
  baseDir="$2"
  targetDir="$baseDir/${username}"
  mkdir -p "${targetDir}"
  chmod 755 "${targetDir}"
  # 修改用户登入目录
  usermod -d "${targetDir}" "${username}"
  echo "创建Sftp目录:${targetDir}成功"
}

function configSshdConfig() {
  sftpGroup="$1"
  baseDir="$2"
  # 检查是否已经注释掉了
  if grep -q -E "#Subsystem\s+sftp" /etc/ssh/sshd_config; then
    echo "已经注释掉了/etc/ssh/sshd_config中的Subsystem"
  else
    # 使用sed命令注释掉Subsystem sftp行
    sed -i 's/^Subsystem\s\+sftp.*$/#&/' /etc/ssh/sshd_config
    # 检查替换是否成功
    if [[ $? -eq 0 ]]; then
      echo "注释sshd_condig成功"
    else
      echo "注释sshd_condig失败"
    fi
    curTime=`date +'%Y%m%d%H%M%S'`
    sshd_config_file="/etc/ssh/sshd_config"
    backup_file="/etc/ssh/sshd_config.${curTime}"
    echo "备份文件: ${sshd_config_file} 到 ${backup_file}"
    # 添加内容到sshd_config文件
    content_to_add="
Subsystem sftp internal-sftp
Match Group ${sftpGroup}
ChrootDirectory ${baseDir}/%u
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
    "
    # 备份sshd_config文件
    cp "${sshd_config_file}" "${backup_file}"
    # 将内容添加到sshd_config文件
    echo "${content_to_add}" >> "${sshd_config_file}"
    # 验证添加是否成功
    if [[ $? -eq 0 ]]; then
      echo "内容已成功添加到sshd_config文件"
    else
      echo "添加内容到sshd_config文件失败"
    fi
  fi
}

function changeUserRootDir() {
  username="$1"
  userGroup="$2"
  baseDir="$3"
  targetDir="${baseDir}/${username}"
  chown root:${userGroup} "${targetDir}"
  chmod 755 "${targetDir}"
  echo "Chroot完成:${targetDir}"
}

function mkUploaddir() {
  username="$1"
  userGroup="$2"
  baseDir="$3"
  targetDir="${baseDir}/${username}/upload"
  mkdir -p  "${targetDir}"
  chown ${username}:${userGroup} "${targetDir}"
  chmod 755 "${targetDir}"
  echo "创建上传目录:${targetDir}完成"
}

sftpUserGroup="sftpusers"
sftpusers1="BigData1"
sftpusers2="BigData2"
sftpPassword="Test@123"
sftpBaseDir="/Sftp"

checkVersion
checkUserGroup "${sftpUserGroup}"
checkUser "${sftpUserGroup}" "${sftpusers1}"
checkUser "${sftpUserGroup}" "${sftpusers2}"
setPassword "${sftpusers1}" "${sftpPassword}"
setPassword "${sftpusers2}" "${sftpPassword}"
mkUserDir "${sftpusers1}" "${sftpBaseDir}"
mkUserDir "${sftpusers2}" "${sftpBaseDir}"
configSshdConfig "${sftpUserGroup}" "${sftpBaseDir}"
changeUserRootDir "${sftpusers1}" "${sftpUserGroup}" "${sftpBaseDir}"
changeUserRootDir "${sftpusers2}" "${sftpUserGroup}" "${sftpBaseDir}"
mkUploaddir "${sftpusers1}" "${sftpUserGroup}" "${sftpBaseDir}"
mkUploaddir "${sftpusers2}" "${sftpUserGroup}" "${sftpBaseDir}"
service sshd reload

标签:username,sshd,group,echo,Centos7,targetDir,sftp,config,搭建
From: https://www.cnblogs.com/xixisix/p/17411513.html

相关文章

  • 复制环境搭建
    一.复制环境搭建(基于MySQL5.7.9-log)创建一个复制用户------Master节点--root@mysqldb10:24:[(none)]>resetmaster;#先将master设置成初始状态mysql>createuser'repl'@'%'identifiedby'123456';QueryOK,0rowsaffected(0.01sec)mysq......
  • centos7 中安装 busco
     001、系统[root@PC1software]#cat/etc/redhat-releaseCentOSLinuxrelease7.9.2009(Core) 002、python版本[root@PC1software]#python3--versionPython3.11.3 003、gcc版本[root@PC1software]#gcc--versiongcc(GCC)4.8.520150623(RedHat......
  • webpack搭建typescript项目
    基于webpack的typescript项目搭建该项目是搭建了一个数值转换的前端项目,使用了webpack,typescript重点学习webpack.config.js的配置/Users/song/Code/webgpu_learn/webgpu-for-beginners/03typescript/finished/index.html<!DOCTYPEhtml><htmllang="en"><head><m......
  • CentOS7.7安装docker
    1.背景想自己部署一套halo,发现需要docker环境,而且docker现在已经用处广泛,所以在CentOS服务器上安装docker2.步骤#Uninstalloldversionssudoyumremovedocker\docker-client\docker-client-latest\docker-co......
  • Windows下hexo个人博客详细搭建教程
    1.hexo介绍hexo是一个静态的个人博客框架,静态的意思就是没有后台,就是直接将文件放到Web服务器中通过浏览器进行访问官网链接:https://hexo.io/zh-cn/index.html2.安装1)安装node.jshexo需要node.js支持,所以需要先安装node.js,可参考https://blog.csdn.net/chanyeolchichi/art......
  • windows环境下如何优雅搭建ftp服务?
    目录0.前言1.ftp简介2.下载ApacheFTPServer3.下载并解压压缩包4.修改配置文件4.1修改users.properties配置文件4.2修改ftpd-typical.xml配置文件5.启动FTPServer6.访问FTP7.ftp的启动与关闭0.前言由于学习或工作需要,我们经常需要和他人或其他电脑共享文件,在这之前我们普遍......
  • 搭建个人博客-hexo+github详细完整步骤
    自己也算是摸爬滚打搭建成功,然后自己再重新安装部署一遍,把完整步骤分享给大家,同时最后有一些连接,如果我的步骤不行,大家可以参考其他人的(这个有点花费时间,大家提前有个心理准备-_-)一、第一步:下载安装Git1、Git下载地址2、安装步骤个人选择全选选择第二个......
  • 搭建个人博客-hexo+github详细完整步骤
    自己也算是摸爬滚打搭建成功,然后自己再重新安装部署一遍,把完整步骤分享给大家,同时最后有一些连接,如果我的步骤不行,大家可以参考其他人的(这个有点花费时间,大家提前有个心理准备 -_-)一、第一步:下载安装Git1、Git下载地址2、安装步骤个人选择全选选择......
  • 监控centos7系统CPU,内存,磁盘空间
    [catmonitor2.py#!/usr/bin/envpython#coding=UTF-8importdatetimeimportsocketimportpsutilimportsmtplibfromemail.mime.textimportMIMETextfromemail.mime.multipartimportMIMEMultipart#全局变量current_time=datetime.datetime.now().strftime("%Y-%m......
  • 如何搭建一个vue项目
    一、nvm安装与使用1.1、nvm简介nvm全名node.jsversionmanagement,顾名思义是一个nodejs的版本管理工具。通过它可以安装和切换不同版本的nodejs1.2、nvm下载①github下载https://github.com/coreybutler/nvm-windows/releases②百度网盘下载链接:https://pan.baidu.com/s/1......