使用 sshj 的 SFTP 服务器上不受支持的 SETSTAT 请求的解决方法



我正在尝试使用身份字符串:SSH-2.0-AWS_SFTP_1.0 使用以下 Java 代码使用 sshj 将 SFTP 连接到服务器。

<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();
}
}

并得到错误

错误设置不受支持

我知道 AWS 服务不允许在上传时设置时间戳,但我不知道需要哪些调整才能配置 SFTP 客户端。

问候 孔特

SSHJ 确实支持跳过 SETSTAT 方法。

sftpClient.getFileTransfer().setPreserveAttributes(false)

似乎 sshjSSHClientAPI 不允许阻止使用 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"));

相关内容

  • 没有找到相关文章

最新更新