Remote SSH to Ubuntu Client using C#

To convert the given C++ code into .NET C# code for remotely rebooting an Ubuntu machine from a Windows application, here's how you can do it:


C# Code:

using System;

using System.Diagnostics;


namespace RemoteReboot

{

    class Program

    {

        static void Main(string[] args)

        {

            string remoteHost = "your-ubuntu-ip";

            string username = "your-username";

            string password = "your-password"; // Ideally, use key-based authentication for better security

            string command = "sudo reboot";


            ExecuteRemoteCommand(remoteHost, username, password, command);

        }


        static void ExecuteRemoteCommand(string host, string user, string pass, string command)

        {

            Process process = new Process();

            process.StartInfo.FileName = "plink.exe"; // Path to plink.exe

            process.StartInfo.Arguments = $"-ssh {user}@{host} -pw {pass} \"{command}\"";

            process.StartInfo.UseShellExecute = false;

            process.StartInfo.RedirectStandardOutput = true;

            process.StartInfo.RedirectStandardError = true;

            process.StartInfo.CreateNoWindow = true;


            try

            {

                process.Start();

                string output = process.StandardOutput.ReadToEnd();

                string error = process.StandardError.ReadToEnd();

                process.WaitForExit();


                if (process.ExitCode == 0)

                {

                    Console.WriteLine("Command executed successfully.");

                    Console.WriteLine(output);

                }

                else

                {

                    Console.WriteLine("Error executing command:");

                    Console.WriteLine(error);

                }

            }

            catch (Exception ex)

            {

                Console.WriteLine("An error occurred: " + ex.Message);

            }

        }

    }

}


Explanation:

  1. Process Class:

    • The Process class is used to start an external process. In this case, it starts plink.exe, which is a command-line tool for PuTTY that allows you to make SSH connections.
  2. Arguments:

    • -ssh {user}@{host} specifies the SSH connection to the remote Ubuntu machine.
    • -pw {pass} is used to pass the password for the SSH connection. Note that using passwords like this is not secure. It's better to use key-based authentication.
    • "{command}" specifies the command to execute on the remote machine, which in this case is sudo reboot.
  3. Standard Output and Error:

    • The StandardOutput and StandardError are redirected to capture any output or error messages from the remote command execution.
  4. Error Handling:

    • The code includes basic error handling to catch and display any exceptions that occur during the execution.

Security Considerations:

  • Key-Based Authentication: Instead of using a password directly, it's recommended to use SSH key-based authentication for better security.
  • Secure Storage: If passwords must be used, consider using secure storage mechanisms like Windows Credential Manager or encrypting the password.

Using the Code:

  • plink.exe: Make sure plink.exe is available in your system's PATH or provide the full path to it in process.StartInfo.FileName.
  • Privileges: Ensure that the user has the necessary privileges to execute the sudo reboot command on the Ubuntu machine.

This C# code provides a straightforward way to remotely reboot an Ubuntu system from a Windows application using SSH.





Ulasan

Catatan popular daripada blog ini

SISTEM PENGOPERASIAN KOMPUTER (OS)

JENIS-JENIS SISTEM PENGOPERASIAN KOMPUTER

APA ITU ASCII (AMERICAN STANDARD CODE FOR INFORMATION INTERCHANGE) ?