簡體   English   中英

SFTP刪除權限被拒絕

[英]SFTP remove permission denied

我正在使用SFTP客戶端從SFTP服務器獲取文件。 我能夠成功讀取並存儲文件,但在保存完文件后無法將其從SFTP服務器刪除。

require 'net/sftp'

class Sftp
  def self.save
    Net::SFTP.start(somehost, ****, password: ****) do |sftp|
      sftp.dir.foreach("/files") do |entry|
        next unless entry.file?

        file_name = entry.name
        source_file = "/files/#{file_name}"
        destination_file = "tmp/#{file_name}"

        sftp.download!(source_file, destination_file)

        df = File.open(destination_file, "r")
        file_data = df.read

        # Some logic to utilise read file info. in variable "file_data"

        File.delete(df) # deleted from tmp
        sftp.remove!(source_file) # deleted from sftp server
      end
    end
  end
end

當執行sftp.remove!(source_file) ,出現如下錯誤:

“ Net :: SFTP :: StatusException(3,\\“權限被拒絕\\”)“

文件目錄權限

drwxr-xr-x  2 root    root    4096 Dec 22 10:54 files

文件目錄中文件的權限:

drwxr-xr-x 2 root root   4096 Dec 22 10:54 .
drwxr-xr-x 4 root root   4096 Dec 18 15:29 ..
-rwxrwxrwx 1 root root 749199 Dec 18 14:39 a.pdf
-rwxrwxrwx 1 root root   7945 Dec 18 15:41 b.pdf
-rwxrwxrwx 1 root root   7945 Dec 22 10:54 c.pdf

編輯

我替換了以下代碼

sftp.remove!(source_file)

sftp.send(:exec, "sudo rm /var/sftp/#{source_file}")

現在,刪除有效,但僅適用於第一個文件。 然后循環退出,沒有任何錯誤。

可能是什么原因?

我假設您以root以外的用戶身份登錄到遠程主機。 這個對嗎?

您的問題是root是遠程主機上那些文件的所有者,並且作為root以外的用戶,您無權刪除它們。

如果您控制着遠程文件,則可能希望由root用戶以外的其他用戶保存它們-一個可以登錄並刪除它們的用戶,但另一個則不能,假設您不希望其他人能夠刪除文件。

如果您以root用戶身份登錄到該服務器,則應該能夠刪除文件。

關於此代碼:

df = File.open(destination_file, "r")
file_data = df.read
File.delete(df) # deleted from tmp

這是完成刪除文件的過於復雜的方法。 您正在將文件的數據讀取到file_data ,但未對其執行任何操作。 同樣,也無需打開文件來刪除它-您可以在filespec而不是File對象上調用File.delete

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM