ActiveXperts Network Component Ssh Object

SSH Secure Shell allows secure network services over an insecure network, such as the Internet.

The Secure Shell concept originated on UNIX as a replacement for the insecure "Berkeley services", that is, the rsh , rcp, and rlogin commands. SSH Secure Shell replaces other, insecure terminal applications (such as Telnet and FTP). It allows you to securely login to remote host computers, to execute commands safely in a remote computer, to securely copy remote files, to forward X11 sessions (on UNIX), and to provide secure encrypted and authenticated communications between two non-trusted hosts. Also arbitrary TCP/IP ports can be forwarded over the secure channel, enabling secure connection, for example, to an email service.

SSH Secure Shell with its array of unmatched security features is an essential tool in today's network environment. It is a powerful guardian against the numerous security hazards that nowadays threaten network communications.

With the Network Component Ssh object, you can login onto a remote machine running the SSH daemon, and execute a command or shell script. It has no user interface by itself: standard error and standard output are not copied to the console, but are copied to the corresponding object properties (StdErr and StdOut) instead. There are two ways to authenticate: by using a password or by using a 'private key'.

The Network Component Ssh object has the same functionality as the well-known PuTTY/PLink command-line utility, except that it has no user interface by itself: standard error and standard output are not copied to the console, but are copied to the corresponding object properties (StdErr and StdOut) instead.

The Ssh object is part of the Network Component. Overview of all Network Component objects:

DnsServer & DnsRecord - Ftp & FtpFile - Http - Icmp - IPtoCountry - Msn - Ntp - Radius - Rsh - Scp - SFtp - Ssh - SnmpManager - SnmpTrapManager - SnmpMibBrowser - Tcp - Tftp - TraceRoute - Udp - Xen - Wake-on-LAN - Xen (Citrix)


Ssh Sample code

Visual Basic .NET sample: Execute a script on a remote LINUX machine using SSH

Imports AxNetwork

Public Class SshForm
    Inherits System.Windows.Forms.Form

    Private objSsh As Ssh


#Region " Windows Form Designer generated code "

    Public Sub New()
        MyBase.New()

        'This call is required by the Windows Form Designer.
        InitializeComponent()

        'Add any initialization after the InitializeComponent() call

    End Sub

    'Form overrides dispose to clean up the component list.
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        If disposing Then
            If Not (components Is Nothing) Then
                components.Dispose()
            End If
        End If
        MyBase.Dispose(disposing)
    End Sub

    'Required by the Windows Form Designer
    Private components As System.ComponentModel.IContainer

    'NOTE: The following procedure is required by the Windows Form Designer
    'It can be modified using the Windows Form Designer.  
    'Do not modify it using the code editor.
    Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox
    Friend WithEvents label15 As System.Windows.Forms.Label
    Friend WithEvents label14 As System.Windows.Forms.Label
    Friend WithEvents CheckRequireHostKeyVerification As System.Windows.Forms.CheckBox
    Friend WithEvents label13 As System.Windows.Forms.Label
    Friend WithEvents label12 As System.Windows.Forms.Label
    Friend WithEvents label11 As System.Windows.Forms.Label
    Friend WithEvents Label6 As System.Windows.Forms.Label
    Friend WithEvents Label3 As System.Windows.Forms.Label
    Friend WithEvents Label2 As System.Windows.Forms.Label
    Friend WithEvents Label1 As System.Windows.Forms.Label
    Friend WithEvents GroupBox2 As System.Windows.Forms.GroupBox
    Friend WithEvents label10 As System.Windows.Forms.Label
    Friend WithEvents Label9 As System.Windows.Forms.Label
    Friend WithEvents Label8 As System.Windows.Forms.Label
    Friend WithEvents Label7 As System.Windows.Forms.Label
    Friend WithEvents ctlTimeout As System.Windows.Forms.TextBox
    Friend WithEvents ctlPort As System.Windows.Forms.TextBox
    Friend WithEvents ctlBrowse As System.Windows.Forms.Button
    Friend WithEvents ctlPassword As System.Windows.Forms.TextBox
    Friend WithEvents ctlPrivateKeyFile As System.Windows.Forms.TextBox
    Friend WithEvents ctlRun As System.Windows.Forms.Button
    Friend WithEvents ctlUser As System.Windows.Forms.TextBox
    Friend WithEvents ctlCommand As System.Windows.Forms.TextBox
    Friend WithEvents ctlHost As System.Windows.Forms.TextBox
    Friend WithEvents ctlView As System.Windows.Forms.Button
    Friend WithEvents ctlLogFile As System.Windows.Forms.TextBox
    Friend WithEvents ctlStdErr As System.Windows.Forms.TextBox
    Friend WithEvents ctlStdOut As System.Windows.Forms.TextBox
    Friend WithEvents ctlResult As System.Windows.Forms.TextBox
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
    ...
    End Sub

