版本說明:
Windows 10
CentOS 7
WinSCP 5.7.7 (Build 6257)
問題背景
使用 WinSCP 登錄 CentOS 上傳文件,使用的是普通用戶,且已加入 sudoers
,向 /usr/local
目錄上傳文件時,提示沒有權限。
解決方案
-
首先確保你的目標主機的
sshd
服務正在運行 -
用來在 WinSCP 登錄的普通用戶已加入
sudoers
-
獲取
sftp-server
的位置- 從
/etc/ssh/sshd_config
文件中獲取:
sudo cat /etc/ssh/sshd_config | grep sftp
結果:
Subsystem sftp /usr/libexec/openssh/sftp-server
- 直接查找:
sudo updatedb
locate sftp-server
結果:
/usr/libexec/openssh/sftp-server
/usr/share/man/man8/sftp-server.8.gz - 從
-
以管理員方式運行 WinSCP,打開對應帳戶的
Advanced Site Settings
對話框中,選中Environment
→SFTP
節點,在右邊的Protocol options
-SFTP server
輸入框中,填入sudo -s /usr/libexec/openssh/sftp-server
,這里的/usr/libexec/openssh/sftp-server
換成在你的系統中,由第 3 步得到的路徑,之后保存。 -
在 CentOS 中執行
sudo visudo
以編輯/etc/sudoers
文件- 找到需要在 WinSCP 登錄的賬戶名配置信息,大概在第 98 行,將:
myloginname ALL=(ALL) ALL
改為:myloginname ALL=(ALL) NOPASSWD: ALL
。這一步的目的是切換為root
角色時不需要輸入密碼,因為 WinSCP 只能執行不需要請求用戶輸入其他信息(比如:密碼等)的命令。
切記:記得使用完后,將這一行的內容恢復到修改前的樣子! - 找到
Defaults requiretty
這一行,在前面加一個#
號注釋掉這一行,這一步的目的是關閉控制終端。
- 找到需要在 WinSCP 登錄的賬戶名配置信息,大概在第 98 行,將:
到此,即可以 root
角色登錄系統啦!
解決方案優化
也許你擔心由於上述解決方案的第 5 步,在切換為 root
時不需要輸入密碼,會造成系統不安全。
確實是這樣,如果你系統安全要求較高,我建議你新建一個帳戶,專門用於 WinSCP 中以 root
角色登錄。