Linux服務器使用SFTP協議上傳、下載文件

最近有個需求需要定時並且比較頻繁地從windows拷貝文件到linux,能想到的方法有:
1. 使用samba共享文件夾;

2.使用winspc拷貝;

由於共享文件夾有安全缺陷,其端口445已經被不少公司屏蔽,故這裏考慮使用winscp拷貝。

在windows下運行如下命令即可將文件從windows拷貝到Linux:

winscp.exe /script=winscp.bat

其中winscp.bat內容如下:

winscp.bat

option confirm off
open linux_user_name:linux_user_passwd@linux_ip:22   #這些變量用實際用戶名、密碼、ip地址替換
put E:\winscp_file_trans\AShareDividend.csv  xrxddata/
put E:\winscp_file_trans\AShareEXRightDividendRecord.csv xrxddata/
put E:\winscp_file_trans\AShareRightIssue.csv xrxddata/
put E:\winscp_file_trans\AShareTradingSuspension.csv xrxddata/
close
exit
pause

 

拷貝後可以從linux系統下看到文件拷貝成功:

 

 

下面介紹下服務端如何設置。

SFTP是Secure File Transfer Protocol的縮寫,可以爲傳輸文件提供一種安全的加密方法。它與 FTP 有着幾乎一樣的語法和功能。SFTP 爲 SSH的一部分,在SSH軟件包中,包含了一個叫作SFTP的安全文件傳輸子系統。SFTP本身沒有單獨的服務進程,它使用sshd守護進程(端口號默認是22)來完成相應的連接操作。

Step1. 添加兩個Linux用戶,writeruser是寫文件的用戶,readeruser是讀文件的用戶:

useradd writeruser -d /home/writeruser 
passwd writeruser 
usermod -s /sbin/nologin writeruser 

useradd readeruser -s /sbin/nologin -d /home/writeruser/xrxddata
passwd readeruser 

Step2. 設置兩個用戶的目錄讀寫權限

注意step3中配置的ChrootDirectory目錄,路徑上所有目錄的owner必須是root ,並且group用戶和other用戶不能有寫權限。

# ls -ld /home
drwxr-xr-x. 17 root root 4096 Jul 17 13:43 /home

# ls -ld /home/writeruser
drwxr-xr-x 5 root writeruser 4096 Jul 18 16:04 /home/writeruser

# ls -l /home/writeruser/xrxddata
total 1184
-rw-r--r-- 1 writeruser writeruser 541322 Jun 28 16:16 AShareDividend.csv

Step3. 配置/etc/ssh/sshd_config配置文件,限定用戶的目錄限制和其他權限限制:

Subsystem       sftp    internal-sftp

Match User writeruser
        ChrootDirectory /home/writeruser
        ForceCommand internal-sftp
        X11Forwarding no
        AllowTcpForwarding no

Match User readeruser
        ChrootDirectory /home/writeruser
        ForceCommand internal-sftp
        X11Forwarding no
        AllowTcpForwarding no

 

最終效果是:寫用戶只能訪問/home/writeruser/xrxddata目錄,並且在該目錄下有寫權限;

                      讀用戶只能訪問/home/writeruser/xrxddata目錄,並且在該目錄下只有讀權限;

 

最後,爲了增強ssh的安全性,重新安裝了最新版本的openssh-8.0p1.

首先要備份一下/etc/ssh目錄:

mv /etc/ssh /etc/ssh.bak

然後安裝openssh-8.0p1: 

cd openssh-8.0p1
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-md5-passwords --with-pam --with-zlib --with-ssl-dir=/usr/local/ssl --with-privsep-path=/var/lib/sshd
make
make install

 

make install結果如下:

# make install
(cd openbsd-compat && make)
make[1]: Entering directory `/root/Downloads/openssh-8.0p1/openbsd-compat'
make[1]: Nothing to be done for `all'.
make[1]: Leaving directory `/root/Downloads/openssh-8.0p1/openbsd-compat'
/bin/mkdir -p /usr/bin
/bin/mkdir -p /usr/sbin
/bin/mkdir -p /usr/share/man/man1
/bin/mkdir -p /usr/share/man/man5
/bin/mkdir -p /usr/share/man/man8
/bin/mkdir -p /usr/libexec
/bin/mkdir -p -m 0755 /var/lib/sshd
/usr/bin/install -c -m 0755 -s ssh /usr/bin/ssh
/usr/bin/install -c -m 0755 -s scp /usr/bin/scp
/usr/bin/install -c -m 0755 -s ssh-add /usr/bin/ssh-add
/usr/bin/install -c -m 0755 -s ssh-agent /usr/bin/ssh-agent
/usr/bin/install -c -m 0755 -s ssh-keygen /usr/bin/ssh-keygen
/usr/bin/install -c -m 0755 -s ssh-keyscan /usr/bin/ssh-keyscan
/usr/bin/install -c -m 0755 -s sshd /usr/sbin/sshd
/usr/bin/install -c -m 4711 -s ssh-keysign /usr/libexec/ssh-keysign
/usr/bin/install -c -m 0755 -s ssh-pkcs11-helper /usr/libexec/ssh-pkcs11-helper
/usr/bin/install -c -m 0755 -s sftp /usr/bin/sftp
/usr/bin/install -c -m 0755 -s sftp-server /usr/libexec/sftp-server
/usr/bin/install -c -m 644 ssh.1.out /usr/share/man/man1/ssh.1
/usr/bin/install -c -m 644 scp.1.out /usr/share/man/man1/scp.1
/usr/bin/install -c -m 644 ssh-add.1.out /usr/share/man/man1/ssh-add.1
/usr/bin/install -c -m 644 ssh-agent.1.out /usr/share/man/man1/ssh-agent.1
/usr/bin/install -c -m 644 ssh-keygen.1.out /usr/share/man/man1/ssh-keygen.1
/usr/bin/install -c -m 644 ssh-keyscan.1.out /usr/share/man/man1/ssh-keyscan.1
/usr/bin/install -c -m 644 moduli.5.out /usr/share/man/man5/moduli.5
/usr/bin/install -c -m 644 sshd_config.5.out /usr/share/man/man5/sshd_config.5
/usr/bin/install -c -m 644 ssh_config.5.out /usr/share/man/man5/ssh_config.5
/usr/bin/install -c -m 644 sshd.8.out /usr/share/man/man8/sshd.8
/usr/bin/install -c -m 644 sftp.1.out /usr/share/man/man1/sftp.1
/usr/bin/install -c -m 644 sftp-server.8.out /usr/share/man/man8/sftp-server.8
/usr/bin/install -c -m 644 ssh-keysign.8.out /usr/share/man/man8/ssh-keysign.8
/usr/bin/install -c -m 644 ssh-pkcs11-helper.8.out /usr/share/man/man8/ssh-pkcs11-helper.8
/bin/mkdir -p /etc/ssh
ssh-keygen: generating new host keys: RSA DSA ECDSA ED25519
/usr/sbin/sshd -t -f /etc/ssh/sshd_config

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章