当前位置: 首页 > 知识库问答 >
问题:

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

尹凌龙
2023-03-14

我在我的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个答案

钮瀚
2023-03-14

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

但最终决定使用哪个用户名的是UserAuth实现。

因此,您可以扩展例如UserAuthPassword,将实际用户名分配给。用户名字段位于的开头。start()方法。

class UserAuthUsernamePassword extends UserAuthPassword {

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

}

您只需将一个虚拟值传递给会话构造函数的username参数。

 类似资料:
  • 我现有的Datastax Cassandra设置正在运行。我们刚刚在系统中添加了身份验证,现在我们可以使用我们的AD帐户登录。这非常好,当然有效。但是应用程序需要使用硬编码的用户名/密码才能连接。 在SQL Server中,我们能够设置一个用户作为运行服务,然后它将通过AD连接和工作。然而,在卡珊德拉这是不一样的。 如果我不想在app.config文件中包含用户名,尤其是密码,我有什么选择?

  • 在Spring Boot的文档中,我只找到了使用Redis会话的例子,不使用Redis也能使用它吗?

  • 问题内容: 有什么方法可以在不直接使用Spring Context的情况下加载带有标记的类?基本上,我想重用Spring所做的所有智能逻辑,但是对于在bean生命周期之外手动实例化的bean。 我有一个可以在Spring(引导)中愉快地加载的bean,可以将其注入到其他Service bean中: 详情参见春天docco http://docs.spring.io/spring-boot/docs

  • 对不起,如果我用错了术语。 我使用的是一个AngularJS表单,它将表单数据发送到我的DocuSign模板,并填写相应的字段,所以一切都很好。

  • 我正在试验OSGi条件权限机制。更具体地说,我试图使用org.osgi.service.condpermadmin.BundleSignerCondition来限制哪些包可以启动。我所拥有的文档指出,为了使用该权限,我必须使用org.osgi.framework.trust.repositories框架配置属性指定到JKS密钥库的路径。但是,同一文档提到该属性中提到的JKS不能有密码。所以问题是:

  • 问题内容: 我正在尝试制作一个“可执行” war文件(),该文件将启动一个Jetty网络服务器,该服务器托管我执行的WAR文件中包含的Web应用程序。 我找到了一个页面,描述了如何制作所需的内容: 但是,遵循该建议以及我认为我应该如何制作可执行jar(war)是行不通的。 我有一个Ant任务,它会创建一个带有清单的WAR文件,如下所示: WAR文件的内容如下所示: 当我尝试执行WAR文件时,错误是