2017-07-12 118 views
-2

我正在使用JSch來訪問sftp文件。上傳後,我更改了文件的權限。但如何改變業主?我找不到有好的例子。我想如何使用JSch sftp chown?

chown Administrator:Administrators filename.exe 

就像你在Linux會做,但JSch chown命令取整數,而不是業主的字符串:組。那是什麼樣的廢話?

下面是我的一些代碼

jSch = new JSch(); 
    if (useKey) jSch.addIdentity(privateKey); 
    session = jSch.getSession(user, host, port); 
    if (!useKey) { 
     session.setPassword(pass); 
     session.setConfig("PreferredAuthentications", "password"); 
    } 
    session.setConfig("StrictHostKeyChecking", "no"); 
    session.connect(FTP_TIMEOUT); 
    channel = session.openChannel("sftp"); 
    sftp = (ChannelSftp) channel; 
    sftp.connect(FTP_TIMEOUT); 

    sftp.put(fis,file.getName()); 
    String permissions = "744";  
    int octal = Integer.parseInt(permissions,8); //jsh uses octal, not decimal 
    if (file.getName().endsWith(".exe")) { //make exe files executable 
     sftp.chmod(octal,file.getName()); 
     sftp.chown(this-is-an-integer-not-a-string, file.getName()); 
    } 

回答

0

chown與UID使用的方法,請參考javadocs。您正在嘗試將權限編譯爲UID,這是錯誤的。請找到您想要更改的用戶的UID,然後傳遞給chown函數。如果你的服務器是linux,你可以參考here

+0

店主是管理員,這是正確的。但是該組是None並且應該是Administrators。只有UID輸入時如何更改組? – user3217883

0

JSCH執行SFTP version 3。 SFTP版本3爲文件的所有者和組使用數值。想要更改服務器上文件的所有者或組的用戶必須知道要請求的正確數值。

請注意,OpenSSH SFTP服務器還實現SFTP版本3.這是最廣泛使用的SFTP服務器,它可能是您正在使用的服務器。據我所知,它不支持將所有者名稱作爲字符串的chown操作。

它看起來像SFTP version 4和更高版本支持傳遞所有者和組作爲字符串。您可能能夠找到支持此功能的第三方(即商業)SFTP客戶端和服務器。