如何使用JSch sftp chown?

时间:2017-07-12 21:58:02

标签: java sftp jsch

我正在使用JSch来sftp文件。上传后,我更改了文件的权限。但是如何改变主人呢?我找不到好的例子。我想

chown Administrator:Administrators filename.exe
就像你在Linux中所做的那样,但是JSch chown命令采用整数,而不是所有者:group的字符串。这是什么废话?

以下是我的一些代码

    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());
    }

3 个答案:

答案 0 :(得分:0)

方法chown正在使用UID,请参阅javadocs。您正在尝试将权限编译为UID,这是错误的。请找到您要更改的用户的UID,然后转到chown功能。如果您的服务器是Linux,您可以参考here

答案 1 :(得分:0)

JSCH实现SFTP version 3。 SFTP版本3使用文件所有者和组的数值。想要更改服务器上文件的所有者或组的客户端必须知道要请求的正确数值。

请注意,OpenSSH SFTP服务器还实现了SFTP版本3.这是使用最广泛的SFTP服务器,它可能就是您正在使用的服务器。据我所知,它不支持将所有者名称作为字符串的chown操作。

看起来像SFTP version 4,后来支持将所有者和组作为字符串传递。您可能能够找到支持此功能的第三方(即商业)SFTP客户端和服务器。

答案 2 :(得分:-1)

下面是将文件的权限更改为777或-rwxrwxrwx的完整代码

JSch jsch = new JSch();
Session session = jsch.getSession("root", "192.168.1.5", 22);
session.setPassword("your_password");
session.setConfig("StrictHostKeyChecking", "no");
session.connect();
Channel channel = session.openChannel("sftp");
channel.connect();
ChannelSftp cFTP = (ChannelSftp) channel;
jsch.setConfig("StrictHostKeyChecking", "no");
String targetFile = "/var/lib/asterisk/sounds/en/"+ "foo.mp3";

cFTP.chmod(0777, targetFile); //This will change the permissions to 777

cFTP.disconnect();
session.disconnect();