1.說明
本文提供一個Shell腳本,
可以自動連接到SFTP服務器,
然后上傳或者下載指定的文件,
進而可以使用Linux的corntab命令,
定時執行腳本上傳下載文件,
實現文件的同步或者備份功能。
2.FTP和SFTP的區別
一般使用FTP來上傳下載文件,
但是Linux的默認是不提供FTP的,
需要額外安裝FTP服務器,
而且會占用一定的VPS服務器資源。
這里建議使用SFTP代替FTP,
可以不用額外安裝任何服務器端程序,
使用只有SSH的Linux服務器的時候,
開啟SSH默認就開啟了SFTP,
不需要單獨配置就可以使用。
SFTP加密傳輸認證信息和數據,
相對來說會更安全。
3.安裝lftp
在腳本中需要使用lftp命令來連接SFTP服務器,
如果沒有需要使用root用戶安裝,
yum安裝命令如下:
yum install lftp -y
自動上傳下載文件的關鍵是自動輸入用戶名密碼,
但使用ssh的工具scp、sftp和ssh不能自動輸入密碼,
所以這里使用lftp實現。
4.上傳腳本
上傳腳本uploadFile.sh內容如下:
#!/bin/bash
# SFTP配置信息
# IP
IP=10.21.19.84
# 端口
PORT=22
# 用戶名
USER=yuwen
# 密碼
PASSWORD=ai123456
# 需要上傳的文件名
FILE=test.txt
# 需要上傳的文件所在目錄
CLIENTDIR=/home/yuwen/sftp/upload
# 上傳到目標服務器的目錄
SEVERDIR=/home/yuwen/sftp/download
lftp -u ${USER},${PASSWORD} sftp://${IP}:${PORT} <<EOF
cd ${SEVERDIR}/
lcd ${CLIENTDIR}
put ${FILE}
by
EOF
腳本上半部分主要配置目標服務器信息,
包括IP地址,SFTP端口,用戶名,密碼,
以及需要上傳的文件的本地路徑和遠程路徑。
腳本下半部分是實現自動上傳的關鍵,
首先自動登錄SFTP服務器,
然后cd切換遠程目錄,
lcd切換本地目錄,
put把文件上傳到服務器。
5.下載腳本
修改腳本uploadFile.sh內容,
把put上傳命令改為get命令即可:
get ${FILE}
6.定時執行腳本
每天凌晨2點執行上傳腳本:
0 2 * * * sh /home/yuwen/uploadFile.sh
查看當前的crontab任務:
crontab -l
編輯crontab任務:
crontab -e
7.參考文章
定時執行Linux shell腳本實現SFTP定時上傳下載文件
ftp/sftp定時自動上傳文件腳本(CentOS)
淺談ftp和sftp的區別
sftp登錄及命令行用法
Linux下犀利的FTP工具-lftp