exécuter des commandes sur un serveur unix via une application de base visuelle

J’ai besoin d’aide pour exécuter des commandes sur un serveur Unix à l’aide d’une application Visual Basic. J’utilise Visual Basic Express 2010.

PS Je peux me connecter au serveur en utilisant systems.net.sockets mais je ne peux pas envoyer de commandes à exécuter.

Je suis ouvert à toute approche différente, j’ai juste besoin de savoir comment je peux le faire.

Je peux penser à deux façons d’accomplir ceci:

  1. Avoir un programme comme Putty installé sur le système et faire un appel SSH au serveur (en dehors de l’application) en utilisant Putty et envoyer vos commandes de cette façon. Cela nécessitera des privilèges élevés sur votre application, car elle devra accéder directement au système. À mon avis, c’est la façon “laide” de le faire.

  2. Trouvez une bibliothèque VB SSH. J’ai trouvé celui-ci mais il doit y en avoir plus. Cela vous permettra de créer une connexion SSH à la boîte Unix et de passer les commandes à exécuter. Ce serait la “meilleure” façon.

MODIFIER:

Peu importe que ce soit le CSHARP. Vous pouvez télécharger Visual C # 2010 Express et ouvrir Renci.SshNet et le créer. Une fois construit, vous obtenez une DLL que vous pouvez ensuite append en référence à votre projet VB. Un peu de douleur, mais un petit prix à payer pour utiliser les éditions Express. 🙂

Voici une capture d’écran de la bibliothèque ssh ouverte dans Visual C # 2010 Express avec l’exécution de la compilation. Vous pouvez voir «Construire réussi» en bas à gauche: capture d'écran de build

Une fois que vous l’avez comme référence, vous pouvez utiliser la bibliothèque pour établir une connexion ssh au serveur et exécuter votre commande. Voici un exemple de code. J’ai créé une application Web VB, ajouté la DLL en tant que référence et ajouté un événement click à un bouton qui a généré les résultats dans un contrôle d’étiquette:

 Protected Sub btnSSHTest_Click(sender As Object, e As EventArgs) Handles btnSSHTest.Click 'Create the objects needed to make the connection' Dim connInfo As New Renci.SshNet.PasswordConnectionInfo("hostname", "username", "password") Dim sshClient As New Renci.SshNet.SshClient(connInfo) 'Need to hold the command' Dim cmd As Renci.SshNet.SshCommand Using sshClient 'connect to the server' sshClient.Connect() 'Run the command and put the results into the cmd object. In this case' 'I am just running a directory list' cmd = sshClient.RunCommand("ls -lthr") 'my web page had a label control on it. I placed the results of the cmd into' 'the label' lblResult.Text = cmd.Result 'Close the connection.' sshClient.Disconnect() End Using End Sub 

MODIFIER:

Juste pour s’assurer que cela fonctionnait dans une application non-web, j’ai fait l’exemple dans une application Windows Form que j’ai créée en utilisant Vb 2010 express. J’ai ajouté un bouton et une étiquette au formulaire et ajouté le code ci-dessus à l’événement clic sur le bouton. Ensuite, j’ai ajouté une référence à la DLL (bibliothèque) que j’ai créée à partir de C # 2010 Express.

Ceci est une capture d’écran de l’ajout de la référence: comment ajouter une référence

Voici une capture d’écran des propriétés du projet montrant que la référence a été ajoutée: capture d'écran montrant la référence dans le projet

Ensuite, j’ai exécuté le projet et cliqué sur le bouton. La boîte de connexion à unix a été établie et les résultats de la commande (dans ce cas «ls -lthr») ont été placés dans l’étiquette. Je me suis connecté en tant que root (non recommandé) et j’ai exécuté la commande depuis le répertoire / root /. C’est pourquoi il n’y a pas grand chose là-bas. application en cours d'exécution