2

我有一个使用 mksnt 工具包配置的 Windows VM。所以这意味着我的路径将变成 C:/abc/xyz

我正在尝试使用 Jsch 实用程序从 linux 机器远程连接到这台 Windows 机器。我能够成功连接,当我尝试检查特定目录路径时,它说它不存在。但是,该路径确实存在于 windows 框中。

以下是我查找目标目录的 Jsch 代码 -

SftpATTRS dirAttributes=null;
try{
    testLog.info("Looking for directory :"+destinationDir);
    dirAttributes = sftpc.stat(destinationDir);
} catch(SftpException s){
    testLog.info("Directory does not exists !!!\n"+s.fillInStackTrace().toString());;
} catch (Exception e){
    testLog.info("Directory does not exists !!!\n"+e.fillInStackTrace().toString());;
}

如果我执行 Linux <-> Linux 远程调用并验证目录,则上面的代码可以无缝运行,但是使用 Linux <-> Windows 我遇到了这个问题。

由于安装了 mksnt,如果我进入目录并执行“pwd” - 它会打印“C:/abc/xyz”

我不清楚 Jsch 是否由于安装了 mksnt 而无法处理或识别路径。任何人都可以分享任何解决方案或提供一些可以帮助我解决这个问题的指针。

PS:我无法安装 cygwin 或任何其他工具。这是环境。提供给我,我只需要通过 Jsch 实用程序从 Linux 主机进行远程调用。

4

2 回答 2

2
C:/abc/xyz

SFTP 协议对文件路径名使用类似 unix 的命名方案,而与 SFTP 服务器的操作系统无关。在 SFTP 命名方案中,绝对路径名以“/”开头。以“C”开头的名称将引用 SFTP 会话工作目录中的文件。

换句话说,基于 Windows 的 SFTP 服务器可能不会按照您期望的方式解释此路径名。您应该使用交互式 SFTP 客户端登录到 Windows SFTP 服务器,找到您感兴趣的文件和/或目录,并确定用于通过 SFTP 访问它们的正确路径。

如果 Windows SFTP 服务器正在运行 Cygwin OpenSSH SFTP 服务器,我相信正确的路径应该类似于“/cygdrive/c/abc/xyz”。

于 2017-01-24T22:53:25.967 回答
1

我过去遇到过同样的问题,我已经使用以下代码解决了:

String remoteFolder = "C:\temp\test"
remoteFolder = "/" + remoteFolder.replace("\\", "/");

有了这个 JSCH 可以检测远程路径是否存在。这仅在 Windows 中是必需的。

于 2020-09-14T20:57:58.360 回答