Barra laterale

programmazione:mono:applicazione_spegni_server_ssh

Applicazione spegni server ssh

Autore: Fabio Di Matteo
Ultima revisione: 26/03/2013

In questo articolo vedremo come realizzare un'interfaccia grafica in winforms per spegnere il nostro server ssh tramite l'invio del comando halt . Per la realizzazione dell'applicazione ho usato la libreria SharpSSH .

Il codice

spegni-server.cs

using System;
using System.Drawing;
using System.Windows.Forms;
 
using System.Collections; 
using Tamir.SharpSsh; // libreria ssh
 
using System.Threading;
 
class MForm : Form {
 
	// E' meglio dichiarare le variabili dei controlli come private
	// cosi' saranno accessibili facilmente anche dalle funzioni callback
	private Button btnSpegni, btnAnnulla;
	private Label lblStato;
 
    public MForm() {
 
        //Disegno una finestra
        Text = "Spegni server - Guaiana";
        Size = new Size(320, 280);
 
        //Bottone spegni
        btnSpegni = new Button();
        btnSpegni.Size = new Size(160, 50);
        btnSpegni.Text = "Spegni il server";
        btnSpegni.Parent = this; 
        btnSpegni.Location = new Point(70, 30);
 
        Image iconPower = Image.FromFile("power.png");
		btnSpegni.Image = iconPower;
		btnSpegni.ImageAlign = ContentAlignment.MiddleLeft;    
		btnSpegni.TextAlign = ContentAlignment.MiddleRight;
		btnSpegni.Click += new EventHandler(OnClickSpegni); 
 
		//Bottone Annulla
        btnAnnulla = new Button();
        btnAnnulla.Size = new Size(90, 40);
        btnAnnulla.Text = "Esci";
        btnAnnulla.Parent = this; 
        btnAnnulla.Location = new Point(100, 130);
        Image iconExit = Image.FromFile("exit.png");
		btnAnnulla.Image = iconExit;
		btnAnnulla.ImageAlign = ContentAlignment.MiddleLeft;    
		btnAnnulla.TextAlign = ContentAlignment.MiddleRight;
		btnAnnulla.Click += new EventHandler(OnClickAnnulla); 
 
        //Disegno la label dello stato
        Font font = new Font("Serif", 10);
 
        lblStato = new Label();
        lblStato.Parent = this;
        lblStato.Text = "Pronto alla connessione.";
        lblStato.ForeColor = Color.Gray;
        lblStato.Font = font;
        lblStato.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
        lblStato.Location = new Point(1, 230);
        lblStato.Size = new Size (310, 20);
 
 
        //centro la finestra nello schermo
        CenterToScreen();
    }
 
 
	void OnClickSpegni(object sender, EventArgs e)  //cosa fa quando viene cliccato
	{		
		btnSpegni.Enabled = false ;
		lblStato.ForeColor = Color.Green;
 
		//lancio un thread (SSHthread)
		Thread thread = new Thread(new ThreadStart(SSHthread)); 
		thread.Start();
	}
 
 
	void SSHthread()
	{
			string Host= "192.168.9.7";
			string User= "fabio";
			string Password="miapassword";
			string Command= "halt" ;
 
			try
			{
				SshExec exec = new SshExec(Host, User);
				exec.Password = Password;
 
				Console.Write("Connecting...");	 lblStato.Text = "Connessione in corso...";
 
				exec.Connect();
				Console.WriteLine("OK"); lblStato.Text = "Connesso...";
 
				string output = exec.RunCommand(Command);				
				Console.WriteLine(output);
 
				Console.Write("Disconnecting..."); lblStato.Text = "Disconnessione...";
 
				exec.Close();
				Console.WriteLine("Pronto."); 
				lblStato.Text = "Comando inviato correttamente.";
				btnSpegni.Enabled = false ;
			}
			catch(Exception ex)
			{
				Console.WriteLine(ex.Message);
				lblStato.ForeColor = Color.Red;
				lblStato.Text = "Server non raggiungibile";
				//MessageBox.Show(ex.Message, "Attenzione - Server non raggiungibile", MessageBoxButtons.OK, MessageBoxIcon.Error);
				btnSpegni.Enabled = true ;
			}	
	}
 
	void OnClickAnnulla(object sender, EventArgs e) { 
		Application.Exit();
	}
}
 
 
 
 
class MApplication {
    public static void Main() {
		Application.EnableVisualStyles(); // per migliorare l'aspetto grafico
 
        MForm mf = new MForm();
        Application.Run(mf);
    }
}

Contenuto cartella

Per completezza pubblico il contenuto della cartella del progetto.

-rw-r--r-- 1 fabio users  53248 24 giu  2007 DiffieHellman.dll
-rw-r--r-- 1 fabio users   1394 25 mar 23.47 exit.png
-rw-r--r-- 1 fabio users    186 26 mar 08.50 makefile
-rw-r--r-- 1 fabio users 184320 24 giu  2007 Org.Mentalis.Security.dll
-rw-r--r-- 1 fabio users   9662 26 mar 08.49 power.ico
-rwxrwxrwx 1 fabio users   3472 10 nov  2007 power.png
-rw-r--r-- 1 fabio users   3596 26 mar 08.25 spegni-server.cs
-rwxr-xr-x 1 fabio users  15872 26 mar 08.50 spegni-server.exe
-rw-r--r-- 1 fabio users 212992 24 giu  2007 Tamir.SharpSSH.dll

Makefile

all:
	gmcs -win32icon:power.ico -r:System.Windows.Forms.dll -r:System.Drawing.dll -r:DiffieHellman.dll -r:Org.Mentalis.Security.dll -r:Tamir.SharpSSH.dll -target:winexe spegni-server.cs

Dove -r:DiffieHellman.dll -r:Org.Mentalis.Security.dll -r:Tamir.SharpSSH.dll sono i file delle librerie dinamiche distribuite nella stessa cartella del programma e con -win32icon:power.ico diamo un'icona al file eseguibile sotto windows.


programmazione/mono/applicazione_spegni_server_ssh.txt · Ultima modifica: 18/04/2018 - 15:49 (modifica esterna)