vscode使用sftp同步服务器文件

环境介绍

服务器:腾讯云 + centos + onestack搭建好的lnmp环境node

本地:macnginx

安装openssh

sudo yum install openssh-client openssh-server openssh-sftp-server

配置

ssh方式链接sftp的配置文件在/etc/ssh/sshd_config, 能够在该文件指定端口号和相关参数。修改配置后须要重启sshgit

  • centos: systemctl restart sshd
  • ubuntu: service restart ssh

命令行链接sftp

本地终端执行:github

sftp -P22 root@{ip地址}
# 设置了密码的须要输入登陆密码。

链接成功后默认进入的是登陆用户的用户目录,root用户进入到/root目录,admin用户进入到/home/admin目录。web

问题:vscode 没法同步

初始配置json

{
    "name": "{服务器ip}",
    "host": "{服务器ip}",
    "protocol": "sftp",
    "port": 22,
    "username": "root",
    "password": "{对应的用户密码}",
    "remotePath": "/data/wwwroot/www.i2arch.tech/frontend",
    "uploadOnSave": true,
    "ignore": [".vscode", ".git", ".DS_Store", "node_modules", "vendor"]
}

问题ubuntu

终端链接成功后,配置sftp sync插件,可是上传和下载时提示Permission Deniedcentos

问题分析安全

因为个人服务器上root用户配置了禁用密码登陆,只能使用ssh登陆,因此不用设置password项,即便设置了也是无效的。而sftp的配置默认加载的私钥文件是~/.ssh/id_rsa。而我设置链接服务器的秘钥文件是~/.ssh/github_rsabash

调整后:

{
    "name": "{服务器ip}",
    "host": "{服务器ip}",
    "protocol": "sftp",
    "port": 22,
    "username": "root",
    "remotePath": "/data/wwwroot/www.i2arch.tech/frontend",
    "privateKeyPath": "/Users/kameila/.ssh/github_rsa",
    "uploadOnSave": true,
    "ignore": [".vscode", ".git", ".DS_Store", "node_modules", "vendor"]
}

此后即可以成功同步服务器文件。

备注

起初服务器搭建sftp参考了教程Linux 配置SFTP,配置用户访问权限,按操做建立单独的sftp用户组sftp-users,单独的sftp用户admin,单独的文件同步目录/home/admin,等等。可是操做完有一系列问题。

问题1: 单独的文件同步目录/home/admin须要设置成sftp用户组和用户的访问权限,可是个人web服务器nginx的目录是/data/wwwroot/www.i2arch.tech/frontend,而且nginx配置里面须要web目录的权限用户组和用户是www。这致使sftp同步文件以后还须要考虑方案来让nginx服务器直接可以访问sftp同步目录。

对于sftp同步目录nginx的web目录不一致的问题还能够经过修改nginx虚拟主机配置文件的根目录或者创建软链的方式解决,可是目录权限的问题却没有想到好的办法。

通过一系列尝试之后,最后想着与其修改nginx的配置重定义根目录用户组和用户,不如经过修改sftp组名和用户名的方式调整,而且后来查看公司sftp的配置文件,发现公司的这个配置文件并无从新定义用户组和用户,因此感受好像不必建立单独的组合用户,因而索性没再按照上述教程中的步骤,直接经过root或admin用户访问。

绕了一大圈的感受,可是不知道这种方式对于企业级项目会不会存在安全隐患,目前我的服务器上使用对于安全的要求没有那么大,先这样使用,若是有问题再作调整。