我可以在没有用户名和密码的情况下启动 JSch 会话吗?
Can I start a JSch session without a username and password?
我在我的 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,然后导入它吗?
JSch Session
class 构造函数需要填写用户名。
但最终决定使用哪个用户名的是 UserAuth
实现。
因此您可以扩展 UserAuthPassword
以将实际用户名分配给 .start()
方法开头的 .username
字段。
class UserAuthUsernamePassword extends UserAuthPassword {
public boolean start(Session session) throws Exception {
this.username = "real_username";
return super.start(session);
}
}
你只需将一个虚拟值传递给 Session
构造函数的 username
参数。
我在我的 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,然后导入它吗?
JSch Session
class 构造函数需要填写用户名。
但最终决定使用哪个用户名的是 UserAuth
实现。
因此您可以扩展 UserAuthPassword
以将实际用户名分配给 .start()
方法开头的 .username
字段。
class UserAuthUsernamePassword extends UserAuthPassword {
public boolean start(Session session) throws Exception {
this.username = "real_username";
return super.start(session);
}
}
你只需将一个虚拟值传递给 Session
构造函数的 username
参数。