使用 JSch 通过 SFTP 或 SCP 更改文件权限

Posted

技术标签:

【中文标题】使用 JSch 通过 SFTP 或 SCP 更改文件权限【英文标题】:Change file permissions with SFTP or SCP uing JSch 【发布时间】:2016-02-22 15:09:42 【问题描述】:

我有一个用户帐户,但在尝试使用此帐户时,rssh 出现异常。是否有可能使用ChannelExec 以外的其他方式授予目录权限。根据例外情况,我知道这个帐户不能使用ChannelExec 来授予目录或文件的权限。因此,该帐户是否有任何其他方式可以授予文件权限,而无需访问该用户帐户 rssh。请给点意见。

代码:

channelSftp = (ChannelSftp) channel;
ChannelExec channelexe = (ChannelExec) session.openChannel("exec");
channelexe.setCommand("chmod 777 -R " + depDir);                
channelexe.connect();

System.out.println("channelexe.getExitStatus:"+channelexe.getExitStatus());

输出:

channelexe.getExitStatus:-1:
This account is restricted by rssh.
Allowed commands: scp sftp

If you believe this is in error, please contact your system administrator.

【问题讨论】:

【参考方案1】:

没有必要为此使用“exec”频道。

使用ChannelSftp.chmod

public void chmod(int permissions, String path)

请注意,该方法将权限作为整数。所以你不能使用777,因为这是权限的八进制表示。

等效的十进制表示是511 (= 7*8^2 + 7*8^1 + 7*8^0)。

另见Decimal to Octal Conversion。


虽然ChannelSftp.chmod 不能递归设置权限。 SFTP 协议不支持任何类型的递归操作。

【讨论】:

以上是关于使用 JSch 通过 SFTP 或 SCP 更改文件权限的主要内容,如果未能解决你的问题,请参考以下文章

Java SFTP使用JSch上传,但是如何覆盖当前文件?

Jsch网络工具包的使用及源码简析

Java利用JSch实现sftp通过ssh上传下载删除文件及配置代码

Jsch使用SSH协议连接到远程Shell执行脚本

JSch - Java实现的SFTP(文件下载详解篇)

JSch SFTP 可以支持 lrecl 或 blksize 等站点命令吗