实现通过ssh远程关闭的C#代码
需要引用SSH.NET(2020.0.1)包
using Renci.SshNet;
using Renci.SshNet.Common;
public static class SshHelper
{
/// <summary>
/// windows关机
/// </summary>
/// <param name="host">IP地址</param>
/// <param name="username">用户名</param>
/// <param name="password">密码</param>
/// <param name="time">延时时间,单位秒</param>
public static void WindowsShutDown(string host, string username, string password, int time = 0)
{
using (SshClient sshClient = new SshClient(host, username, password))
{
sshClient.Connect();
var cmd = sshClient.RunCommand($"shutdown -s -t {time}");
Check(cmd);
}
}
/// <summary>
/// IOS关机
/// </summary>
/// <param name="host">IP地址</param>
/// <param name="username">用户名</param>
/// <param name="password">密码</param>
/// <param name="rootpws"></param>
public static void IOSShutDown(string host, string username, string password, string rootpws)
{
using (SshClient sshClient = new SshClient(host, username, password))
{
sshClient.Connect();
try
{
var cmd = sshClient.RunCommand($"echo '{rootpws}' | sudo -S shutdown -h now");
Check(cmd);
}
catch (SshConnectionException ex)
{
//关机后会引起连接中断
Console.WriteLine(ex.Message);
}
}
}
/// <summary>
/// 检查指令是否错误
/// </summary>
/// <param name="cmd"></param>
private static void Check(SshCommand cmd)
{
if (!string.IsNullOrEmpty(cmd.Error))
{
throw new Exception(cmd.Error);
}
}
}