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