====== Applicazione spegni server ssh ====== Autore: **//Fabio Di Matteo//** \\ Ultima revisione: **//26/03/2013//** \\ \\ {{programmazione:mono:schermata-spegni_server_-_guaiana.png|}}{{programmazione:mono:screenshot-winxp.png|}} 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 [[http://www.tamirgal.com/blog/page/SharpSSH.aspx|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.