c# - 使用远程桌面服务 API 反向 SSH 隧道或 TCP 隧道
问题描述
我正在制作一个应用程序,允许对我自己的学习过程进行双向桌面控制,我不喜欢在 RDP 会话进行时标准 RDP 会话锁定端点计算机。
设置如下:
- 家中的 SSH 服务器
- 家里的电脑A。
- 客户端端点处的计算机 B。
问题是我无法与通过 RDP API 提供的连接字符串建立连接。我尝试了 NAT UPNP 端口转发,但我已将其排除在外。
我目前感兴趣的途径是创建一个反向 ssh 隧道,并让机器 B 隧道进入 ssh 服务器,从那时起计算机 A 将运行: ssh -l 3389:127.0.0.1:3389 credentials <--目前我是通过腻子做到这一点。(将使用 ssh 库自动执行此操作)
其次,也可以通过 TCP 建立连接:
客户端 B -> 连接到客户端 A(或服务器链接它们并路由数据) 客户端 B 生成 RDP 字符串 客户端 B 向客户端 A 发送 RDP 字符串 客户端 A 尝试连接到客户端 B 的活动 RDP 会话。..在这里我碰壁了。由于生成的连接字符串指向一个公共可路由地址 (IPv6),其余的是临时 IPv6 地址和私有 IPv4 地址和链路本地地址。
然后计算机 B 将反向隧道进入 ssh 服务器:
ssh -R 6000:127.0.0.1:3389 credentials <-- 也可以通过 putty 进行测试。
如果我要打开内置的远程桌面应用程序和目标,这将有效
本地主机:6000
但我希望客户端(计算机 B)生成一个连接字符串并通过 TCP 发送它(我可以在内部处理这个,但只是手动复制粘贴连接字符串。仍然只是为了测试。)
这是分解为标签的连接字符串:
<E>
<A KH="QHltZY9ISIdaMb3DNLVCVL8z22Q="
KH2="sha256:cEv4C57cmofFr8bJsttCX+taX5sWxWmgvSjpWRpTZ8U="
CE=
"MIIC4jCCAcqgAwIBAgIQSbu3zINwkqBB78x2uwORijANBgkqhkiG9w0BAQsFADAa
 MRgwFgYDVQQDEw9QcmltYXJ5LURlc2t0b3AwHhcNMTgwNjA4MDY1MDU1WhcNMTgx

MjA4MDY1MDU1WjAaMRgwFgYDVQQDEw9QcmltYXJ5LURlc2t0b3AwggEiMA0GCSqG

SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDQ4tSRTPnCJuhCEJoOY8veHaFNg02Zmlg+

3eXZCH65Rejxlk1cmARknhw5+MuXTvka+oApQeWtZQBTpoE/KD1vaHOnQS0yLc8P

g6BvekNcoOY+6U9zOc1dP+EignJ8dHkSYc8Jr+k/OCfDTFoQZ/HVRUKHwd1ScNa2

YczGSrhboCevbSQxSTtcsI7H4tL6d58fdlp+lPXkLCkzo29IQCqKT5q94geXLvDa

t/U2rK6OcRFycEoNrwNPy7bwAnfIRTFDrLiQ8/6b28DrpPM7cJyM+K6cqsIOkkAd

gXPJNNMMKT3ej1KDTZ+UiLq3c9plPP7SUm9xLx7rhEct+zTf8RUhAgMBAAGjJDAi

MBMGA1UdJQQMMAoGCCsGAQUFBwMBMAsGA1UdDwQEAwIEMDANBgkqhkiG9w0BAQsF

AAOCAQEApU2ec3ZgWDHQ4/gsXv/wlpLeIMbeIpZrf9NpgqV6Ig3SR8PMldEgfGfz

XpB6C8mdoqCQglVWijr7M/QvZ9emrwNkfEDiKFuUHUETvdSD48jPJEwGtphhM58e

07O+y8VP5vrOn0uR/VTKx8M9OMBehDhu9SC1H3/NGqRfbGDleCbTz1KvAFKOJrCH

EvDHB+hyUFlapW/q/ZIMOefaYFYv/vnZvI6Sfy/NDKkSaOR0RBjrRA2dbmj6D0YU

EuU1FYwqmTtW8jlmoz2WfaLEli8QLkGx6lw1ej891g5AvvdD1UWVAUfssIlMl1YL

NSp6g8qJJrKtQvlCVUxwG4IH4ufb9w=="
ID="secretusername"
/>
<C>
<T ID="1" SID="0">
<L P="55114" N="fe80::710b:8671:823c:7aab%17"/>
<L P="55115" N="2604:282:3900:8eb0::af33"/>
<L P="55117"N="2604:282:3900:8eb0:710b:8779:28c3:7aab"/>
<L P="55117" N="2604:282:3900:8eb0:5dc5:b08e:de21:8bb8"/>
<L P="55118" N="10.0.0.14"/>
</T>
</C>
</E>
可能需要注意的是,<T> 标签之间列出的许多地址都是多余的
我的问题主要是:有没有一种方法可以生成一个支持反向 ssh 或允许 TCP 重新路由数据并提供可公开访问的地址的连接字符串,或者有没有一种方法可以将我自己的标签附加到连接字符串:这将允许连接工作。
该应用程序可以在本地网络上正常工作。我已经搜索了我试图解决的特定问题的答案,感谢您提供任何建议,谢谢。
TLDR
机器 A:
ssh -L 3389:127.0.0.1:3389 凭据
机器 B:
ssh -R 6000:127.0.0.1:3389 凭据
SSHD:
连接两个隧道
机器 A:内置 windows 实用程序可以定位 localhost:6000 并远程连接到机器 B。
问题:不想使用内置实用程序。
无法使用机器 B 生成的连接字符串进行远程连接。因为它只指向设备的本地地址。
那么,如何在没有端口转发的情况下生成支持公共可路由地址的连接字符串。
解决方案
推荐阅读
- .net - .NET 忽略 SSL 证书验证
- javascript - 从Commerce js获取数据时获取元命名对象
- c - 恢复问题:文件格式不支持错误
- javascript - 通过 JavaScript 将鼠标悬停在部分 div 上时显示工具提示
- html - Angular:在 HTML 中动态创建组件不起作用
- c# - 收件人域不匹配 Mailchimp
- javascript - 如果用户在 Chrome 上设置“Web 内容的强制暗模式”,如何禁用?
- python - 使用正则表达式获取年龄
- google-cloud-transcoder - 单个转码时间是 VS 全部在谷歌云中的单个作业/配置文件中完成的 2-3 倍
- c# - 在 linq 语句中使用具有多个参数的表达式