sftp的默认端口为sshd的端口,为22端口。
1、查看openssh版本 ssh -V
[root@localhost ~]# ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
openssh版本要求大于4.8p1。
2、创建sftp组
groupadd sftp
3、创建sftp用户
[root@localhost ~]# useradd -g sftp -s /sbin/nologin -M sftpUser
[root@localhost ~]# passwd sftpUser
输入密码 www@ftpcom
说明:
-g 分组
-s /sbin/nologin 不允许该用户shell登录
-M 不自动建立用户的目录
4、创建目录
[root@localhost ~]# mkdir -p /data/sftp/mysftp
[root@localhost ~]# usermod -d /data/sftp/mysftp sftpUser
5、修改配置文件 sshd_config
vim /etc/ssh/sshd_config
修改下面一行:
# Subsystem sftp /usr/libexec/openssh/sftp-server
改成
Subsystem sftp internal-sftp
# 添加以下内容:
Match Group sftp # 限制的用户组
ChrootDirectory /data/sftp/mysftp # 根目录
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
6、 设置Chroot目录权限
chown root:sftp /data/sftp/mysftp
chmod 755 /data/sftp/mysftp
7、设置可以写入的目录
mkdir /data/sftp/mysftp/upload
chown sftpUser:sftp /data/sftp/mysftp/upload
chmod 755 /data/sftp/mysftp/upload
需要关闭selinux
vim /etc/selinux/config
将文件中的SELINUX=enforcing 修改为 SELINUX=disabled
8、重启ssh
[root@localhost ~]# systemctl restart sshd.service
9、测试连接
1)、本机测试连接 sftp sftpUser@localhost
[root@localhost ~]# sftp sftpUser@localhost
The authenticity of host 'localhost (::1)' can't be established.
ECDSA key fingerprint is SHA256:j6JeorjQwdwSgYUUXUOaq/rtCEfQ/Qa6qvj9S/cRCVg.
ECDSA key fingerprint is MD5:e8:9e:2d:47:a9:87:cc:c9:57:d1:8f:b0:64:b9:b5:b0.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
sftpUser@localhost's password:
Connected to localhost.
sftp>
2)、其他机器连接 sftp sftpUser@10.20.0.14
[root@localhost ~]# sftp sftpUser@10.20.0.14
sftpUser@10.20.0.14's password:
Connected to 10.20.0.14.
sftp>
3)、使用端口连接 sftp -P 22 sftpUser@10.20.0.14
[root@localhost ~]# sftp -P 22 sftpUser@10.20.0.14
sftpUser@10.20.0.14's password:
Connected to 10.20.0.14.
sftp>
其实我是想使用一个其他的端口,如 sftp -P 6666 sftpUser@10.20.0.14,但是在连接的时候并不能连接成功。也有说法是: 使用 -o 指定端口号,但是也没有用。 猜测应该是要修改sftp的端口才能生效,这里并没有继续往下尝试。
[root@localhost ~]# sftp -oPort=60001 sftpUser@10.20.0.14
ssh: connect to host 10.20.0.14 port 60001: Connection refused
Couldn't read packet: Connection reset by peer
[root@localhost ~]# sftp -P 6666 sftpUser@10.20.0.14
ssh: connect to host 10.20.0.14 port 6666: Connection refused
Couldn't read packet: Connection reset by peer
[root@localhost ~]#
遇到的问题: 重启ssh服务
[root@host-10-190-5-60 ~]# systemctl restart sshd.service
Job for sshd.service failed because the control process exited with error code. See "systemctl status sshd.service" and "journalctl -xe" for details.
通过查看 systemctl status sshd.service 和 journalctl -xe 来发现问题
最后发现错误为 : Directive 'ListenAddress' is not allowed within a Match block
然后根据提示 错误在配置文件/etc/ssh/sshd_config的第152行,然后找到第152行:
内容为: ListenAddress 0.0.0.0:22
解决办法:将这一行注释即可。
# ListenAddress 0.0.0.0:22
还有另一种说法,将0.0.0.0 换成本机IP,但是我试了之后,重启sshd服务还是会出现之前的问题。