Обходной путь для неподдерживаемого запроса SETSTAT на сервере SFTP с sshj

Я пытаюсь отправить SFTP на сервер, используя строку идентификатора: SSH-2.0-AWS_SFTP_1.0 со следующим кодом Java с использованием sshj.

<dependency>
    <groupId>com.hierynomus</groupId>
    <artifactId>sshj</artifactId>
    <version>0.29.0</version>
</dependency>
private SSHClient setupSshj(String remoteHost, String username, String password) throws IOException {
    SSHClient client = new SSHClient();
    client.addHostKeyVerifier(new PromiscuousVerifier());
    client.connect(remoteHost);
    client.authPassword(username, password);
    return client;
}

public void sftpfiles() throws IOException {
    if (Boolean.parseBoolean(GetConfigValue("dds", "sendFiles"))) {
        SSHClient sshClient = setupSshj(GetConfigValue("dds", "RemoteAddress"), GetConfigValue("dds", "RemoteLogin"), GetConfigValue("dds", "RemotePassword"));
        SFTPClient sftpClient = sshClient.newSFTPClient();
        sftpClient.put("/home/vm/test.txt", GetConfigValue("dds", "RemoteDirectory"));
        sftpClient.close();
        sshClients.disconnect();
    }
}

и получите ошибку

Ошибка SETSTAT не поддерживается

Я понимаю, что сервис AWS не позволяет устанавливать временные метки при загрузке, однако я не знаю, какие настройки необходимы для настройки клиента SFTP.

С уважением, Контех

3 ответа

Решение

Похоже, что sshj SSHClient API не позволяет запретить использование запроса SETSTAT. Вам придется использовать более низкоуровневый API, например SFTPFileTransfer:

SFTPEngine engine = new SFTPEngine(sshClient).init();
SFTPFileTransfer xfer = new SFTPFileTransfer(engine);
xfer.setPreserveAttributes(false);
xfer.upload("/home/vm/test.txt", GetConfigValue("dds", "RemoteDirectory"));

SSHJ поддерживает пропуск метода SETSTAT.

sftpClient.getFileTransfer().setPreserveAttributes(false)

По умолчанию saveAttributes SFTPFileTransfer имеет значение true.

       [private volatile boolean preserveAttributes = true;]

Следовательно, установка значения false для сервисов AWS приведет к прекращению сохранения данных во время загрузки.

Другие вопросы по тегам