通过WinSCP / SSH隧道从Windows C#上传文件

时间:2018-08-14 18:26:48

标签: c# .net ssh ssh-tunnel winscp-net

我将Windows服务器上的WinSCP桌面应用程序用于物理接口,以将文件上传到Linux服务器。我使用SCP协议,并且在“高级”选项中,我在与安全服务器的连接上传递了SSH命令ssh username@ipaddress,以隧道传输到我要上传文件的服务器。这使我可以直接从Windows通过Linux安全服务器将文件上传到端点Linux文件服务器。

源Windows服务器->安全Linux服务器->目标Linux服务器

使用C#,我可以使用此Session.ExecuteCommand方法/成功上传或发送命令。但是,当我发送命令ssh username@ipaddress时,我的脚本就挂在那里。我认为会话上下文在那里发生了变化,并且需要发生一些异步C#魔术。

我可以使用以下命令成功发送异步SSH命令:https://csharp.hotexamples.com/examples/Renci.SshNet/SshClient/CreateCommand/php-sshclient-createcommand-method-examples.html#0x12a75b3c713031851a6d9f2c47732ffcab6bad015f554fa89ef604d333290d4a-28,,45

我需要等效的C#才能模拟我的桌面WinSCP应用程序,在该应用程序中,我通过SSH命令ssh username@ipaddress从源Windows服务器通过Linux安全服务器自由上传到远程Linux文件服务器。

是否可以将这些示例组合在一起以创建所需的C#代码?通过异步命令的WinSCP会话/ SSH隧道。我对示例非常熟悉,请帮忙!

1 个答案:

答案 0 :(得分:0)

在WinSCP .NET程序集中,WinSCP GUI中“ Shell”选项的等效项是:

sessionOptions.AddRawSettings("Shell", "ssh username@ipaddress");

请参见raw site settings

WinSCP GUI可以generate a code template为您服务。


由于WinSCP内置了SSH隧道支持,因此这可能是一个过大的选择,请参阅Tunnel page of its Advanced site settings dialog

Tunnel page


等效于C#的是:

sessionOptions.AddRawSettings("Tunnel", "1");
sessionOptions.AddRawSettings("TunnelHostName", "example.com");
sessionOptions.AddRawSettings("TunnelUserName", "john");
sessionOptions.AddRawSettings("TunnelPasswordPlain", "password");