【发布时间】:2016-04-19 02:48:20
【问题描述】:
我在我的 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,然后导入吗?
【问题讨论】:
-
AFAIK,用户名要求与
sshd一样多。你是如何配置你的 SSH 守护进程使其不需要用户名的? -
理论上,您可以为您的 ssh 守护程序分配一个默认用户名(请参阅stackoverflow.com/questions/10197559/…),这样您就不必提供它了。但在这种情况下,它是一个 sshd 配置。另一件事是有人启动 ssh 连接并在此之后提供用户名的情况。在这种情况下,我认为 JSch 不会支持这个选项。
-
谢谢利奥。我指的是像 Putty 这样的终端模拟器,在建立连接后需要用户名和密码。还是在给出用户名和密码之前没有真正建立连接?