【问题标题】:how to chown using JSch sftp?如何使用 JSch sftp 进行 chown?
【发布时间】:2017-07-12 21:58:01
【问题描述】:

我正在使用 JSch 来 sftp 文件。上传后,我更改了文件的权限。但是如何更改所有者?我找不到很好的例子。我想要

chown Administrator:Administrators filename.exe

就像你在 linux 中所做的那样,但是 JSch chown 命令接受一个整数,而不是 owner: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());
    }

【问题讨论】:

    标签: java sftp jsch


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      chown 方法使用 UID,请参考javadocs。您正在尝试将权限编译为 UID,这是错误的。请找到您要更改的用户的 UID,然后传递给chown 函数。如果你的服务器是 linux 你可以参考here

      【讨论】:

      • 所有者是管理员,这是正确的。但该组是无,应该是管理员。只有 UID 输入时如何更改组?
      【解决方案3】:

      以下是将文件权限更改为 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();
      

      【讨论】:

      • 问题不是问如何修改文件。
      猜你喜欢
      • 2013-02-13
      • 2017-10-10
      • 1970-01-01
      • 2011-07-30
      • 1970-01-01
      • 1970-01-01
      • 2020-06-18
      • 2011-06-09
      • 2015-12-27
      相关资源
      最近更新 更多