SCP權限被拒絕:原因及解決方法
SCP 是一種用於透過 SSH 傳輸檔案的開源工具。您可以在 Linux 和其他受支援的作業系統上使用它,透過 SSH 傳輸檔案。它可用於使用 SSH 連線在兩台主機之間傳輸檔案。

SCP 中出現「權限被拒絕」錯誤可能由多種原因引起,例如路徑定義錯誤或寫入權限錯誤。我們將探討導致此錯誤的一些原因以及解決方法。
原因:缺少寫入權限
出現此錯誤的原因之一是您的使用者沒有嘗試寫入檔案的主機上的指定目錄的寫入權限。若要檢查這些權限,您可以使用指令「ls -l」,該指令將顯示寫入權限。

在輸出結果的第一列前四個字元中尋找字母“w”。如果找到,則表示您的使用者擁有該目錄的寫入權限。或者,您也可以在該目錄中使用 touch 指令建立檔案。如果沒有收到任何錯誤訊息(例如「權限被拒絕」),則表示您的使用者擁有寫入權限。
例子:
假設你想使用 SCP 將檔案複製到遠端主機,但由於寫入權限問題,你收到「權限被拒絕」錯誤。
scp abcd.txt user@127.0.0.1:/home/abcduser/abcd.txt
解決方案 1:使用 root 帳號傳輸文件
要解決此錯誤,您需要授予您的使用者對該目錄的寫入權限。因此,您需要 root 或 sudo 權限。另一種方法是將檔案複製到您的使用者擁有寫入權限的目錄中。
在這種情況下,要么需要允許當前使用者對 /home/abcduser 擁有寫入權限,要么可以使用 root 使用者帳戶複製此檔案。
要允許 root 使用者使用 scp 複製文件,您需要允許 root 使用者透過 ssh 登錄,出於安全原因不建議這樣做,但您仍然可以在這種情況下使用它,並在之後停用它。
為此,請在遠端主機上使用文字編輯器開啟/etc/ssh/sshd_config 中的 openssh 設定文件,並取消註解 PermitRootLogin 。

接下來,使用遠端主機的 root 帳戶連接到遠端主機。
然後按如下方式運行命令:
scp abcd.txt root@127.0.0.1:/abcduser/abcd.txt
或者簡單地說,這樣做就能解決問題。
scp abcd.txt 127.0.0.1:/abcduser/abcd.txt
因為它們完全相同。
方案二:將您的使用者加入到寫入權限群組:
要讓使用者能夠在 Linux 中寫入目錄/文件,你需要將使用者加入到擁有該目錄或文件的群組,或將該文件的所有權授予該使用者。
在我們的範例中,我們在遠端系統的 /home/ 目錄上執行 ls -l 命令,以找出哪個群組擁有 /home/abcd。
`ls -l` 指令會給予輸出,其中第四列的內容是擁有對應目錄/檔案的群組。

在我們的範例中,`abcduser` 群組擁有目錄 `/home/abcduser`,因此我們可以
只需在遠端系統上運行此命令即可。
sudo groupadd user abcd
我們希望使用者加入的群組是「abcd」 ,而我們要變更的群組的使用者是「user」。
再次執行 `ls -l` 指令,如果在第一列輸出的第六個位置看到字母「w」 ,則表示該群組對該目錄具有寫入權限。
然後再次運行該命令,在本例中為:
scp abcd.txt user@somepc:/home/abcduser/abcd.txt
解決方案 3:使用該目錄的擁有者使用者複製檔案。
最簡單的解決方法是讓擁有該目錄的使用者將檔案複製到該目錄中。
只需對目錄執行 `ls -l` 命令即可。在本例中,結果將是:
ls -l /home/

第三列的輸出結果將顯示擁有與您感興趣的目錄名稱對應的目錄的使用者。在本例中,如上圖所示,`abcduser` 擁有目錄 `/home/abcduser`。
然後使用此特定帳戶,透過 `scp` 將檔案複製到遠端主機。
在本例中,我們按如下方式運行命令:
scp abcd.txt abcduser@127.0.0.1:/home/abcduser/abcd.txt
原因 2:遠端主機沒有該使用者的私鑰。
嘗試在主機之間傳輸檔案時,可能會收到「scp 權限被拒絕(公鑰)」的錯誤提示。
這是 `ssh` 的身份驗證問題,原因是您在 `scp` 運行時沒有新增私鑰。
例子:
scp somefile user@127.0.0.1:/home/user/somefile.txt
解決方案:
解決此問題的簡單方法是使用 `-i` 標誌運行 `scp` 命令,從而添加要連接到遠端主機並向其傳輸檔案的使用者的私鑰。
您需要確保擁有該使用者的私鑰,如果沒有,則需要在遠端電腦上建立私鑰,然後讓 `scp` 工具使用 `-i` 標籤來使用它。
就我們的情況而言,解決方案是:
scp -i key.pem somefile user@127.0.0.1:/home/user/somefile.txt
其中 `key.pem` 是使用者「user」的私鑰檔案。
注意:我們只是在範例中使用了`127.0.0.1`作為遠端主機;在您的情況下,遠端主機更可能是遠端電腦而不是您的本機電腦。
評論被關閉。