You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用C#和SSH在RDP中执行CMD命令及权限问题排查

解决方案:C# WinForms 连接Windows Server远程执行命令

一、解决SSH认证失败问题及确认正确的SSH账号密码

1. 确认正确的用户名和密码

  • 用户名:就是目标Windows Server的本地管理员账号,或已授权远程访问的域账号。本地账号直接用用户名(如Admin),域账号格式为域名\用户名(如CORP\JohnDoe)。
  • 密码:对应Windows账号的登录密码,注意区分大小写、特殊字符,确保账号未被禁用,且拥有远程登录权限。

2. 检查OpenSSH Server配置

目标服务器需要正确配置OpenSSH Server才能允许密码认证:

  1. 打开C:\ProgramData\ssh\sshd_config文件(该目录默认隐藏)。
  2. 确保PasswordAuthentication配置项设为yes(默认可能是no),删除或注释掉前面的#。
  3. 若存在AllowUsers项,需将你的账号添加进去(如AllowUsers Admin CORP\JohnDoe)。
  4. 重启OpenSSH SSH Server服务(通过服务管理器执行)。
  5. 确认Windows防火墙允许SSH端口(默认22)的入站连接。

3. 修正后的SSH连接代码

try
{
    string targetIp = "目标服务器IP";
    string username = "你的Windows账号"; // 本地账号直接填,域账号用"DOMAIN\\用户名"
    string password = "账号密码";

    var authMethod = new PasswordAuthenticationMethod(username, password);
    var connectionInfo = new ConnectionInfo(targetIp, 22, username, authMethod);

    using (var sshClient = new SshClient(connectionInfo))
    {
        sshClient.Connect();
        if (sshClient.IsConnected)
        {
            // 示例:执行ipconfig命令并获取结果
            var commandResult = sshClient.RunCommand("ipconfig");
            richTextBox1.Text = "命令执行结果:\n" + commandResult.Result;
        }
    }
}
catch (Exception ex)
{
    richTextBox1.Text = $"连接失败: {ex.Message}\n{ex.InnerException?.Message}";
}

二、其他远程执行命令的替代方法

如果SSH方式仍有问题,可考虑以下Windows原生方案:

1. 使用WinRM(Windows远程管理)

WinRM是Windows官方远程管理协议,适合无界面执行命令,无需额外安装OpenSSH:

using System.Management.Automation;
using System.Management.Automation.Runspaces;

try
{
    var targetUri = new Uri("http://目标服务器IP:5985/wsman"); // 默认HTTP端口5985,HTTPS为5986
    var credentials = new System.Net.NetworkCredential("账号名", "密码");
    var connectionInfo = new WSManConnectionInfo(targetUri) { Credential = credentials };

    using (var runspace = RunspaceFactory.CreateRunspace(connectionInfo))
    {
        runspace.Open();
        using (var pipeline = runspace.CreatePipeline())
        {
            // 示例:执行获取C盘文件列表的命令
            pipeline.Commands.AddScript("Get-ChildItem C:\\");
            var results = pipeline.Invoke();

            foreach (var result in results)
            {
                richTextBox1.Text += result.ToString() + "\n";
            }
        }
    }
}
catch (Exception ex)
{
    richTextBox1.Text = ex.Message;
}

前置配置:在目标服务器执行winrm quickconfig命令,按提示完成WinRM初始化配置。

2. RDP可视化交互(适合需要桌面操作的场景)

若需可视化RDP桌面并执行命令,可在WinForms中嵌入Microsoft RDP Client Control控件:

  • 右键项目 → 添加 → 引用 → 勾选Microsoft RDP Client Control(需提前安装Remote Desktop Services相关组件)。
  • 在Form中添加AxMsRdpClient9NotSafeForScripting控件,通过代码配置连接参数并模拟输入命令,但这种方式需处理桌面交互逻辑,复杂度较高,仅适合必须可视化操作的场景。

内容的提问来源于stack exchange,提问作者Mohammed Babach

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 22:47:27