SFTP(SSH File Transfer Protocol),安全文件傳送協議。有時也被稱做 Secure File Transfer Protocol 或 SFTP。它和SCP的區別是它容許用戶中斷傳輸,SCP拷貝速度稍快一些。SFTP能夠爲傳輸文件提供一種安全的加密方法。SFTP與FTP有着幾乎同樣的語法和功能。SFTP 爲 SSH的一部分,是一種傳輸檔案至Blogger伺服器的安全方式。其實在SSH軟件包中,已經包含了一個叫做SFTP的安全文件傳輸子系統,SFTP自己沒有單獨的守護進程,它必須使用sshd守護進程(端口號默認是22)來完成相應的鏈接操做,因此從某種意義上來講,SFTP並不像一個服務器程序,而更像是一個客戶端程序。SFTP一樣是使用加密傳輸認證信息和傳輸的數據,因此,使用SFTP是很是安全的。可是,因爲這種傳輸方式使用了加密/解密技術,因此傳輸效率比普通的FTP要低得多,若是您對網絡安全性要求更高時,可使用SFTP代替FTP。node
下面說下SFTP+Keepalived雙機高可用方案部署記錄: sftp-test01 172.16.51.191 sftp-test02 172.16.51.192 VIP 172.16.51.193 1、sftp-test01服務器操做: 1)查看openssh的版本 使用ssh -V 命令來查看openssh的版本,版本必須大於4.8p1,低於的這個版本須要升級。 [root@sftp-test01 ~]# ssh -V OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013 2)建立sftp組 [root@sftp-test01 ~]# groupadd sftp 3)建立一個sftp用戶,用戶名爲mysftp,密碼爲mysftp 修改用戶密碼和修改Linux用戶密碼是同樣的。 [root@sftp-test01 ~]# useradd -g sftp -s /bin/false mysftp [root@sftp-test01 ~]# passwd mysftp 4)sftp組的用戶的home目錄統一指定到/data/sftp下,按用戶名區分,這裏先新建一個mysftp目錄,而後指定mysftp的home爲/data/sftp/mysftp [root@sftp-test01 ~]# mkdir -p /data/sftp/mysftp [root@sftp-test01 ~]# usermod -d /data/sftp/mysftp mysftp 5)配置sshd_config,這個配置裏的sftp要嚴格按照下面的配置來操做,不然重啓sshd服務後,會形成sftp登陸成功,但ssh遠程登陸失敗的現象! 修改或添加下面配置。 能夠直接下載sshd_config配置進行使用。下載地址:https://pan.baidu.com/s/1o3ILTiC7nClF9NxCmS8YHw 提取密碼:de3x [root@sftp-test01 ~]# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak2 [root@sftp-test01 ~]# vim /etc/ssh/sshd_config ...... #Subsystem sftp /usr/libexec/openssh/sftp-server Subsystem sftp internal-sftp Match Group sftp ChrootDirectory /data/sftp/%u ForceCommand internal-sftp AllowTcpForwarding no X11Forwarding no 設定Chroot目錄權限 [root@sftp-test01 ~]# chown root:sftp /data/sftp/mysftp [root@sftp-test01 ~]# chmod 755 /data/sftp/mysftp 6)創建SFTP用戶登入後可寫入的目錄 按照上面設置後,在重啓sshd服務後,用戶mysftp已經能夠登陸。但使用chroot指定根目錄後,根應該是沒法寫入的,因此要新建一個目錄供mysftp上傳文件。 這個目錄全部者爲mysftp,全部組爲sftp,全部者有寫入權限,而全部組無寫入權限。 [root@sftp-test01 ~]# mkdir /data/sftp/mysftp/upload [root@sftp-test01 ~]# chown mysftp:sftp /data/sftp/mysftp/upload [root@sftp-test01 ~]# chmod 755 /data/sftp/mysftp/upload 7)關閉防火牆 [root@sftp-test01 ~]# /etc/init.d/iptables stop [root@sftp-test01 ~]# setenforce 0 setenforce: SELinux is disabled [root@sftp-test01 ~]# cat /etc/sysconfig/selinux ....... SELINUX=disabled 8)重啓sshd服務 [root@sftp-test01 ~]# service sshd restart Stopping sshd: [ OK ] Starting sshd: [ OK ] 9)驗證sftp環境(如對sftp作白名單限制,則就是對sshd作白名單限制。能夠在iptables裏限制sshd的端口,也能夠在/etc/hosts.allow裏對sshd服務作限制) 以下顯示,這說明SFTP已經搭建成功(若是ssh是非22端口,好比是6666端口,則鏈接命令:sftp -o port=6666 mysftp@172.16.51.191) [root@sftp-test01 ~]# sftp mysftp@172.16.51.191 Connecting to 172.16.51.191... The authenticity of host '172.16.51.191 (172.16.51.191)' can't be established. RSA key fingerprint is c0:f5:1d:03:3b:00:4a:11:54:8c:a7:a3:6f:77:47:c7. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '172.16.51.191' (RSA) to the list of known hosts. mysftp@172.16.51.191's password: sftp> ls upload sftp> cd upload sftp> ls 10)使用FileZilla FTP Client鏈接SFTP服務器 輸入主機IP地址172.16.51.19一、用戶名mysftp、密碼mysftp、端口(默認爲22端口)鏈接SFTP服務器。 鏈接後,默認的路徑是/data/sftp/mysftp 2、sftp-test02服務器須要和上面sftp-test01同樣的操做! 3、sftp-test01和sftp-test02兩臺機器的/data/sftp目錄作實時同步(rsync+inotify) 考慮到數據完整性和安全性,實施單向實時同步,即從sftp-test01機器的/data/sftp實時同步到sftp-test02的data/sftp 操做以下: 1)在目標服務器sftp-test02上的部署過程 安裝配置rsync服務端 [root@sftp-test02 ~]# yum install rsync xinetd [root@sftp-test02 ~]# vim /etc/xinetd.d/rsync ...... disable = no ...... 啓動xineted服務 [root@sftp-test02 ~]# /etc/init.d/xinetd start Starting xinetd: [ OK ] 建立/etc/rsyncd.conf文件 [root@sftp-test02 ~]# vim /etc/rsyncd.conf [root@sftp-test02 ~]# cat /etc/rsyncd.conf log file = /var/log/rsyncd.log pidfile = /var/run/rsyncd.pid lock file = /var/run/rsync.lock secrets file = /etc/rsync.pass motd file = /etc/rsyncd.Motd [sftp_upload] path = /data/sftp comment = sftp_upload uid = root gid = sftp port=873 use chroot = no read only = no list = no max connections = 200 timeout = 600 auth users = RSYNC_USER hosts allow = 172.16.51.191 注意:權限不要搞錯了! 上面填寫的uid是root,gid是sftp,是由於/data/sftp/ [root@sftp-test02 ~]# ll -d /data/sftp drwxr-xr-x 3 root root 4096 Nov 21 05:21 /data/sftp [root@sftp-test02 ~]# ll /data/sftp/ total 4 drwxr-xr-x 3 root sftp 4096 Nov 21 07:28 mysftp 建立用戶認證文件 [root@sftp-test02 ~]# vim /etc/rsync.pass RSYNC_USER:123456@rsync 設置文件權限,即rsyncd.conf和rsync.pass認證文件都是600權限! [root@sftp-test02 ~]# chmod 600 /etc/rsyncd.conf [root@sftp-test02 ~]# chmod 600 /etc/rsync.pass 重啓rsync服務 [root@sftp-test02 ~]# /etc/init.d/xinetd restart Stopping xinetd: [ OK ] Starting xinetd: [ OK ] [root@sftp-test02 ~]# lsof -i:873 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME xinetd 3797 root 5u IPv6 16264 0t0 TCP *:rsync (LISTEN) 2)在源服務器172.16.51.191上的部署過程 [root@sftp-test01 ~]# yum install rsync xinetd [root@sftp-test01 ~]# vim /etc/xinetd.d/rsync ...... disable = no ...... [root@sftp-test01 ~]# /etc/init.d/xinetd start Starting xinetd: [ OK ] [root@sftp-test01 ~]# lsof -i:873 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME xinetd 3444 root 5u IPv6 15917 0t0 TCP *:rsync (LISTEN) 建立同步的密碼文件,這個文件名能夠跟服務端的認證文件不同,可是裏面的密碼必須一致!用於rsync同步命令中。 不過,最好兩邊的文件設置成同樣,便於管理 [root@sftp-test01 ~]# cat /etc/rsync.pass 123456@rsync 設置rsync.pass密碼文件爲600權限 [root@sftp-test01 ~]# chmod 600 /etc/rsync.pass 查看服務器內核是否支持inotify,出現下面的內容,說明服務器內核支持inotify [root@sftp-test01 ~]# ll /proc/sys/fs/inotify total 0 -rw-r--r-- 1 root root 0 Nov 21 08:12 max_queued_events -rw-r--r-- 1 root root 0 Nov 21 08:12 max_user_instances -rw-r--r-- 1 root root 0 Nov 21 08:12 max_user_watches 注意:Linux下支持inotify的內核最小爲2.6.13,能夠輸入命令:uname -a查看內核 CentOS 5.X 內核爲2.6.18,默認已經支持inotify [root@sftp-test01 ~]# uname -a Linux sftp-test01 2.6.32-696.13.2.el6.x86_64 #1 SMP Thu Oct 5 21:22:16 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux 下面開始安裝inotify-tools [root@sftp-test01 ~]# yum install make gcc gcc-c++ [root@sftp-test01 ~]# cd /usr/local/src/ [root@sftp-test01 src]# wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz [root@sftp-test01 src]# tar zxvf inotify-tools-3.14.tar.gz [root@sftp-test01 src]# cd inotify-tools-3.14 [root@sftp-test01 inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify [root@sftp-test01 inotify-tools-3.14]# make && make install 發現已經成功安裝inotify-tools了 [root@sftp-test01 inotify-tools-3.14]# ll -d /usr/local/inotify/ drwxr-xr-x 6 root root 4096 Nov 21 08:14 /usr/local/inotify/ 設置系統環境變量 [root@sftp-test01 inotify-tools-3.14]# vim /etc/profile ....... export PATH=$PATH:/usr/local/inotify/bin [root@sftp-test01 inotify-tools-3.14]# source /etc/profile 添加庫文件 [root@sftp-test01 inotify-tools-3.14]# vim /etc/ld.so.conf ...... /usr/local/inotify/lib [root@sftp-test01 inotify-tools-3.14]# ldconfig 修改inotify默認參數(inotify默認內核參數值過小) 查看系統默認參數值 [root@sftp-test01 inotify-tools-3.14]# sysctl -a | grep max_queued_events fs.inotify.max_queued_events = 16384 [root@sftp-test01 inotify-tools-3.14]# sysctl -a | grep max_user_watches fs.inotify.max_user_watches = 8192 fs.epoll.max_user_watches = 796344 [root@sftp-test01 inotify-tools-3.14]# sysctl -a | grep max_user_instances fs.inotify.max_user_instances = 128 [root@sftp-test01 inotify-tools-3.14]# sysctl -w fs.inotify.max_queued_events="99999999" fs.inotify.max_queued_events = 99999999 [root@sftp-test01 inotify-tools-3.14]# sysctl -w fs.inotify.max_user_watches="99999999" fs.inotify.max_user_watches = 99999999 [root@sftp-test01 inotify-tools-3.14]# sysctl -w fs.inotify.max_user_instances="65535" fs.inotify.max_user_instances = 65535 參數說明: max_queued_events: inotify隊列最大長度,若是值過小,會出現"** Event Queue Overflow **"錯誤,致使監控文件不許確 max_user_watches: 要同步的文件包含多少目錄,能夠用:find /Data/xqsj_upload -type d | wc -l 統計這些源目錄下的目錄數,必須保證max_user_watches值大於統計結果(這裏/Data/xqsj_upload爲同步的源文件目錄) max_user_instances: 每一個用戶建立inotify實例最大值 接着執行同步操做: 在源服務器上執行rsync首次全量同步的操做(加--delete參數,保持目標目錄和源目錄下文件絕對一致) [root@sftp-test01 ~]# rsync -avH --port=873 --progress --delete /data/sftp/ RSYNC_USER@172.16.51.192::sftp_upload --password-file=/etc/rsync.pass 待第一次rsync全量同步完成後,就進行rsync+inotify實時同步腳本操做。 實時同步腳本里添加的是--delete-before參數,而不是--delete參數(第一次全量同步時rsync用的參數),兩者區別: --delete參數:表示rsync同步前,暴力刪除目標目錄中的全部文件,而後再執行同步操做。 --delete-before參數:表示rsync同步前,會先對目標目錄進行一次掃描檢索,刪除目標目錄中對比源目錄的多餘文件,而後再執行同步操做。顯然比--delete參數安全些。 [root@sftp-test01 data]# cd /data/script/ [root@sftp-test01 script]# vim sftp_data_rsync.sh #!/bin/bash SRCDIR=/data/sftp/ USER=RSYNC_USER IP=172.16.51.192 DESTDIR=sftp_upload /usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,modify,delete,create,attrib,move $SRCDIR | while read file do /usr/bin/rsync -avH --port=873 --progress --delete-before $SRCDIR $USER@$IP::$DESTDIR --password-file=/etc/rsync.pass echo " ${file} was rsynced" >> /tmp/rsync.log 2>&1 done [root@sftp-test01 script]# chmod 755 sftp_data_rsync.sh [root@sftp-test01 script]# nohup sh sftp_data_rsync.sh & //按ctrl+c結束 [1] 8807 [root@sftp-test01 script]# ps -ef|grep inotify root 8808 8807 0 22:55 pts/0 00:00:00 /usr/local/inotify/bin/inotifywait -mrq --timefmt %d/%m/%y %H:%M --format %T %w%f%e -e close_write,modify,delete,create,attrib,move /data/sftp/ root 8811 8451 0 22:55 pts/0 00:00:00 grep inotify 這樣,sftp-test01機器的/data/sftp目錄下的文件就會自動實時同步到sftp-test02機器的/data/sftp目錄下 注意:這是單向實時同步!若是要想作雙向實時同步!那就須要在sftp-test02機器上再作個inotify監控腳本(同時,sftp-test01也要作個rsyncd.conf文件) 4、SFTP結合Keepalived作雙機高可用 1)下載安裝Keepalived(兩臺機器一樣操做) [root@sftp-test01 ~]# cd /usr/local/src/ [root@sftp-test01 src]# wget http://www.keepalived.org/software/keepalived-1.3.2.tar.gz [root@sftp-test01 src]# tar -zvxf keepalived-1.3.2.tar.gz [root@sftp-test01 src]# cd keepalived-1.3.2 [root@sftp-test01 keepalived-1.3.2]# ./configure && make && make install [root@sftp-test01 keepalived-1.3.2]# cp /usr/local/src/keepalived-1.3.2/keepalived/etc/init.d/keepalived /etc/rc.d/init.d/ [root@sftp-test01 keepalived-1.3.2]# cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/ [root@sftp-test01 keepalived-1.3.2]# mkdir /etc/keepalived [root@sftp-test01 keepalived-1.3.2]# cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/ [root@sftp-test01 keepalived-1.3.2]# cp /usr/local/sbin/keepalived /usr/sbin/ [root@sftp-test01 keepalived-1.3.2]# echo "/etc/init.d/keepalived start" >> /etc/rc.local 2)配置Keepalived.conf文件 [root@sftp-test01 keepalived-1.3.2]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak [root@sftp-test01 keepalived-1.3.2]# vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { notification_email { wangshibo@wangshibo.com } notification_email_from notice@wangshibo.com smtp_server smtp.wangshibo.com smtp_connect_timeout 30 router_id master-node } vrrp_script chk_sftp_port { script "/data/chk_sftp.sh" interval 2 weight -5 fall 2 rise 1 } vrrp_instance VI_1 { state MASTER interface eth0 mcast_src_ip 172.16.51.191 virtual_router_id 51 priority 101 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 172.16.51.193 } track_script { chk_sftp_port } } sftp-test02服務器做爲backup端的Keepalived.conf配置以下: [root@sftp-test02 keepalived-1.3.2]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak [root@sftp-test02 keepalived-1.3.2]# vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { notification_email { wangshibo@wangshibo.com } notification_email_from notice@wangshibo.com smtp_server smtp.wangshibo.com smtp_connect_timeout 30 router_id slave-node } vrrp_script chk_sftp_port { script "/data/chk_sftp.sh" interval 2 weight -5 fall 2 rise 1 } vrrp_instance VI_1 { state BACKUP interface eth0 mcast_src_ip 172.16.51.192 virtual_router_id 51 priority 99 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 172.16.51.193 } track_script { chk_sftp_port } } 編寫sftp監控腳本(兩臺機器都要寫) [root@sftp-test01 keepalived-1.3.2]# vim /data/chk_sftp.sh #!/bin/bash counter=$(/etc/init.d/sshd status|grep running|wc -l) if [ "${counter}" = "0" ]; then /etc/init.d/sshd start sleep 2 counter=$(/etc/init.d/sshd status|grep running|wc -l) if [ "${counter}" = "0" ]; then /etc/init.d/keepalived stop fi fi [root@sftp-test01 keepalived-1.3.2]# chmod 755 /data/chk_sftp.sh 3)兩臺機器都要啓動Keepalived [root@sftp-test01 ~]# /etc/init.d/keepalived start [root@sftp-test02 ~]# /etc/init.d/keepalived start 啓動後發現sftp-test01已經有了vip資源 [root@sftp-test01 ~]# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 02:f6:cb:83:ad:03 brd ff:ff:ff:ff:ff:ff inet 172.16.51.191/24 brd 172.16.51.255 scope global eth0 inet 172.16.51.193/32 scope global eth0 inet6 fe80::f6:cbff:fe83:ad03/64 scope link valid_lft forever preferred_lft forever 4)高可用測試: -> 先關閉sftp-test01機器的Keepalived服務,發現vip資源就會自動漂到sftp-test02機器上繼續提供服務。 當sftp-test01機器的Keepalived服務恢復後,vip資源就會自動搶佔回來。 -> 關閉sftp-test01機器的ssh服務,經過腳本會自動啓動ssh服務,當啓動失敗後,會強制關閉Keepalived服務,從而實現vip資源的漂移! 注意: 在FileZilla客戶端裏使用172.16.51.193的vip進行鏈接。能夠在FileZilla客戶端的"文件"裏創建"新站點",協議」SFTP 登錄類型:正常
=====================================================================
發現上面雙向實時同步的高可用方案實施後,文件上傳到ftp目錄下的狀態有點問題,有的文件上傳後大小變化嚴重以致文件損壞,沒法打開!
後面將雙向實時同步策略關閉,往單個機器上傳文件就沒問題,判斷是rsync+inotify雙向實時同步形成的。linux
調整後的新方案: 編寫一個監控vip資源的腳本,當vip在哪臺機器上時,就作這臺機器到另外一臺的rsync單向同步操做,而且後臺一直運行這個腳本(經過循環語句保證腳本一直運行) 放棄原來的rsync+inotify雙向實時同步腳本! 腳本內容以下: 中止以前的rsync+inotify實時監控腳本,而後作兩臺機器的相互信任關係。 1)第一臺機器sftp-test01的操做 [root@sign-test01 ~]# cat /data/script/sftp_vip_monit.sh #!/bin/bash while [ "1" = "1" ] do NUM=`ip addr|grep 172.16.51.193|wc -l` if [ $NUM -eq 0 ];then echo "vip is not at this server" >/dev/null 2>&1 fi if [ $NUM -eq 1 ];then /usr/bin/rsync -e "ssh -p22" -avpgolr --progress --delete-before /data/sftp/mysftp/ root@172.16.51.192:/data/sftp/mysftp/ fi done [root@sign-test01 ~]# chmod 755 /data/script/sftp_vip_monit.sh [root@sign-test01 ~]# nohup sh /data/script/sftp_vip_monit.sh & //按ctrl+c結束 [root@sign-test01 ~]# ps -ef|grep monit root 10581 22167 0 19:42 pts/0 00:00:00 grep monit root 15113 1 8 17:15 ? 00:13:00 sh sftp_vip_monit.sh 2)第二臺機器sftp-test02 [root@sign-test02 ~]# cat /data/script/sftp_vip_monit.sh #!/bin/bash while [ "1" = "1" ] do NUM=`ip addr|grep 172.16.51.193|wc -l` if [ $NUM -eq 0 ];then echo "vip is not at this server" >/dev/null 2>&1 fi if [ $NUM -eq 1 ];then /usr/bin/rsync -e "ssh -p22" -avpgolr --progress --delete-before /data/sftp/mysftp/ root@172.16.51.191:/data/sftp/mysftp/ fi done [root@sign-test02 ~]# chmod 755 /data/script/sftp_vip_monit.sh [root@sign-test02 ~]# nohup sh /data/script/sftp_vip_monit.sh & //按ctrl+c結束 [root@sign-test02 ~]# ps -ef|grep monit root 10581 22167 0 19:42 pts/0 00:00:00 grep monit root 15113 1 8 17:15 ? 00:13:00 sh sftp_vip_monit.sh
=================建立sftp只讀帳號================c++
原則上來講,sftp帳號登陸後只能限定到其用戶家目錄下,即不能遍歷除其家目錄下以外的任何其餘目錄! sftp添加只讀帳號,這裏我採用的方法以下(有些複雜,但經測試可用): sftp-test01和sftp-test02兩個節點機操做同樣 [root@sftp-test01 ~]# useradd -g sftp -s /bin/false readftp [root@sftp-test01 ~]# passwd readftp [root@sftp-test01 ~]# mkdir /data/sftp/readftp [root@sftp-test01 ~]# usermod -d /data/sftp/readftp readftp [root@sftp-test01 ~]# chown root:sftp /data/sftp/readftp [root@sftp-test01 ~]# chmod 755 /data/sftp/readftp # 注意將readftp下的upload目錄權限設置成寫帳號mysftp權限,這樣readftp帳號登陸後就只有讀權限。 [root@sftp-test01 ~]# mkdir /data/sftp/readftp/upload [root@sftp-test01 ~]# chown mysftp:sftp /data/sftp/readftp/upload 因爲上面已經編寫了兩個節點機關於/data/sftp/mysftp/目錄的實時同步腳本sftp_vip_monit.sh 下面再在兩臺機器上編寫:本機/data/sftp/mysftp/upload/到/data/sftp/readftp/upload/目錄的實時同步腳本readftp_monit.sh 1)sftp-test01節點上 [root@sftp-test01 ~]# cd /data/script/ [root@sftp-test01 script]# vim readftp_monit.sh #!/bin/bash while [ "1" = "1" ] do /usr/bin/rsync -e "ssh -p22" -avpgolr --delete-before /data/sftp/mysftp/upload/ /data/sftp/readftp/upload/ done [root@sftp-test01 script]# nohup sh readftp_monit.sh & #按ctrl+c結束 [root@sftp-test01 script]# ps -ef|grep monit root 5285 17061 0 11:37 pts/0 00:00:07 sh readftp_monit.sh root 22713 17061 0 10:42 pts/0 00:00:29 sh sftp_vip_monit.sh root 28893 17061 0 12:00 pts/0 00:00:00 grep monit 2)sftp-test02節點上 [root@sftp-test02 ~]# cd /data/script/ [root@sftp-test02 script]# vim readftp_monit.sh #!/bin/bash while [ "1" = "1" ] do /usr/bin/rsync -e "ssh -p22" -avpgolr --delete-before /data/sftp/mysftp/upload/ /data/sftp/readftp/upload/ done [root@sftp-test02 script]# nohup sh readftp_monit.sh & #按ctrl+c結束 [root@sftp-test02 script]# ps -ef|grep monit root 5285 17061 0 11:37 pts/0 00:00:07 sh readftp_monit.sh root 22713 17061 0 10:42 pts/0 00:00:29 sh sftp_vip_monit.sh root 28893 17061 0 12:00 pts/0 00:00:00 grep monit 以上操做作,就能保證mysftp爲寫帳號,readftp爲只讀帳號,思路: a)經過mysftp帳號登陸sftp服務後,能夠進行上傳、建立,刪除和下載的讀寫操做,操做的文件存在在/data/sftp/mysftp/upload目錄下,而後實時同步到 /data/sftp/readftp/upload目錄下。 b)經過readftp帳號登陸sfto服務器,只能進行下載的只讀操做。因爲/data/sftp/mysftp/upload爲mysftp權限,沒有寫權限。並且就算能夠進行寫操做,寫 以後的文件放在/data/sftp/mysftp/upload目錄下也會被覆蓋掉(由於跟mysftp/upload單向實時同步的),也即寫操做失敗!
=========================只讀帳號目錄權限的坑========================
根據上面的操做完成後, 只讀帳號readftp登陸後, 對於上傳的目錄下的文件看不到了!! 這是問什麼呢??
這是由於readftp只讀帳號登陸後的/data/sftp/readftp/upload/下上傳的目錄權限不夠致使的! 應該賦予755權限.
[root@localhost ~]# ll /data/sftp/readftp/upload/
total 72
drwxr--r-- 2 rbn sftp 4096 Feb 28 13:23 20190225
drwxr--r-- 2 rbn sftp 4096 Feb 27 12:05 20190226
-rwxr--r-- 1 rbn sftp 54 Feb 26 16:52 dir.qdp.mvfc_appo_acct_dtl.20190224.000.00.i
-rwxr--r-- 1 rbn sftp 54 Feb 26 13:51 dir.qdp.mvfc_appo_acct_dtl.20190225.000.00.igit
經過/data/script/readftp_monit.sh腳本可知, /data/sftp/readftp/upload下的文件目錄權限都是同步/data/sftp/mysftp/upload的.
因此正確作法: 保證/data/sftp/mysftp/upload下的目錄一直是755權限github
[root@sftp-test01 script]# vim readftp_monit.sh
#!/bin/bash
while [ "1" = "1" ]
do
/usr/bin/rsync -e "ssh -p22" -avpgolr --delete-before /data/sftp/mysftp/upload/ /data/sftp/readftp/upload/
/bin/chmod -R 755 /data/sftp/mysftp
donevim
調整後, 只讀帳號readftp登陸後,上傳的目錄權限應該是755就能夠了
[root@localhost ~]# ll /data/sftp/readftp/upload/
total 72
drwxr-xr-x 2 rbn sftp 4096 Feb 28 13:23 20190225
drwxr-xr-x 2 rbn sftp 4096 Feb 27 12:05 20190226
-rwxr-xr-x 1 rbn sftp 54 Feb 26 16:52 dir.qdp.mvfc_appo_acct_dtl.20190224.000.00.i
-rwxr-xr-x 1 rbn sftp 54 Feb 26 13:51 dir.qdp.mvfc_appo_acct_dtl.20190225.000.00.i安全
================sftp平常運維維護命令===============bash
cd 路徑 更改到遠程目錄的路徑 lcd 路徑 更改到本地目錄的路徑 chgrp group path 將文件path的組更改成group chmod mode path 將文件path的權限更改成mode chown owner path 將文件path的屬主更改成owner exit 退出 sftp help 顯示這個幫助文本 get 遠程路徑 下載文件 ln existingpath linkpath 符號連接遠程文件 ls [選項] [路徑] 顯示遠程目錄列表 lls [選項] [路徑] 顯示本地目錄列表 mkdir 路徑 建立遠程目錄 lmkdir 路徑 建立本地目錄 mv oldpath newpath 移動遠程文件 open [用戶@]主機[:端口] 鏈接到遠程主機 put 本地路徑 上傳文件 pwd 顯示遠程工做目錄 lpwd 打印本地工做目錄 quit 退出 sftp rmdir 路徑 移除遠程目錄 lrmdir 路徑 移除本地目錄 rm 路徑 刪除遠程文件 lrm 路徑 刪除本地文件 symlink existingpath linkpath 符號連接遠程文件 version 顯示協議版本 =============================================================================== sftp mysftp@192.168.10.191 #ssh是默認22端口的鏈接方法 sftp -o port=6666 mysftp@192.168.10.191 #ssh是6666非默認端口的鏈接方法