Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SFTP进程生成器_Java_Unix_Sftp_Processbuilder - Fatal编程技术网

Java SFTP进程生成器

Java SFTP进程生成器,java,unix,sftp,processbuilder,Java,Unix,Sftp,Processbuilder,我必须从Java调用unix命令,并且必须使用。我想使用密钥身份验证通过SFTP登录,并且我想将文件从本地目录SFTP到远程位置 ProcessBuilder pb = new ProcessBuilder("sftp","-oIdentityFile=privateKey","-b","commands.txt","username@hostname"); commands.txt中的内容是 put localFileDirectory remoteDirectory exit 有什么方法

我必须从Java调用unix命令,并且必须使用。我想使用密钥身份验证通过SFTP登录,并且我想将文件从本地目录SFTP到远程位置

ProcessBuilder pb = new ProcessBuilder("sftp","-oIdentityFile=privateKey","-b","commands.txt","username@hostname");
commands.txt中的内容是

put localFileDirectory remoteDirectory
exit

有什么方法可以在processbuilder中提供localFileDirectory和remoteDirectory?这些应该是动态的,我必须给它processbuilder。

两种可能的方法:

  • 改用
    scp
    命令。它执行相同的基于ssh的文件传输,但允许您在命令行上指定源和目标

    ProcessBuilder pb = new ProcessBuilder("scp", "-i privateKey", "-r",
        "localFileDirectory", "username@hostname:remoteDirectory");
    
    -r
    表示“递归”,如果要传输整个文件夹,则需要使用该选项。如果只是传输一个文件,则不需要它

  • 从Java代码生成
    commands.txt
    文件


  • 谢谢@AndrewMedico。我尝试了第一个选项,它显示“通道0上的exec请求失败,连接丢失”。看起来我的目标机器中没有安装SCP。我认为scp和sftp客户端使用相同的服务器端机制,但可能不是。@AndrewMedico实际上不是,sftp是SSH的子系统,而scp需要在SSH服务器上打开shell或执行命令的权限;shell和sftp是两个完全不同的东西。如果我希望在过去24小时内创建的文件只从远程服务器复制到本地服务器,有什么建议吗。