2015-06-18 40 views
0

我必须调用Java的unix命令,我必须使用ProcessBuilder。我想通过使用密钥认证的SFTP登录,我想从本地目录到远程位置SFTP文件。SFTP Processbuilder

ProcessBuilder pb = new ProcessBuilder("sftp","-oIdentityFile=privateKey","-b","commands.txt","[email protected]"); 

含量commands.txt中是

put localFileDirectory remoteDirectory 
exit 

有什么办法,我可以给localFileDirectory和remote目录中的ProcessBuilder?这些应该是动态的,我必须给它processbuilder。

回答

0

两种可能的方法:

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

    ProcessBuilder pb = new ProcessBuilder("scp", "-i privateKey", "-r", 
        "localFileDirectory", "[email protected]:remoteDirectory"); 
    

    -r用于“递归”,如果您要传输整个文件夹,则需要。如果您只是传输单个文件,则不需要。从您的Java代码生成commands.txt文件。

+0

谢谢@AndrewMedico。我尝试了第一个选项,它说“执行请求在通道0失去连接失败”。看起来像SCP没有安装在我的目标机器上 – vssrnr

+0

呵呵。我认为scp和sftp客户端使用相同的服务器端机制,但可能不是。 –

+0

@AndrewMedico实际上不是,SFTP是SSH的一个子系统,而scp需要在SSH服务器上打开shell或执行命令的权限; shell和sftp是两个完全不同的东西。 – FjodrSo