vscode使用sftp同步服務器文件


環境介紹

服務器:騰訊雲 + centos + onestack搭建好的lnmp環境

本地:mac

安裝openssh

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

配置

ssh方式連接sftp的配置文件在/etc/ssh/sshd_config, 可以在該文件指定端口號和相關參數。修改配置后需要重啟ssh

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

命令行連接sftp

本地終端執行:

sftp -P22 root@{ip地址}
# 設置了密碼的需要輸入登錄密碼。

連接成功后默認進入的是登錄用戶的用戶目錄,root用戶進入到/root目錄,admin用戶進入到/home/admin目錄。

問題:vscode 無法同步

初始配置

{
    "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"]
}

問題

終端連接成功后,配置sftp sync插件,但是上傳和下載時提示Permission Denied

問題分析

由於我的服務器上root用戶配置了禁用密碼登錄,只能使用ssh登錄,所以不用設置password項,即使設置了也是無效的。而sftp的配置默認加載的私鑰文件是~/.ssh/id_rsa。而我設置連接服務器的秘鑰文件是~/.ssh/github_rsa

調整后:

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

繞了一大圈的感覺,但是不知道這種方式對於企業級項目會不會存在安全隱患,目前個人服務器上使用對於安全的要求沒有那么大,先這樣使用,如果有問題再做調整。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM