我正在编写基于JSch
库的SSH轮。我使用shell
频道和setPty(false)
来获得对它的更多控制并确保响应是干净的消息。代码用法很简单,因为这足以满足主题:
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelShell;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
public class JShellTest {
public static void main(String[] arg){
try{
JSch jsch=new JSch();
//jsch.setKnownHosts("/home/foo/.ssh/known_hosts");
Session session=jsch.getSession("lorancechen", "192.168.1.149", 22);
session.setPassword(" ");
session.setConfig("StrictHostKeyChecking", "no");
//session.connect();
session.connect(30000); // making a connection with timeout.
Channel channel=session.openChannel("shell");
// Enable agent-forwarding.
((ChannelShell)channel).setPty(false);
channel.setInputStream(System.in);
channel.setOutputStream(System.out);
channel.connect(60*1000);
}
catch(Exception e){
System.out.println(e);
}
}
}
这里有什么问题?
当我输入lll
时,它是一个不允许的命令,结果响应没有
与ssh -T foo@bar
比较,它将是响应-bash: line 2: lll: command not found
。
那么,如果命令失败,我怎样才能让JSch
响应与ssh -T foo@bar
相同的结果?
感谢。