1、创建sftp用户组和sftp用户
[root@lcjianCentOS7 home]# groupadd sftp
[root@lcjianCentOS7 home]# useradd -g sftp sftpuser 
[root@lcjianCentOS7 home]# passwd sftpuser
更改用户 sftpuser 的密码 。
新的 密码:
无效的密码: 密码未通过字典检查 - 过于简单化/系统化
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@lcjianCentOS7 home]# 
2、创建sftp的上传下载目录,并将该路径设置位sftp用户的根目录,将路径所有者改成root,并设定路径权限755
[root@lcjianCentOS7 data]# mkdir /data/datafiles
[root@lcjianCentOS7 data]# usermod -d /data/datafiles/ sftpuser
[root@lcjianCentOS7 data]# chown -R root:root /data/datafiles/
[root@lcjianCentOS7 data]# chmod 755 /data/datafiles/
[root@lcjianCentOS7 data]# ll /data/
总用量 0
drwxr-xr-x. 2 root root  6 727 14:24 datafiles
d---------. 3 root root 35 1027 2021 oracle
3、建立SFTP用户登入后可写入的目录,并将路径所有者改为sftpuser
[root@lcjianCentOS7 data]# mkdir /data/datafiles/sftpuser/
[root@lcjianCentOS7 data]# chown -R sftpuser:sftp  /data/datafiles/sftpuser/
[root@lcjianCentOS7 data]# chmod 755 /data/datafiles/sftpuser/
4、重启sshd服务
[root@lcjianCentOS7 data]# service sshd restart
5、换另一台服务器测试连接
[root@hadoop102 ~]# sftp -P 22 sftpuser@192.168.13.128
The authenticity of host '192.168.13.128 (192.168.13.128)' can't be established.
ECDSA key fingerprint is SHA256:rMuKJLTdpYCNs5dqEM45ETB1nFWrXu+GKGjIn0rLiBA.
ECDSA key fingerprint is MD5:38:f7:e6:06:f8:92:dc:ec:c8:a3:27:cd:c4:cd:3b:c2.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.13.128' (ECDSA) to the list of known hosts.
sftpuser@192.168.13.128's password: 
Connected to 192.168.13.128.
sftp> 

注:sftp默认端口:22

6、优化 – 修改配置文件
[root@lcjianCentOS7 data]# vi /etc/ssh/sshd_config 
1)注释掉:Subsystem sftp /usr/libexec/openssh/sftp-server
2)并在文件末尾添加如下语句:
Subsystem sftp internal-sftp
Match User sftpuser
ChrootDirectory /data/datafiles
ForceCommand    internal-sftp
AllowTcpForwarding no
X11Forwarding no

说明:
sftp-server和internal-sftp都是OpenSSH的一部分。
sftp-server是一个独立的二进制文件, internal-sftp只是一个配置关键字,告诉sshd使用内置sshd的SFTP服务器代码,而不是运行另一个进程(通常是sftp-server)。
从功能的角度来看,sftp-server和internal-sftp几乎完全相同。 它们是使用相同的源代码构建的。
internal-sftp的主要优点是,当与ChrootDirectory指令一起使用时,它不需要任何支持文件。
注:修改了配置文件后,需要重启sshd才能生效。

7、sftp连接可能的报错案例:
[root@hadoop102 .ssh]# sftp -P 22 sftpuser@192.168.13.128
sftpuser@192.168.13.128's password: 
Authentication failed.
Couldn't read packet: Connection reset by peer
[root@hadoop102 .ssh]# 

出现报错的原因:我将配置了sftp服务的这台服务器重启了

原因分析:Linux服务器上的一个配置文件known_hosts,是做服务器认证的。
通过sftp命令连接另一台配置了sftp服务的服务器,首次连接时,先从对方服务器获取认证,并将认证信息保存至本地known_hosts文件,之后再次连接该服务器时,直接从本地known_hosts文件获取认证信息,不用在做认证,有助于减少连接时间。
但如果对方服务器重启或者其它什么原因造成服务器的公钥、密钥发生变化,在通过sftp连接该服务器时通过本地保存的认证信息无法完成认证,就会出现报错,认证失败。

解决方法:到本地known_hosts文件根据IP将报错的服务器认证信息删除,再次连接时会重新从对方服务器获取认证

[root@hadoop102 .ssh]# vi /root/.ssh/known_hosts
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