【发布时间】:2014-07-09 08:20:04
【问题描述】:
我已经在 Android 上打开了与 jsch 的会话,这样:
SshObjects Connect(String username, String password, String hostname, int port)
{
JSch jsch=new JSch();
try
{
sshObjects._session = jsch.getSession(username, hostname, port);
}
catch (JSchException e)
{
e.printStackTrace();
return null;
}
sshObjects._session.setPassword(password);
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
sshObjects._session.setConfig(config);
try
{
sshObjects._session.connect();
}
catch (JSchException e)
{
e.printStackTrace();
return null;
}
try
{
sshObjects._channel = (ChannelExec) sshObjects._session.openChannel("exec");
}
catch (JSchException e)
{
e.printStackTrace();
return null;
}
connected = true;
return sshObjects;
}
然后,为了在打开的会话上执行一些命令并获得结果,我这样做了:
private String ExecuteCommand(SshCommandsEnum cmdType)
{
String result = "";
switch (cmdType)
{
case SERVER_INFO:
sshObjects._channel.setCommand("uname --all");
break;
.......
}
try
{
BufferedReader in=new BufferedReader(new InputStreamReader(sshObjects._channel.getInputStream()));
//sshObjects._channel.disconnect();
try
{
sshObjects._channel.connect();
}
catch (JSchException e)
{
e.printStackTrace();
}
String msg=null;
try
{
while((msg=in.readLine())!=null)
{
System.out.println(msg);
result += msg;
}
sshObjects._channel.disconnect();
}
catch (IOException e)
{
e.printStackTrace();
}
}
catch (IOException e)
{
return "";
}
return result;
}
所以我只想打开一次会话。然后在其上以“exec”的身份执行命令。它适用于连接后执行的第一个命令 - 一切似乎都很好,我可以成功获得结果。但是当我再次调用“执行命令”时,它不再起作用了。我的线程挂在sshObjects._channel.connect(); 上,没有任何效果。当我尝试断开连接(关闭通道和会话)并再次连接时 - 相同。只有在我什至不尝试执行命令的情况下,我才能毫无问题地连接和断开连接。
但是,如果没有这个,我不会遇到这个问题:
BufferedReader in=new BufferedReader(new InputStreamReader(sshObjects._channel.getInputStream()));
但是,显然我需要它来获取我的命令输出。所以有什么问题?你知道我在做什么错吗?
【问题讨论】:
标签: java android ssh freeze jsch