知識就是力量,我要努力向上。
今天筆記一下用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