Java 将Guardian文件上载到Tandem/Compaq/HPE不间断服务器
我正在使用OpenSSH。当从独立Java程序调用时,下面的bat文件代码正确地传输文件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
@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在日志中产生相同的错误消息。