2017-07-12 87 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客户端和服务器。