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

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值