Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java exec或运行时不使用ssh_Java_Ssh_Runtime_Exec_Runtime.exec - Fatal编程技术网

Java exec或运行时不使用ssh

Java exec或运行时不使用ssh,java,ssh,runtime,exec,runtime.exec,Java,Ssh,Runtime,Exec,Runtime.exec,我试图使用exec将ssh连接到ubuntu,但是由于某种原因,当我从代码执行时,我得到了错误 端口22:连接被拒绝 在代码中,我使用concat将字符串放在一起,但我知道它们放在一起是正确的,因为我将它们打印出来,如果我将它们复制并粘贴到命令行中,那么它将正确地使用ssh。 我的代码尝试: p1= Runtime.getRuntime().exec(run1); p1.waitfor(); 在哪里 run1 = "ssh -o StrictHostKeyChecking=no -v -i k

我试图使用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;

有什么想法吗?

如果您的连接被拒绝,SSHD没有运行,或者您被防火墙(或类似防火墙)阻止。

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

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

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

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

但是,缺少安全异常会将怀疑从安全管理器引开。消息中使用“Connection Rejected”(连接被拒绝)这一事实强烈表明您连接的SSH服务器不会接受您的连接

也许通过在命令行上操作,
ssh
命令正在使用不同的环境或配置。我将查看命令是否有别名,ssh连接是否对密钥对进行了一些假设。如果没有任何东西与命令不符,我将检查您的程序是否与ssh版本2连接(由于安全漏洞,许多人不允许使用版本1)

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


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

即使直接写入命令行时同一行也能正常工作,但“port 22:Connection Rejected”(端口22:Connection Rejected)表示.exec调用看起来是正确的,并且它至少正在尝试通过ssh连接到端口22,但是被拒绝了。奇怪,但确实如此。我注意到您似乎在使用密钥而不是L/P。可能是您执行调用意味着这可能是一个问题,但不确定。在命令行中使用ssh和使用exec之间有区别吗?因为我可以通过命令行连接到服务器,我假设它仍然使用端口22。那么,如果我可以使用ssh,这是否意味着端口22正在工作?您提出的问题需要太多的单词才能回答,因此我编辑了我的回答。阅读上面的内容,祝你好运。你有没有试过避开@?通过Runtime.exec运行命令与从Shell运行命令并不完全相同。您也可以尝试只连接,而不使用所有的“sudo mk…”。然后,post results1运行字符串或字符串[]?执行
System.out.println(run1)
,以查看它是否与您从命令行调用的命令相同。
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?