大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
sftp,是ssh的功能之一,也就是说是使用SSH协议来传输文件的。
OS系统内开启ssh服务和sftp服务都是通过/usr/sbin/sshd这个后台程序监听22端口,而sftp服务作为一个子服务,是通过/etc/ssh/sshd_config配置文件中的Subsystem实现的,如果没有配置Subsystem参数,则系统是不能进行sftp访问的。
具体操作(本验证在Red Hat Linux7.9上进行):
一、复制SSH相关文件,作为sftp的配置文件
1、拷贝/usr/lib/systemd/system/目录下的sshd.service文件,放到/etc/systemd/system/目录下,命名为sftpd.service
cp /usr/lib/systemd/system/sshd.service /etc/systemd/system/sftpd.service
2、拷贝/etc/pam.d/目录下的sshd文件,放到同目录,命名为sftpd
cp /etc/pam.d/sshd /etc/pam.d/sftpd
3、拷贝/etc/ssh/目录下的sshd_config文件,放到同目录,命名为sftpd_config
cp /etc/ssh/sshd_config /etc/ssh/sftpd_config
4、对service和rcsftpd进行软连接
ln -sf /usr/sbin/service /usr/sbin/rcsftpd
5、对sshd和sftpd进行软连接
ln -sf /usr/sbin/sshd /usr/sbin/sftpd
6、拷贝/etc/sysconfig/目录下的sshd文件,放到同目录,命名为sftp
cp /etc/sysconfig/sshd /etc/sysconfig/sftp
7、拷贝/var/run/目录下的sshd.pid文件,放到同目录,命名为sftpd.pid
cp /var/run/sshd.pid /var/run/sftpd.pid
二、修改复制好的配置文件
1、修改/etc/systemd/system/目录下sftpd.service文件
vi /etc/systemd/system/sftpd.service
修改图中圈红部分:
[Unit]
Description=sftpd server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target sshd-keygen.service
Wants=sshd-keygen.service
[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/sftp
ExecStart=/usr/sbin/sftpd -f /etc/ssh/sftpd_config
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
2、修改/etc/ssh/目录下的sftpd_config文件
vi /etc/ssh/sftpd_config
执行 :set number 将行号显示出来后,具体修改如下:
①找到第17行,将
#Port 22
改成
Port 2222
②找到第38行,将
#PermitRootLogin yes
改成
PermitRootLogin no
也就是取消该行的注释,并将yes改成no,这行参数的目的是拒绝root用户登录
③找到116行,将
#PidFile /var/run/sshd.pid
改成
PidFile /var/run/sftpd.pid
也就是取消该行的注释,并将sshd.pid改成sftpd.pid
④找到第132行,将
Subsystem sftp /usr/libexec/openssh/sftp-server
注释
#Subsystem sftp /usr/libexec/openssh/sftp-server,并添以下5行:
Subsystem sftp internal-sftp # 指定使用sftp服务使用系统自带的internal-sftp
Match User sftpuser # 匹配sftp组的用户,若要匹配多个组,可用逗号分开
X11Forwarding no # 禁止用户使用端口转发
AllowTcpForwarding no # 禁止用户使用端口转发
ForceCommand internal-sftp # 只能用于sftp登录
3、清空/var/run/目录下的sftpd.pid文件内容
> /var/run/sftpd.pid
4、添加sftp的专用账户
useradd sftpuser
passwd sftpuser
usermod -s /bin/false sftpuser
5、禁用selinux
setenforce 0
sed -i "s/^SELINUX\=enforcing/SELINUX\=disabled/g" /etc/selinux/config
6、重启sftpd服务
systemctl daemon-reload
systemctl restart sftpd
7、检查是否添加sftpd服务开机自启动
systemctl enable sftpd
三、验证问题解决
验证的时候,发现
sftp root@10.127.1.111
sftp sftpuser@10.127.1.111
也就是默认的22端口依然能够成功连接,解决方法是:
将/etc/ssh/sshd_config文件中的第132行
Subsystem sftp /usr/libexec/openssh/sftp-server
注释掉
#Subsystem sftp /usr/libexec/openssh/sftp-server
然后重启sshd服务
systemctl restart sshd
这样就只有
sftp -P 2222 sftpuser@10.127.1.111
能够连接成功。
原因:sftp服务是通过/etc/ssh/sshd_config配置文件中的Subsystem实现的,注释掉Subsystem参数配置,OS系统就不会通过默认的sftp形式进行访问了。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/194015.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...