====== 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.