gpt4 book ai didi

Java exec 或运行时无法与 ssh 一起使用

转载 作者:行者123 更新时间:2023-12-01 15:48:38 26 4
gpt4 key购买 nike

我正在尝试使用 exec ssh 进入 ubuntu,但由于某种原因,当我从代码执行时出现错误端口 22:连接被拒绝

在代码中,我使用 concat 将字符串放在一起,但我知道它们被正确地放在一起,因为我将它们打印出来,如果我将它们复制并粘贴到命令行中,那么它将正确地进行 ssh。我的代码尝试:

p1= Runtime.getRuntime().exec(run1);
p1.waitfor();

哪里

run1 = "ssh -o StrictHostKeyChecking=no -v -i key " + "ubuntu@"+ DNS + " sudo mke2fs -F -j "+device;

有什么想法吗?

最佳答案

您正在启动连接,因此如果连接被拒绝,则意味着您尝试 ssh 访问的计算机拒绝您 ssh 访问。

通过任何方式登录到该计算机并验证 ssh 服务器是否正在运行。如果是,则验证防火墙没有阻止端口 22;因为,有时 ssh 服务器正在运行,但防火墙由于端口阻止规则而不允许网络访问 ssh 服务器。

--- 在评论中的问题后编辑 ---

Is there a difference between ssh in the command line and using exec? Because I can 
connect to the server through the command line, which I assume is still using port 22.
So if I can ssh that way does that mean port 22 is working?

有几种可能性。 Java 附带了一个安全管理器,它仅用于拒绝程序访问机器资源。这就是为什么可以安全地运行从远程服务器下载的小程序代码,因为安全管理器拒绝访问硬盘驱动器或与其他计算机建立连接的权限。在小程序沙箱中,它确实允许连接回原始 Web 服务器(以下载更多代码和图像)。

但是,由于缺乏安全异常(exception),安全经理不再受到怀疑。该消息使用“连接被拒绝”一词这一事实强烈表明您正在连接的 SSH 服务器不会接受您的连接。

也许通过在命令行上操作,ssh 命令正在使用不同的环境或配置。我会查看该命令是否有别名,或者 ssh 连接是否对 key 对做出一些假设。如果没有什么与命令不一致的地方,我会检查您的程序是否与 ssh 版本 2 连接(由于安全漏洞,许多人不允许使用版本 1)。

然后我还会寻找名称解析中可能存在的差异。您在命令行中解析主机名的方式可能与在 Java 程序中解析主机名的方式不同。这可能意味着 Java 程序正在尝试连接到另一台机器,该机器没有运行安全 shell 服务器。

无论哪种方式,您似乎都必须进行一些调试才能确定这是真正的编码问题还是环境问题。

关于Java exec 或运行时无法与 ssh 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6584221/

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