如何在 X++(或 C#)中使用 Renci.SshNet 从其他服务器安全地发送文件,你使用端口转发吗?

Posted

技术标签:

【中文标题】如何在 X++(或 C#)中使用 Renci.SshNet 从其他服务器安全地发送文件,你使用端口转发吗?【英文标题】:how to use Renci.SshNet in X++(or C#) to securely send files from other servers, do you use port forward? 【发布时间】:2020-10-05 18:54:23 【问题描述】:

我想在 C# 程序中使用 Renci.SshNet 将 csv 文件从 FileServer 服务器 (FL) 发送到目标服务器 (DEST)。 该程序在应用程序服务器 (AP) 上启动。 允许FL和DEST与防火墙通信,但不允许AP和DEST服务器直接与防火墙通信。

能否给我一个简单的 X++ 或 C# 示例源代码?

最重要的是,FL 服务器和 DEST 服务器之间的通信是加密的。

我在下面添加了我的问题。

目前允许 AP 和 DEST 与防火墙连接。由于AP和FL在同一个网段,所以FL的文件夹可以直接引用为网络文件夹。 以后防火墙会拒绝AP和DEST的连接,允许FL和DEST连接。而FL文件夹可以作为网络文件夹直接从AP引用的情况也没有改变。

如果您能给我一些建议,告诉我如何稍微重写程序源以建立一个安全的连接,其中 Internet 连接的范围是加密的。

今天我将向您展示我们系统上的 X++ 程序源的简化版本。

公共静态无效传输文件(str文件名) Microsoft.Dynamics.IntegrationFramework.Adapter.FileSystem 文件系统; Renci.SshNet.SftpClient sftpClient; System.IO.FileStream 文件流; 文件路径文件路径; FilePath 文件路径已处理; FTPHostName 主机名地址; FTPLoginUser loginUser; FTPLoginPwd loginPwd; int portSFTP = 22; hostNameAddress = "sftp.samplecompany.com" loginUser = "SFTPUSER" loginPwd = "密码" 文件路径 = "\\FL\CSV 文件夹\" 文件系统 = AifUtil::getClrObject(#FileSystemProgId); fileSystem = new Microsoft.Dynamics.IntegrationFramework.Adapter.FileSystem(); 全文件名 = 文件路径 + 文件名; sftpClient = new Renci.SshNet.SftpClient(hostNameAddress, portSFTP, loginUser, loginPwd); tts开始; sftpClient.Connect(); fileStream = new System.IO.FileStream(fullFileName, System.IO.FileMode ::Open); sftpClient.UploadFile(fileStream, 文件名); 文件流.Dispose(); sftpClient.Dispose(); tts提交;

【问题讨论】:

说实话,比起C#语言,我想要更多的X++示例源代码。但是,由于据说 C# 与 X++ 相似,因此 C# 也很受欢迎。 【参考方案1】:

端口转发确实是一种选择。但它不允许您将文件从 FL 传输到 DEST。您必须将文件从 FL 下载到 APP。然后使用端口转发从APP上传到DEST,post通过FL转发。


如果你想要直接传输,你所能做的就是通过 SSH shell 会话从 APP 到 FL 运行命令行 SFTP 客户端,以从 FL 传输到 DEST。

【讨论】:

亲爱的马丁谢谢你的回答。所以会很有帮助。您认为可以使用多跳直接将文件从 FL 传输到 DEST 吗?您能否参考下面的站点。多跳SSH隧道***.com/questions/48759639/… “你认为可以使用多跳直接将文件从 FL 传输到 DEST 吗?” – 我不明白。我已经回答了上面的问题。 亲爱的 Martin 先生,很抱歉问了两次同样的问题。我补充了我的问题。我不太明白为什么我需要下载,因为从AP到FL的文件夹可以作为网络文件夹引用。 如果您可以使用网络路径引用FL上的文件,则无需编码从FL下载到APP。但从技术上讲,文件仍然会被下载(文件内容必须从 FL 获取到 APP 才能上传到 DEST,但在您的情况下它是透明地发生的)。

以上是关于如何在 X++(或 C#)中使用 Renci.SshNet 从其他服务器安全地发送文件,你使用端口转发吗?的主要内容,如果未能解决你的问题,请参考以下文章

C# 数据库提取值包含特殊符号例如反斜杠,逗号。如何去除这些特殊符号?

如何高效地处理数百个项目中的数千个 C# 文件?

如何在 C# 中获取可用或使用的内存

如何在c#中替换字符串中的特定字符?

如何在 C# 中实现 X-FACEBOOK-PLATFORM 机制

如何在 C# Regex 中使用“或”、“和”?