WinSCP 用 sudo 上傳檔案的方法
Contents
使用 WinSCP 透過 SFTP 上傳檔案時,如果目標目錄屬於 root 或特定群組,一般使用者沒有寫入權限,就會遇到「Permission denied」的錯誤。此時需要讓 WinSCP 的 SFTP 連線以 sudo 方式執行,才能突破目錄權限限制。
為什麼需要 sudo 上傳?
Linux 系統的目錄通常有嚴格的權限控制。例如 /etc/nginx/conf.d/ 或 /var/www/html/ 這類目錄,擁有者可能是 root,一般使用者即使能 SSH 登入也無法直接寫入。使用 WinSCP 以一般帳號連線時,SFTP 服務以該帳號的身份執行,自然也無法寫入 root 所有的目錄。
解決方法一:修改 SFTP Server 路徑(推薦)
在 WinSCP 中將 SFTP Server 的執行路徑改為透過 sudo 啟動,步驟如下:
- 開啟 WinSCP,選擇或建立一個 Session
- 點選 Advanced…(進階設定)
- 展開左側 Environment → SFTP
- 找到 SFTP server 欄位,預設是空白(使用系統預設)
- 填入以下路徑:
|
|
注意:不同 Linux 發行版的 sftp-server 路徑可能不同,常見路徑:
- Ubuntu / Debian:
/usr/lib/openssh/sftp-server- CentOS / RHEL:
/usr/libexec/openssh/sftp-server
- 確認伺服器端的
/etc/sudoers允許該使用者無密碼執行 sftp-server:
|
|
設定完成後,WinSCP 連線時 SFTP 會以 root 身份執行,即可上傳到受保護的目錄。
解決方法二:先上傳到 /tmp,再用 SSH 移動
如果不想修改 sudoers,可採用兩段式做法:
- 用 WinSCP 將檔案上傳到使用者有寫入權限的目錄,例如
/home/youruser/或/tmp/ - 在 WinSCP 的 Terminal 或另開 SSH 連線,用指令移動:
|
|
解決方法三:修改目標目錄的權限
如果目錄是自己管理的(非系統目錄),可以直接修改擁有者或群組:
|
|
修改後重新登入讓群組生效,即可直接上傳,不需要 sudo 設定。
切換群組(newgrp)
若要在目前 Session 中立即切換有效群組而不重新登入,可使用:
|
|