如何使用SSHJ实现SSH用户/密码身份验证

时间:2019-07-19 21:47:48

标签: java sshj

我正在尝试创建一个Android应用程序,以通过SSH连接到Dell PowerConnect交换机,以根据命令执行简单的任务(例如,关闭/打开POE,以远程重置POE设备的端口)。我正在使用SSHJ库,但无法对其进行身份验证。

我终于找到了如何在失败后使SSHJ列出可接受的身份验证类型,并且它返回一个选项(公钥)。但是,通过Linux和腻子的SSH连接都可以使用用户名/密码身份验证来工作。戴尔交换机也没有提供任何更改其对我能够找到的连接尝试的答复的方式(不足为奇,但我以防万一)。

这是我的代码:

    final SSHClient ssh = new SSHClient();

    Command cmd = null; //declare

    try {
        ssh.loadKnownHosts();
    } catch (IOException e) {
        e.printStackTrace();
    }

    ssh.addHostKeyVerifier(new PromiscuousVerifier());
    ssh.connect(hostname,port);

    Session session = null;

    try {

        ssh.authPassword(username, password);

        session = ssh.startSession();

我的错误日志显示:

I/TransportImpl: Client identity string: SSH-2.0-SSHJ_0.27.0  
I/TransportImpl: Server identity string: SSH-2.0-OpenSSH_5.9p1.RL  
W/System.err: net.schmizz.sshj.userauth.UserAuthException: Exhausted available authentication methods  
        at net.schmizz.sshj.SSHClient.auth(SSHClient.java:230)  
        at net.schmizz.sshj.SSHClient.auth(SSHClient.java:205)  
        at net.schmizz.sshj.SSHClient.authPassword(SSHClient.java:291)  
        at net.schmizz.sshj.SSHClient.authPassword(SSHClient.java:261)  
W/System.err:     at net.schmizz.sshj.SSHClient.authPassword(SSHClient.java:245)  
        at net.metalx.myapplication.MainActivity.executeRemoteSSHJ(MainActivity.java:405)  
        at net.metalx.myapplication.MainActivity$2.doInBackground(MainActivity.java:216)  
        at net.metalx.myapplication.MainActivity$2.doInBackground(MainActivity.java:204)  
        at android.os.AsyncTask$2.call(AsyncTask.java:333)  
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)  
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)  
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)  
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)  
        at java.lang.Thread.run(Thread.java:764)  
I/TESTRESULT: publickey  
I/TransportImpl: Disconnected - BY_APPLICATION 

有没有办法强制用户名/密码验证?还是我看错了?

1 个答案:

答案 0 :(得分:0)

您不能强制对不支持密码的服务器进行密码认证。您提供的输出似乎表明服务器仅支持公共密钥身份验证。

或者,或者除了用户名/密码之外,还需要公钥身份验证。