Мне нужно подключить мой java-код к sftp-серверу с помощью jsch, и эта часть в порядке.
Моя проблема в том, что я хочу получить файлы с пути на сервере и удалить все. Я могу получить файлы, но я не могу удалить. Я читал об этой проблеме, и ошибка связана с разрешениями. Вот образ filezilla с разрешениями.
И это один из моих методов:
public void changePermissions(int permissions,String path)
{
int Octal = Integer.parseInt(Integer.toString(permissions), 8);
Try<Session> of = Try.of(() -> {
JSch jsch = new JSch();
this.session = jsch.getSession("myuser", "xxx.xxx.xxx.2 ", 22);
this.session.setPassword("mypassword1");
this.session.setConfig("StrictHostKeyChecking", "no");
this.session.connect();
String comando = "sudo chmod 777 -R "+path;
Channel canal = this.session.openChannel("exec");
System.out.println("OEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE");
InputStream in = canal.getInputStream();
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
canal.setOutputStream(baos);
((ChannelExec) canal).setCommand("cd "+path);
((ChannelExec) canal).setCommand("pwd");
((ChannelExec) canal).setCommand("sudo -S -p '' "+comando);
String s = new String(baos.toByteArray());
System.out.println(s);
return this.session;
});
}
И этот другой мой код Java
public void changePermissions(String path){
Try<ChannelSftp> tryConection = Try.of(() -> {
ChannelSftp channelSftp = (ChannelSftp) this.session
.openChannel("sftp");
channelSftp.connect();
return channelSftp;
});
Try<Boolean> of1 = Try.of(() -> {
tryConection.get().chmod(511,path);
return true;
}
Try<Boolean> of = Try.of(() -> {
tryConection.getOrElseThrow(e -> new Error("failed :( " + e.getMessage())).rmdir(path);
return true;
});
}
Объект сеанса, который я получаю с помощью другого метода, который является правильным при выполнении.
Первый вариант ничего не показывает, а второй вариант показывает в логах "3: Отказано в доступе"
root
, вы входите в систему какmyuser
, поэтому вы не можете изменить права доступа к файлу. - person Lothar   schedule 19.03.2019sudo
требует ввода пароля. Это ничего не дает набору команд sftp. - person Lothar   schedule 19.03.2019sudo
вручную в оболочке, нужен ли пароль? - person Martin Prikryl   schedule 19.03.2019sudo
неверен. См. Выполнение списка команд из ArrayList с помощью JSch exec в Java. Вы не можете вызыватьsetCommand
несколько раз . - person Martin Prikryl   schedule 19.03.2019