#End Region

    Private Sub SshForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) 
  Handles MyBase.Load
        objSsh = New Ssh
    End Sub

    Private Sub ButtonBrowse_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) 
  Handles ctlBrowse.Click
        Dim fdlg As System.Windows.Forms.OpenFileDialog

        fdlg = New OpenFileDialog
        fdlg.Title = "Select Attachment"
        fdlg.InitialDirectory = "C:\"
        fdlg.Filter = "PPK files (*.ppk)|*.ppk"
        fdlg.FilterIndex = 1
        fdlg.RestoreDirectory = True
        If (fdlg.ShowDialog() <> DialogResult.OK) Then
            Exit Sub
        End If

        ctlPrivateKeyFile.Text = fdlg.FileName
    End Sub

    Private Sub ButtonRun_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) 
  Handles ctlRun.Click
        objSsh.Command = ctlCommand.Text
        objSsh.Host = ctlHost.Text
        objSsh.Port = Int16.Parse(ctlPort.Text)
        objSsh.RequireHostVerification = CheckRequireHostKeyVerification.Checked
        objSsh.UserName = ctlUser.Text
        objSsh.Password = ctlPassword.Text
        objSsh.PrivateKeyFile = ctlPrivateKeyFile.Text
        objSsh.ScriptTimeOut = Int32.Parse(ctlTimeout.Text)
        objSsh.LogFile = ctlLogFile.Text

        ' Clear output form-fields, i.e. stdout and stderr
        ctlStdOut.Text = ""
        ctlStdErr.Text = ""

        Cursor.Current = Cursors.WaitCursor

        objSsh.Run()

        Cursor.Current = Cursors.Default

        ctlResult.Text = objSsh.LastError & ": " & objSsh.GetErrorDescription(objSsh.LastError)

        If (objSsh.LastError = 0) Then
            ctlStdOut.Text = objSsh.StdOut.Replace(vbLf, vbCrLf)
            ctlStdErr.Text = objSsh.StdErr.Replace(vbLf, vbCrLf)
        End If
    End Sub

    Private Sub buttonView_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) 
  Handles ctlView.Click
        If (System.IO.File.Exists(ctlLogFile.Text.ToString())) Then
            System.Diagnostics.Process.Start(ctlLogFile.Text)
        End If
    End Sub

End Class

Visual C# .NET sample: Execute a script on a remote LINUX machine using SSH

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using AxNetwork;


namespace Demo
{
  /// <summary>
  /// Summary description for SshForm.
  /// </summary>
  public class SshForm : System.Windows.Forms.Form
  {
    internal System.Windows.Forms.GroupBox GroupBox2;
    private System.Windows.Forms.Label label10;
    internal System.Windows.Forms.Label Label9;
    internal System.Windows.Forms.Label Label8;
    internal System.Windows.Forms.Label Label7;
    internal System.Windows.Forms.GroupBox GroupBox1;
    internal System.Windows.Forms.Label Label6;
    internal System.Windows.Forms.Label Label3;
    internal System.Windows.Forms.Label Label2;
    internal System.Windows.Forms.Label Label1;
    internal System.Windows.Forms.Label label11;
    internal System.Windows.Forms.Label label12;
    internal System.Windows.Forms.Label label13;
    internal System.Windows.Forms.Label label14;
    internal System.Windows.Forms.Label label15;
    private System.Windows.Forms.Button ctlView;
    private System.Windows.Forms.TextBox ctlLogFile;
    internal System.Windows.Forms.TextBox ctlStdErr;
    internal System.Windows.Forms.TextBox ctlStdOut;
    internal System.Windows.Forms.TextBox ctlResult;
    internal System.Windows.Forms.TextBox ctlTimeout;
    private System.Windows.Forms.CheckBox ctlRequireHostKeyVerification;
    internal System.Windows.Forms.TextBox ctlPort;
    private System.Windows.Forms.Button ctlBrowse;
    internal System.Windows.Forms.TextBox ctlPassword;
    internal System.Windows.Forms.TextBox ctlPrivateKeyFile;
    internal System.Windows.Forms.Button ctlRun;
    internal System.Windows.Forms.TextBox ctlUser;
    internal System.Windows.Forms.TextBox ctlCommand;
    internal System.Windows.Forms.TextBox ctlHost;
    /// <summary>
    /// Required designer variable.
    /// </summary>
    private System.ComponentModel.Container components = null;

