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用戶訪問。

繞了一大圈的感受,可是不知道這種方式對於企業級項目會不會存在安全隱患,目前我的服務器上使用對於安全的要求沒有那麼大,先這樣使用,若是有問題再作調整。

相關文章
相關標籤/搜索