10
votes

Exemple Sshd Java

Quelqu'un peut-il me signaler à un exemple de code pour utiliser SshD pour accéder à un serveur et exécuter certaines commandes d'une application Java. J'ai examiné le site Web et les téléchargements Apache Sshd et n'ont rien trouvé d'utile pour le moment de la documentation et du code exemple. J'ai également Googled Sshd Exemple code et j'ai échoué.


1 commentaires

Je vais prendre un autre coup d'oeil, j'ai examiné les questions mentionnées ci-dessus et j'espérais que quelqu'un répondrait avec leur expérience personnelle avec une certaine bibliothèque. Cet exemple de mina semble se concentrer sur la construction d'un serveur SSH.


3 Réponses :


6
votes

Celui-ci peut exécuter, je l'ai vérifié. C'est simplement supprimer l'importation. Version Apache sshd-core-0.7.0.jar xxx


1 commentaires

FileKeyPairProvider est parti de sshd-core après 0.14.0 ; Le remplacement semble être SecurityUtils.CreatefileKairPairProvider () , selon Sshclient Sources dans 1.3.0 .



4
votes
public static void main(String[] args) throws IOException, InterruptedException
{
    SshClient client = SshClient.setUpDefaultClient();
    client.start();

    final ClientSession session = client.connect("bob", "bob.mynetwork.com", 22).await().getSession();

    int authState = ClientSession.WAIT_AUTH;
    while ((authState & ClientSession.WAIT_AUTH) != 0) {

        session.addPasswordIdentity("bobspassword");

        System.out.println("authenticating...");
        final AuthFuture authFuture = session.auth();
        authFuture.addListener(new SshFutureListener<AuthFuture>()
        {
            @Override
            public void operationComplete(AuthFuture arg0)
            {
                System.out.println("Authentication completed with " + ( arg0.isSuccess() ? "success" : "failure"));
            }
        });

        authState = session.waitFor(ClientSession.WAIT_AUTH | ClientSession.CLOSED | ClientSession.AUTHED, 0);
    }

    if ((authState & ClientSession.CLOSED) != 0) {
        System.err.println("error");
        System.exit(-1);
    }

    final ClientChannel channel = session.createShellChannel();
    channel.setOut(new NoCloseOutputStream(System.out));
    channel.setErr(new NoCloseOutputStream(System.err));
    channel.open();

    executeCommand(channel, "pwd\n");
    executeCommand(channel, "ll\n");
    channel.waitFor(ClientChannel.CLOSED, 0);

    session.close(false);
    client.stop();
}

private static void executeCommand(final ClientChannel channel, final String command) throws IOException
{
    final InputStream commandInput = new ByteArrayInputStream(command.getBytes());
    channel.setIn(new NoCloseInputStream(commandInput));
}

0 commentaires

0
votes

Après avoir suivi le développement de la prise en charge de Java pour SSH depuis de nombreuses années, je vous recommande vivement de utiliser n'importe quelle mise en œuvre de Java SSH. Personne ne se soucie de les développer plus loin. Aucun d'entre eux n'a le bon soutien de l'agent SSH. Et SSH sans agent SSH, surtout lors de l'exécution du code sur celui-ci, rend ces implémentations plutôt inutiles - à moins que vous ne soyez prêt à mettre des clés non cryptées ou des mots de passe partout.

La meilleure solution IMHO consiste à écrire une enveloppe autour des implémentations de roche-solide OpenSSH.


0 commentaires