    public SshForm()
    {
      //
      // Required for Windows Form Designer support
      //
      InitializeComponent();

      //
      // TODO: Add any constructor code after InitializeComponent call
      //
    }

    /// <summary>
    /// Clean up any resources being used.
    /// </summary>
    protected override void Dispose( bool disposing )
    {
      if( disposing )
      {
        if(components != null)
        {
          components.Dispose();
        }
      }
      base.Dispose( disposing );
    }

    #region Windows Form Designer generated code
    /// <summary>
    /// Required method for Designer support - do not modify
    /// the contents of this method with the code editor.
    /// </summary>
    private void InitializeComponent()
    {
        ...

    }
    #endregion

    private Ssh objSsh;

    private void SshForm_Load(object sender, System.EventArgs e)
    {
      objSsh = new Ssh();
      objSsh.Clear ();
      ctlTimeout.Text = objSsh.ScriptTimeOut.ToString();
      ctlLogFile.Text = System.IO.Path.GetTempPath() + "SshLog.txt";
    }

    private void ctlRun_Click(object sender, System.EventArgs e)
    {
      objSsh.Command      = ctlCommand.Text;
      objSsh.Host        = ctlHost.Text;
      objSsh.Port        = Int16.Parse(ctlPort.Text);
      objSsh.RequireHostVerification = ctlRequireHostKeyVerification.Checked ?-1:0;
      objSsh.UserName      = ctlUser.Text;
      objSsh.Password      = ctlPassword.Text;
      objSsh.PrivateKeyFile  = ctlPrivateKeyFile.Text;
      objSsh.ScriptTimeOut  = Int32.Parse(ctlTimeout.Text);
      objSsh.LogFile      = ctlLogFile.Text;

      // Clear output form-fields, i.e. stdout and stderr
      ctlStdOut.Text = "";
      ctlStdErr.Text = "";

      Cursor.Current = Cursors.WaitCursor;

      objSsh.Run();

      Cursor.Current = Cursors.Default;

      ctlResult.Text = objSsh.LastError 

      if (objSsh.LastError == 0)
      {
        ctlStdOut.Text = objSsh.StdOut.Replace ( "\n", "\r\n" );
        ctlStdErr.Text = objSsh.StdErr.Replace ( "\n", "\r\n" );
      }
    }

    private void ctlBrowse_Click(object sender, System.EventArgs e)
    {
      System.Windows.Forms.OpenFileDialog fdlg;

      fdlg = new OpenFileDialog();
      fdlg.Title = "Select Attachment";
      fdlg.InitialDirectory = "C:\\";
      fdlg.Filter = "PPK files (*.ppk)|*.ppk";
      fdlg.FilterIndex = 1;
      fdlg.RestoreDirectory = true;
      if(fdlg.ShowDialog() != DialogResult.OK )
        return;

      ctlPrivateKeyFile.Text = fdlg.FileName;
    }

    private void ctlView_Click(object sender, System.EventArgs e)
    {
      if (System.IO.File.Exists( ctlLogFile.Text.ToString()))
      {
        System.Diagnostics.Process.Start( ctlLogFile.Text);
      }
    }

  }
}

On ftp.activexperts-labs.com, you can find a lot of Network Component samples. These samples are also part of the Network Component installation.

Visit ftp.activexperts-labs.com