如何用C#和SSH在RDP中执行CMD命令及权限问题排查
解决方案:C# WinForms 连接Windows Server远程执行命令
一、解决SSH认证失败问题及确认正确的SSH账号密码
1. 确认正确的用户名和密码
- 用户名:就是目标Windows Server的本地管理员账号,或已授权远程访问的域账号。本地账号直接用用户名(如
Admin),域账号格式为域名\用户名(如CORP\JohnDoe)。 - 密码:对应Windows账号的登录密码,注意区分大小写、特殊字符,确保账号未被禁用,且拥有远程登录权限。
2. 检查OpenSSH Server配置
目标服务器需要正确配置OpenSSH Server才能允许密码认证:
- 打开
C:\ProgramData\ssh\sshd_config文件(该目录默认隐藏)。 - 确保
PasswordAuthentication配置项设为yes(默认可能是no),删除或注释掉前面的#。 - 若存在
AllowUsers项,需将你的账号添加进去(如AllowUsers Admin CORP\JohnDoe)。 - 重启OpenSSH SSH Server服务(通过服务管理器执行)。
- 确认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
相关产品推荐
相关产品推荐

