SFTP服务搭建与传输文件(Centos6)

SFTP服务搭建与传输文件

  • 1.创建通信账号
    • 添加sftp组
    • 新增用户
    • 设置密码
    • 创建登陆默认访问路径
    • 配置目录权限
    • 修改sftp配置
    • 重启sshd服务
  • 2.从其他服务器上传文件
    • 使用shell上传

1.创建通信账号

添加sftp组

groupadd sftp

新增用户

新增用户liuxing至sftp组,禁止登录

useradd -g sftp -s /bin/false liuxing

设置密码

设置用户liuxing的密码

passwd liuxing

创建登陆默认访问路径

 mkdir -p /appdata/BJIP-JAVA/histmp/
 usermod -d /appdata/BJIP-JAVA/histmp/ liuxing

配置目录权限

chmod -R 755 /appdata/BJIP-JAVA/histmp/
chown liuxing:sftp /appdata/BJIP-JAVA/histmp/

修改sftp配置

用ChrootDirectory将用户的根目录指定到/appdata/BJIP-JAVA/histmp/ ,这样用户就只能在/appdata/BJIP-JAVA/histmp/下活动。

如果你链接服务器的时候出现下面的提示:

Write failed: Broken pipe 
Couldn't read packet: Connection reset by peer 

这个问题的原因是ChrootDirectory的权限问题,你设定的目录必须是root用户所有,否则就会出现问题。所以请确保sftp用户根目录的所有人是root, 权限是 750 或者 755。
所以下面配置没有指定根目录

#Subsystem      sftp    /usr/libexec/openssh/sftp-server  这行注释掉
Subsystem sftp internal-sftp    #这行指定使用sftp服务使用系统自带的internal-sftp
Match User liuxing    #这行用来匹配用户
#ChrootDirectory /appdata/BJIP-JAVA/histmp/  
ChrootDirectory none  #不指定活动目录
AllowTcpForwarding no
ForceCommand internal-sftp    #指定sftp命令

重启sshd服务

service sshd restart

2.从其他服务器上传文件

登陆服务器10.196.32.13建立文件夹/usr/test111,并上传至10.196.32.21默认路径(-d为debug模式)
/appdata/BJIP-JAVA/histmp/

用法:lftp 用户名:密码@ftp地址:传送端口(默认21)
#此处命令在服务器10.196.32.13执行
mkdir /usr/test111
lftp "sftp://liuxing:[email protected]" -e "PUT /usr/test111" -d

查看10.196.32.21是否有test111文件夹

使用shell上传

#/bin/bash
if [ -f ~/.bash_profile ];
then
  . ~/.bash_profile
fi
#scp output/* [email protected]:/home/ebp/fil/tmp
#scp output/* [email protected]:/appdata/BJIP-JAVA/histmp
FTP_ADDR=10.196.32.21
FTP_USER=liuxing
FTP_PASS=lxinfohold
FILE_ROOT_PATH=/usr/TicketEBPdata/
FILE_PATH=/usr/TicketEBPdata/output/
LOG_FILE=/usr/TicketEBPdata/output/lftp_output.txt

ftpFunction() {
        lftp "sftp://$FTP_USER:$FTP_PASS@$FTP_ADDR" -e "PUT $FILE_PATH$1" >$LOG_FILE 2>&1 <<- EOF
bye
EOF
}
filelist=`ls $FILE_PATH`
for file in $filelist
do
  if [ -f "$FILE_PATH""$file" ];then
echo $file;   
        ftpFunction $file

	if [ -s "$LOG_FILE" ]; then
           mv $LOG_FILE $FILE_ROOT_PATH
           break
        else
        rm -rf $LOG_FILE
        mv output/* history -f 
        fi
  fi
done

你可能感兴趣的:(Linux)