我正在尝试通过 ssh 将文件从远程服务器复制到客户端。在 cli 上执行我的命令时,文件被复制到正确的位置。但是,如果我通过 Java 执行完全相同的命令,该文件将被复制到远程计算机目录而不是客户端目录。
这是我正在使用的命令(我正在使用 key ,无需输入密码):
ssh -i /home/user/.ssh/id_rsa -C -p 2201 test@localhost 'cat /opt/test/file.txt' > /home/user/file.txt
这是代码,非常简单:
Process p;
p = Runtime.getRuntime().exec("ssh -i /home/user/.ssh/id_rsa -C -p 2201 test@localhost 'cat /opt/test/file.txt' > /home/user/file.txt");
知道为什么文件被复制到错误的机器目录以及如何在使用 java 执行命令时将其复制到客户端目录吗?
最佳答案
不要在命令中使用>
。通过从结果 Process
对象中检索的 InputStream
读取数据。与问题的早期版本中提到的 ~
一样,>
是 shell 特定功能,并且 shell 不涉及 exec()
.
Process p = Runtime.getRuntime().exec("your command");
p.waitFor();
InputStream commandOutput = p.getInputStream();
从此流中读取并将其写入文件。
替代方案:
尝试
p = Runtime.getRuntime().exec("sh -c ssh -i /home/user/.ssh/id_rsa -C -p 2201 test@localhost 'cat /opt/test/file.txt' > /home/user/file.txt");
关于java - 在 cli 上和通过 Java 执行 ssh 时的不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57390556/