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系统下看到文件拷贝成功:

扫描二维码关注公众号,回复: 9060028 查看本文章

下面介绍下服务端如何设置。

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
发布了87 篇原创文章 · 获赞 64 · 访问量 25万+

猜你喜欢

转载自blog.csdn.net/wqfhenanxc/article/details/96435104