gpt4 book ai didi

java - 在 cli 上和通过 Java 执行 ssh 时的不同行为

转载 作者:行者123 更新时间:2023-12-02 01:57:35 25 4
gpt4 key购买 nike

我正在尝试通过 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com