java - 通过 Java 运行时进程连接到 SFTP 服务

标签 java sftp runtime.exec

在我的项目下,我有一个 Java 类文件,其中有一个例程,它执行以下外部 SFTP 脚本文件:

#!/bin/sh
echo "cd AV/OASIS" >> sftp
echo "put $1 $2" >> sftp
echo "get AV/OASIS/$2 $3$2" >> sftp
echo "bye" >> sftp
/usr/local/bin/sftp -b sftp id@domain
cat /dev/null > sftp
exit 0

执行脚本文件的Java代码如下:

String script = "full path of script";
Process p = Runtime.getRuntime().exec(script + " " + param1 + " " + param2 + " " + param3);

不过,不知道为什么,类文件生成的日志总是显示错误“Host key verification failed. Connection closed.

我在连接到远程机器的脚本中隔离了那一行,并在本地机器上运行它(存储此类文件和脚本文件的地方),命令成功执行

我手动运行 Java 类文件将执行的命令,它也测试正常:

$ script.sh param1 param2 param3

我试图在互联网上查找错误消息,显然它似乎与 known_hosts 有关。这可能是原因,还是我还缺少其他东西?

非常感谢!

最佳答案

主机 key 在一台机器上验证失败而在另一台机器上验证失败的原因是一台机器之前连接过而另一台机器没有。如果机器之前没有连接到主机,它就没有主机 key 来验证。主机 key 可能由于多种原因而无法验证 - 出于恶意原因,例如有人正在进行中间人攻击,以及出于非恶意原因,例如远程机器的主机名已更改。

修复它的方法是从 ~/.ssh 中的 known_hosts 文件中删除该行

附带说明一下,您知道您不必为 SFTP/SCP 花钱吗? JSch存在并将允许您在 Java 中使用 SFTP/SCP。您可能应该这样做,因为它可以在 Windows 等非 Unix 平台上运行,并且您可以更好地控制诸如 known_hosts 之类的东西。这是pretty easy使用。

关于java - 通过 Java 运行时进程连接到 SFTP 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2986800/

相关文章:

java - MySQL数据截断: Out of range value for column

windows - PHPStorm - 无效的后代文件名

.net - 从 SharpSSH 流式传输文件

java - 运行时执行程序和自定义的 RTF 编辑器

java - 如何使用 Vaadin 和 SpringViewProvider 创建安全 View

java - 使用 Google Gson 创建 json

python - 为什么这个 python 代码在导入/编译时挂起但在 shell 中工作?

Java process.waitFor() 不返回

java - Linux 中的运行时执行问题

java - 在java中计算.txt文件中的单词频率