Centos7搭建sftp
Posted 骑白马走三关
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Centos7搭建sftp相关的知识,希望对你有一定的参考价值。
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
Centos 7.4上搭建sftp服务
1. sftp简介
sftp是SSH File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的网络的加密方法。
sftp 与 ftp 有着几乎一样的语法和功能。
其实在SSH软件包中,已经包含了一个叫作SFTP(Secure File Transfer Protocol)的安全文件信息传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接和答复操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。
SFTP同样是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多。
2. 首先查看openssh版本
[[email protected] ~]# ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
版本必须大于4.8p1,低于的这个版本需要升级。
3. 创建sftp用户组
groupadd bmssftp
4. 创建sftp用户并归到sftp用户组中
useradd -g bmssftp -s /bin/false bmssftp
passwd bmssftp
# 这里为bmssftp用户设置密码为:bmssftp123
5. 将sftp组的用户home目录统一指定到/data/sftp下,按用户名区分,这里先新建一个bmssftp目录,然后指定bmssftp的home为/data/sftp/bmssftp
mkdir -p /data/sftp/bmssftp #先新建一个bmssftp目录,作为bmssftp用户的home目录
usermod -d /data/sftp/bmssftp bmssftp #修改bmssftp的home目录为/data/sftp/bmssftp
6. 配置sshd_config
vim /etc/ssh/sshd_config
注释掉X11Forwarding yes 这句话,大概在101行
注释掉Subsystem sftp /usr/libexec/openssh/sftp-server 这句话,大概在132行
并在文件末尾添加如下语句:
Subsystem sftp internal-sftp
Match Group bmssftp
ChrootDirectory /data/sftp/%u
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
7. 设定权限
chown root:bmssftp /data/sftp/bmssftp
chmod 755 /data/sftp/bmssftp
8. 现在其实已经可以通过bmssftp账号密码登入了,但是在bmssftp文件夹中还不能上传文件,所以需要新建一个文件夹来供bmssftp用户上传文件
mkdir -p /data/sftp/bmssftp/upload
chown bmssftp:bmssftp /data/sftp/bmssftp/upload
chmod 755 /data/sftp/bmssftp/upload
9. 关闭selinux
setenforce 0
vi /etc/selinux/config
将文件中的SELINUX=enforcing 修改为 SELINUX=disabled ,
然后保存
10. 重启sshd服务
service sshd restart
11. 本机验证sftp登录是否正常
sftp 用户名@本机IP,然后输入对应密码
[[email protected] sftp]# sftp [email protected]
[email protected]'s password:
Connected to 127.0.0.1.
sftp> dir
upload
sftp>
如果出现sftp>,就没问题,这时候你就可以用第三方工具登录sftp进行上传和下载了。
注意1:
ssh 服务要添加到防火墙规则的允许列表中。
注意2:
如果你的操作系统的ssh服务做了源IP登录限制,请把你的源IP加入以下文件的允许IP列表中,否则用bmssftp用户无法登录。
/etc/hosts.deny
参考链接:
https://blog.csdn.net/yeyinglingfeng/article/details/81503578
以上是关于Centos7搭建sftp的主要内容,如果未能解决你的问题,请参考以下文章