[C#]透過SSH.NET遠端執行Linux的SHELL指令

知識就是力量,我要努力向上。

今天筆記一下用C#程式遠端執行Linux的SSH指令

※其實最難的不是C#程式碼...是SSH指令阿(暈)

Linux部分

1.Linux系統中基本已經含有 SSH 的所有需要的軟體了,但預設並沒有啟用,故必須將其啟用才能連的上喔!

對Linux系統不熟的同學可以參考鳥哥: http://linux.vbird.org/linux_server/0310telnetssh/0310telnetssh.php#ssh_start 來啟用SSH

2.另一個則要確認iptables不要將22 port REJECT掉

相關參考還是鳥哥:http://linux.vbird.org/linux_server/0250simple_firewall.php#netfilter_syntax_clean 


C#部分

1. 從NuGet將「SSH.NET」這一個Library參考至專案

2. using Renci.SshNet 這個命名空間

using Renci.SshNet;

3. 只要將相關資訊帶入程式碼就可以了 ,寫起來就像連線MSSQL非常親民阿~


string _host = "這邊填IP";
string _username = "帳號";
string _password = "密碼";
int _port = 22;

//連線資訊
ConnectionInfo conInfo = new ConnectionInfo(_host, _port, _username, new AuthenticationMethod[]{
    new PasswordAuthenticationMethod(_username,_password)
});

//建立SshClient物件
SshClient sshClient = new SshClient(conInfo);
Console.WriteLine("輸入 _quite; 則關閉程式");
//使用無窮迴圈可以一直下Command
while (true)
{
   if (!sshClient.IsConnected)
   {
   //連線
       sshClient.Connect();
   }

   Console.WriteLine("輸入command:");
   string line = Console.ReadLine();

   //判斷是否關閉程式
   if (line.Equals("_quite;")){
       break;
   }
   if (string.IsNullOrWhiteSpace(line)){
       continue;
   }

   //執行指令
   SshCommand sshCmd = sshClient.RunCommand(line);
   if (!string.IsNullOrWhiteSpace(sshCmd.Error)){
       Console.WriteLine(sshCmd.Error);
   }else{
       Console.WriteLine(sshCmd.Result);
   }
}
//關閉連線釋放資源
sshClient.Disconnect();
sshClient.Dispose();

執行後就會長這樣:

egan2608@gmail.com