我在我的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,然后导入它吗?
答案 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
参数。