JSch SFTP 可以支持 lrecl 或 blksize 等站点命令吗

Posted

技术标签:

【中文标题】JSch SFTP 可以支持 lrecl 或 blksize 等站点命令吗【英文标题】:Can JSch SFTP support site commands like lrecl or blksize 【发布时间】:2016-08-25 14:32:18 【问题描述】:

当尝试从非大型机环境 SFTP 到大型机 (zos) 环境时,我试图弄清楚 Jsch sftp 框架是否可以支持诸如 lreclblksizemgtmclass 等站点命令.

从我目前所遇到的情况来看,SFTP 规范似乎并不直接支持 site 命令,但我不能 100% 确定该信息是否准确。

在更多地研究 JSch 时,似乎有一个 ChannelExec 类似乎能够远程执行命令,但这是否能满足我的需求我还无法确定。

一位专门研究大型机的同行告诉我,ls /+/ 可以使用一些大型机魔法,但是自从 Java 以来,如何将其潜在地应用于 JSch 中可用的任何类都超出了他的能力范围。不是他的专业领域。

我们将不胜感激。

【问题讨论】:

【参考方案1】:

我将部分回答我自己没想到的问题。经过大量搜索,我发现了一段正是我需要的代码。

因此,这使用了我的同行谈论的大型机魔法,使用ls 命令传递站点命令。

我只是摘录一小段内容来说明我在这里想要完成的工作:

String lrecl = "/+/lrecl=128"
JSch jsch = new JSch();
Session session = jsch.getSession(user, hostName, port);
session.setPassword(password);
session.connect(120000);
ChannelSftp channel = (ChannelSftp)session.openChannel("sftp");
channel.connect(100000);
channel.ls(lrecl);

这只是代码的一部分,但确实显示了如何传递站点命令。我还没有确认是否所有站点命令都可以通过这种方式发送。

希望这可以帮助或节省一些时间。

对这种方法有任何反馈或想法,请告诉我。

【讨论】:

我能够发送文件。 sshService.getChannelSftp().ls("/+/mode=text"); sshService.getChannelSftp().ls("/+/lrecl=80"); sshService.getChannelSftp().ls("/+/recfm=FB"); sshService.getChannelSftp().put("src/path","dest/path", ChannelSftp.OVERWRITE) 你能告诉scala相当于添加这些命令吗?我尝试使用这些命令,但我得到 File not found, not a valid file 错误...请帮助

以上是关于JSch SFTP 可以支持 lrecl 或 blksize 等站点命令吗的主要内容,如果未能解决你的问题,请参考以下文章

使用 JSch 通过 SFTP 或 SCP 更改文件权限

JSch - Java实现的SFTP(文件下载详解篇)

JSch 是不是支持 SOCKS5 代理?

JSch - Java实现的SFTP(文件上传详解篇)

JSch - Java实现的SFTP(文件上传详解篇)

JSch - Java实现的SFTP(文件上传详解篇)