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:lxinfohold@10.196.32.21" -e "PUT /usr/test111" -d
查看10.196.32.21是否有test111文件夹
使用shell上传
#/bin/bash
if [ -f ~/.bash_profile ];
then
. ~/.bash_profile
fi
#scp output/* ebp@10.196.32.12:/home/ebp/fil/tmp
#scp output/* liuxing@10.196.32.21:/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