Java 将Guardian文件上载到Tandem/Compaq/HPE不间断服务器

Java 将Guardian文件上载到Tandem/Compaq/HPE不间断服务器,java,sftp,jsch,openssh,hp-nonstop,Java,Sftp,Jsch,Openssh,Hp Nonstop,我正在使用OpenSSH。当从独立Java程序调用时,下面的bat文件代码正确地传输文件 @echo off del "D:\path\inctf2.txt" /s /f /q set par1=%1 set par2=%2 set par3=%3 set par4=%4 >>D:\path\inctf2.txt echo lcd %par2% >>D:\path\inctf2.txt echo cd %par1% >>D:\path\inctf2.txt

我正在使用OpenSSH。当从独立Java程序调用时,下面的bat文件代码正确地传输文件

@echo off
del "D:\path\inctf2.txt" /s /f /q
set par1=%1
set par2=%2
set par3=%3
set par4=%4

>>D:\path\inctf2.txt echo lcd %par2%
>>D:\path\inctf2.txt echo cd %par1%
>>D:\path\inctf2.txt echo put %par3% %par4%
>>D:\path\inctf2.txt echo quit 

C:
cd C:\Program Files\OpenSSH-Win64

sftp.exe -b D:\path\inctf2.txt userName@IP >> D:\path\%par3%%para4%.log 2>&1

goto END
:END
但当bat文件从部署在weblogic服务器上的war内部的类文件调用时。它失败,错误如下: 无法创建目录“%systemroot%\system32\config\systemprofile/.ssh”。 扩展百分比:未知密钥%s 连接关闭

已将.ssh文件夹从windows>User>Administrator复制到D:\path,并为用户提供了完全控制权:所有人,但运气不佳

Java代码:

processBuilder.command("cmd", "/c", "transfer.bat",cdRemoteDir, localDir_For_fileName, 
fileName, remoteFileName );

Process process = processBuilder.start();

int exitVal = process.waitFor();
尝试了以下代码,也得到了相同的结果:

从命令行执行时:

C:\Program Files\OpenSSH-Win64>user_name@ip_address
Connected to ip_address.
sftp> cd $DVL2.CAFINP
sftp> lcd F:\local_file_path
sftp> put OC130319.001 OC130301 0,500,500,800
Uploading OC130319.001 to /G/DVL2/CAFINP/OC130301
OC130319.001
sftp> ls -lrt OC130301
-*********    0 4294952959 199         16718 Apr 30 10:45 OC130301
sftp>
最后,我使用bat文件中的以下命令转到WinSCP:

C:
cd C:\WinSCP5.13.7
winscp.com /script=script.txt >>D:\path\logs\alpha.txt

open sftp_ppk_auth
cd $DVL2.CAFINP
lcd F:\local_path\
put MANCAF OUT4567,0,500,500,800
exit
sftp_ppk_auth保存在WinSCP会话中 文件已成功传输,但日志中记录了以下错误消息:

MANCAF | 217589KB | 2618.9KB/s |二进制| 100% 传输成功完成,
但是临时传输文件“OUT4567,050500800.filepart”无法重命名为目标文件名“OUT4567,050500800”。

我猜它正在尝试在HOME/.ssh/known_主机中创建一个新条目,并且您的bat文件正在继承weblogic服务器的凭据,这就是它试图在%systemroot%\system32\config\systemprofile下创建.ssh目录的原因


尝试通过将-o CheckHostIP=no添加到sftp命令行来抑制此操作。

我猜它正在尝试在HOME/.ssh/known_主机中创建一个新条目,并且您的bat文件正在继承weblogic服务器的凭据,这就是为什么它试图在%systemroot%\system32\config\systemprofile下创建一个.ssh目录的原因


尝试通过将-o CheckHostIP=no添加到sftp命令行来抑制这种情况。

这些额外的参数实际上应该归功于@dave\u thompson\u 085

因此,无论最终使用JSch、psftp、WinSCP的是哪个SFTP客户端,都要使用如下目标文件名:

MANCAF OUT4567,0,500,500,800
使用WinSCP,您需要使用以避免出现错误。否则,WinSCP会因为它认为实际文件名不存在而感到困惑,而事实并非如此

put -resumesupport=off MANCAF OUT4567,0,500,500,800

这些额外的参数实际上应该归功于@dave_thompson_085

因此,无论最终使用JSch、psftp、WinSCP的是哪个SFTP客户端,都要使用如下目标文件名:

MANCAF OUT4567,0,500,500,800
使用WinSCP,您需要使用以避免出现错误。否则,WinSCP会因为它认为实际文件名不存在而感到困惑,而事实并非如此

put -resumesupport=off MANCAF OUT4567,0,500,500,800

不要运行外部控制台应用程序来实现SFTP。使用本机SFTP Java库,如JSch。我使用的是JSch,但大文件部分传输到base24交换机。因此,我们不得不为put命令添加一些额外的参数:put local_file remote_file 050050800,这在jsch中是不可能的。还是可能?Jsch错误代码4描述失败。我认为这是通用代码。如果你能建议如何用jsch添加那些与文件相关的参数,那就太好了。我不明白。什么是0500800?最多接受两个参数。这些参数有效,用于将页面大小和其他与文件相关的内容传送到远程系统,或在传输过程中重新构造文件。如果我得到更多关于它们的信息,我会更新。不要运行外部控制台应用程序来实现SFTP。使用本机SFTP Java库,如JSch。我使用的是JSch,但大文件部分传输到base24交换机。因此,我们不得不为put命令添加一些额外的参数:put local_file remote_file 050050800,这在jsch中是不可能的。还是可能?Jsch错误代码4描述失败。我认为这是通用代码。如果你能建议如何用jsch添加那些与文件相关的参数,那就太好了。我不明白。什么是0500800?最多接受两个参数。这些参数有效,用于将页面大小和其他与文件相关的内容传送到远程系统,或在传输过程中重新构造文件。如果我得到更多关于他们的信息,我会更新。这是一个较长的周末。一旦我接触到这个系统,我会尝试这个选项。感谢您的快速回复尝试:sftp.exe-o CheckHostIP=no-b D:\path\inctf2.txt用户_name@ip_address>>D:\path\ftps\%par3%%para4%。日志2>&1在日志中产生了相同的错误消息。这是一个较长的周末。我一旦接触到系统,将尝试此选项。感谢您的快速回复尝试:sftp.exe-o CheckHostIP=no-b D:\path\inctf2.txt用户_name@ip_address>>D:\path\ftps\%par3%%para4%。日志2>&1在日志中产生相同的错误消息。