net.schmizz.sshj.userauth.UserAuthException: Exhausted available authentication methods

user2243685 picture user2243685 · Apr 4, 2013 · Viewed 8.4k times · Source

first time asking on stackoverflow, and also using sshj. Besides the examples provided with sshj, I haven't really found any good resources to help using this API.

I've been trying to do remote port forwarding using sshj and have run into this error.

Exception in thread "main" net.schmizz.sshj.userauth.UserAuthException: Exhausted available authentication methods

I tested the auth with a VM, but without using a public key. I would be using this to connect to an EC2 instance on which I know the login.

public void startRemotePortForwardingConnection(LocalPortForwarder.Parameters parameters) throws IOException{
    sshClient.connect(parameters.getLocalHost());
    this.connectionStatus = CONNECTED;
    System.out.print("Connected to localhost" + NEWLINE);

    try {
        sshClient.authPassword(this.username, this.password);
        System.out.print("Authorized with as user " + username + " with password " + password + NEWLINE);

        // the local port we should be listening on
        RemotePortForwarder.Forward localPortToListenOn = new RemotePortForwarder.Forward(parameters.getLocalPort());
        System.out.print("localPortToListenOn initialized" + NEWLINE);

        // where we should forward the packets
        InetSocketAddress socketAddress = new InetSocketAddress(parameters.getRemoteHost(), parameters.getRemotePort());
        SocketForwardingConnectListener remotePortToForwardTo = new SocketForwardingConnectListener(socketAddress);
        System.out.print("remotePortToForwardTo initialized" + NEWLINE);

        //bind the forwarder to the correct ports
        sshClient.getRemotePortForwarder().bind(localPortToListenOn, remotePortToForwardTo);
        System.out.print("ports bound together" + NEWLINE);

        sshClient.getTransport().setHeartbeatInterval(30);
        sshClient.getTransport().join();
    }
    finally {
        sshClient.disconnect();
    }
}

Probably not the best (or even right) way to do this.

Answer

Scott picture Scott · Apr 12, 2013

I wrote an example to a similar prior question that you can run directly in groovyconsole that will connect to an EC2 instance: https://stackoverflow.com/a/15800383/311525