VSCode连接SFTP

前言

之前使用VSCode的SFTP插件一直用的是FTP,这次想尝试使用SFTP用基于密匙的方式来向服务器传输文件,并且需要限制用户的访问目录。

同时想让SFTP上传的文件让Nginx和PHP-FPM也能访问修改(虽然直接把网站目录的权限设置成777也能更方便的解决,但不是很想这样操作)。

思路

由于Laravel(PHP的框架)会产生日志等文件,又需要使用SFTP来下载或修改这些日志。并且SFTP上传的文件可能也会被Laravel所使用。所以如果能让SFTP的用户和Laravel所使用的用户一样,就可以不用担心权限问题。而Laravel生成文件的用户即是PHP-FPM的配置用户(默认为nobody),同时Nginx的默认用户也是nobody。

所以只需要把网站目录的相关文件的用户和用户组修改成nobody,并且用nobody去登录SFTP就能解决了。

说明:同样的思路,如果你不想使用nobody,换成其他的也行。

配置

服务端

由于nobody是伪用户,所以需要先给其创建个家目录,以便存放客户端的公匙。

# 1、手动创建.ssh目录
# 因为nobody是伪用户没有家目录,所以先要配置一下
# 家目录位置,看自己习惯就好
mkdir /var/empty/nobody 

# 修改权限
chown nobody:nobody /var/empty/nobody
chmod 700 /var/empty/nobody

# 在passwd中手动改下家目录的位置,用命令修改不了,因为nobody用户已经是登录状态。
vi /etc/passwd 
---
nobody:x:65534:65534:Kernel Overflow User:/var/empty/nobody:/sbin/nologin

# 进入目录,用nobody身份操作
cd /var/empty/nobody
su -s /bin/bash nobody # 切换身份
mkdir .ssh

# 2、添加公匙
echo 客户端的公匙 >> .ssh/authorized_keys

# 3、切换回root
exit

然后修改配置文件,把用户限制在指定目录下面

vi /etc/ssh/sshd_config
---

# 这个一定要放在Match前面,不然root用户不能登录
PermitRootLogin yes

Subsystem  sftp internal-sftp
Match User nobody # 配置nobody用户
    ChrootDirectory /var/www # 限制访问目录的上一级目录,这个目录的所有权只能是root:root
    X11Forwarding no
    AllowTcpForwarding no
    ForceCommand internal-sftp -d /test # 限制访问目录 完整的就是:/var/www/test

重启服务即可

systemctl restart sshd

客户端

客户端使用的是VSCode的SFTP插件

注意:这个插件被翻新了一版,之前的被废弃了我使用的新的,可能配置会有稍微的不同。

VSCode的新SFTP插件

{
    "name": "test",
    "host": "192.168.137.137",
    "protocol": "sftp",
    "port": 22,
    "username": "nobody",
    "privateKeyPath": "C:\\Users\\xxx\\.ssh\\id_rsa", // 私匙的存放位置
    "uploadOnSave": false,
    "useTempFile": false,
    "openSsh": true
}

结语

至此就能以nobody的身份上传下载文件,并且与框架自身产生的文件的权限不会冲突。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值