我可以在没有用户名和密码的情况下启动JSch会话吗?

时间:2016-01-13 22:35:19

标签: java ssh jsch

我在我的Android应用程序中使用JSch,我想在没有提供用户名和密码的情况下创建SSH连接。如果我提供用户名和密码,我可以连接,但如果我没有提供用户名,我会收到“JSch的错误”。

这是我在没有提供用户名和密码的情况下尝试连接的。

private class ConnectSSH extends AsyncTask<Void, Void, String> {
    @Override
    protected String doInBackground(Void... a) {
        try {
            JSch jsch = new JSch();
            Session session = jsch.getSession("192.168.1.42");
            session.setPort(22);
            session.connect();
            Channel channelssh = (Channel)session.openChannel("exec");
            StringBuilder sb = new StringBuilder();
            InputStream commandOutput = channelssh.getInputStream();
            channelssh.connect();
            int readByte = commandOutput.read();
            while(readByte != 0xffffffff){
               sb.append((char)readByte);
               readByte = commandOutput.read();
            }
            channelssh.disconnect();
            return sb.toString();
        } catch (Exception e) {
            return "Error - " + e;
        }
    }
    @Override
    protected void onPostExecute(String result) {
        Toast.makeText(getApplicationContext(), result, Toast.LENGTH_LONG).show();
    }
}

我唯一的选择是更改JSch的源代码以允许这个,编译到jar,然后导入它吗?

1 个答案:

答案 0 :(得分:0)

JSch Session类构造函数需要填充用户名。

但是UserAuth实现最终会决定使用什么用户名。

因此,您可以扩展示例UserAuthPassword,以便在.username方法开头将实际用户名分配给.start()字段。

class UserAuthUsernamePassword extends UserAuthPassword {

  public boolean start(Session session) throws Exception {
    this.username = "real_username";
    return super.start(session);
  }

}

您只需将虚拟值传递给username构造函数的Session参数。