我正在使用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());
}
答案 0 :(得分:0)
答案 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();