12
votes

Comment établir facilement une connexion SSH dans QT?

Je cherche un moyen facile d'établir une connexion SSH à QT similaire à la façon dont je peux opérer en Java.

Par exemple, pour vous connecter à une connexion SSH via Java, je peux faire: P >

import com.sshtools.j2ssh.SshClient;
import com.sshtools.j2ssh.transport.IgnoreHostKeyVerification;
import com.sshtools.j2ssh.authentication.PasswordAuthenticationClient;
import com.sshtools.j2ssh.authentication.AuthenticationProtocolState;

 ......

    SshClient ssh = new SshClient();
    try {
        // Timeout of ten seconds
        ssh.setSocketTimeout(10*1000);
        ssh.connect(ip, port, new IgnoreHostKeyVerification());

        PasswordAuthenticationClient auth = new PasswordAuthenticationClient();
        auth.setUsername(username);
        auth.setPassword(password);

        if (ssh.authenticate(auth) != AuthenticationProtocolState.COMPLETE) {
            errorLabel.setForeground(Color.RED);
            errorLabel.setText("Username or password is incorrect");
        }
        else
            successful = true;
    }
    catch (Exception e) {
        errorLabel.setForeground(Color.RED);
        errorLabel.setText("Cannot log into website");
        e.printStackTrace();
    }


0 commentaires

4 Réponses :


3
votes

voir libqxt . Recherchez les classes QXTSH. HG Repo à l'aide de Libssh2 en interne.


3 commentaires

@ Naszta-- c'est à la version 0.6.1. Est-ce stable, dans votre expérience?


@MMR: Pourquoi ça ne marche pas? Cela peut aider.


@ Naszta-- c'est libsssh2, pas libqxt. Devinez que c'est ma prochaine chose à essayer. On dirait que les gars qui ont rassemblé libqxt ne savaient pas à s'assurer que cela fonctionnait sur Windows avec SSH, car elle nécessite STDINT.H. STDINT.H n'a pas été expédié avec un compilateur Windows avant VS2010, mais QT ne peut pas encore utiliser une boîte à outils de 2010 facilement.



5
votes

J'ai cherché une sorte de solution à cela pendant quelques jours, puis j'ai oublié le problème. Ensuite, aujourd'hui, j'ai trébuché sur ce petit bijou dans la source Qt-Creator UTILS :: SSH , comprend le support pour SFTP, SSH uni et toutes sortes de friandises.

Déménagement des trucs de Qt-Creator peut être une douleur, mais avoir suivi ce processus, il revient à saisir le botan (l'une des autres libs de Qt-Creator) + Utils


1 commentaires

C'est fascinant; Je vais devoir jeter un coup d'oeil. Honnêtement, j'ai fini par envelopper libssh2 pour que cela fonctionne pour travailler et créer ma propre bibliothèque et un tas de tests.



17
votes

Voici une "prise" asynchrone SSH & SCP "J'ai écrit pour qt qui est la plate-forme croisée. Cela nécessite libsssh et n'est pas parfait (cache des éléments de passe-clé RSA, fournit des réponses de commande en une seule prise de vue au lieu de des signaux LIVEYAD), mais il travaillera probablement pour vos besoins. Afin de recevoir ce fichier de travail pour Windows, ce fichier doit être le premier fichier inclus dans votre projet (de sorte que QT n'essaye pas d'importer Windows.h avant que cela puisse importer le code de socket Windows approprié).

en-tête: xxx

source: xxx


4 commentaires

Vous devriez mettre à jour cela et le mettre dans github, il semble vraiment utile! :)


Mise à jour Github à venir bientôt. Trop de projets et si peu de temps!


Fantastique. Je suis nouveau à qt. A pris votre code et pouvait faire SSH, vous connecter, etc., merci.


Si vous le téléchargez déjà à Github, pouvez-vous partager le lien s'il vous plaît?



0
votes

J'utilise libsssh2 http://www.libssh2.org/ avec qt. J'utilise le moyen le plus simple et les prises natales. Je n'avais pas le temps de le convertir pour utiliser des sockets Qt. Cependant, cela fonctionne bien. La description du projet est: http://www.chaosstuff.com /2013/09/gnome-mplayer-remote-with-qt-and-libssh2.html et le code source est dans: https://bitbucket.org/nchokoev/qtshremote


2 commentaires

J'ai essayé votre code source mais ça ne construit pas. Il semble que le projet principal ne soit pas lié aux bibliothèques et il existe également un conflit d'utilisation du fichier C ++ et C.


Si difficile d'installer la bibliothèque.