Java 尝试执行命令时引发错误
在使用java中的Ganymed库时,我在尝试测试连接时遇到了一点问题,2周前它工作正常,没有问题,但现在我收到以下错误消息:Java 尝试执行命令时引发错误,java,ssh,Java,Ssh,在使用java中的Ganymed库时,我在尝试测试连接时遇到了一点问题,2周前它工作正常,没有问题,但现在我收到以下错误消息: The execute request failed. 这与Ganymed“execCommand()”方法有关。当我使用WinSCP进行连接时,一切正常,但尝试使用java进行连接时会出现错误。我也在想,也许防火墙也是原因,只是一个想法 我用来执行tail命令的代码如下: import java.io.BufferedReader; impo
The execute request failed.
这与Ganymed“execCommand()”方法有关。当我使用WinSCP进行连接时,一切正常,但尝试使用java进行连接时会出现错误。我也在想,也许防火墙也是原因,只是一个想法
我用来执行tail命令的代码如下:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;
import ch.ethz.ssh2.StreamGobbler;
public class SSHTesting {
public static void main(String[] args) {
try{ Connection conn = new Connection("eappdev101.momentum.co.za");
conn.connect();
boolean isAuthenticated = conn.authenticateWithPassword("username", "password");
if (isAuthenticated == false) {
System.out.println("Credentials are wrong.");
}
Session sess = conn.openSession();
sess.execCommand("tail -f /logs/SystemOut.log");
InputStream stdout = new StreamGobbler(sess.getStdout());
BufferedReader br = new BufferedReader(new InputStreamReader(stdout));
sess.close();
conn.close();
System.out.println("Done");
}
catch(Exception ie){
System.out.println(ie.getMessage());
}
}
}
任何一道亮光都受到高度赞赏。提前感谢您。对我来说,它与密钥配合使用很好,我认为出于安全原因,您应该使用密钥 检查下面的代码
private void init() throws IOException{
char privateKeyChar[] = sshPrivateKey.toCharArray();
conn = new Connection(ftpHostname,22);
conn.connect();
boolean isAuthenticated = conn.authenticateWithPublicKey(sshUsername, privateKeyChar, null);
if (isAuthenticated == false)
throw new IOException("Authentication failed.");
session = conn.openSession();
}
public String excuteCMD(String cmd) throws IOException
{
session = conn.openSession();
session.execCommand(cmd);
InputStream stdout = new StreamGobbler(session.getStdout());
BufferedReader br = new BufferedReader(new InputStreamReader(stdout));
while (true)
{
String line = br.readLine();
if (line == null)
break;
else
output+=line;
}
return output;
}
代码看起来不错,这可能是因为SSH服务器身份验证配置。嗨,萨达姆,谢谢你的快速回复,如果我可以问的话,sshPrivateKey仍然是我用来登录的passowrd,或者它应该是使用Putty或?谢谢。您使用ssh keygen生成它,并将公钥置于Linux/Unix机器中的授权密钥下,请参阅下面的示例感谢链接Saddam,我将向您介绍我的进展情况,目前正在查看您建议的链接。您好Saddam,我发现它无法工作的原因是由于服务器关闭,很明显,有人篡改了我们使用的凭证,因此我遇到了问题,所以他们正在解决问题,所有这些都应该重新工作。再次感谢你抽出时间。