如何在 .NET 中通过 SFTP/SSH 执行 "double hop"?
How to perform "double hop" via SFTP/SSH in .NET?
在我的场景中,我试图从 Local App Server -> Middle Server (DMZ) -> Client Server
我需要将文件从 Local App Server
移动到 Client Server
并返回。
所以我的问题是最广泛使用的标准是什么?
我目前正在使用 WinSCP 通过 SFTP 连接到 Middle Server
,然后在 Middle Server
上调用命令将文件下载和上传到 Client Server
.我不太喜欢这个,因为我觉得它很容易出错,因为我是手动输入命令,而不是使用 WinSCP 的库来上传和下载。当我尝试使用命令列出 Client Server
上的所有文件时,它也让我陷入困境,因为函数 returns void
我查看了 SSH.NET,它似乎被更广泛地使用,但是我也看不到任何使用该库执行 "double hop" 的真正方法。
有了WinSCP .NET assembly,很简单:
SessionOptions sessionOptions = new SessionOptions
{
Protocol = Protocol.Sftp,
HostName = "example.com",
UserName = "username",
Password = "password",
SshHostKeyFingerprint = "ssh-rsa 2048 xxxxxxxxxxx...=",
};
sessionOptions.AddRawSettings("Tunnel", "1");
sessionOptions.AddRawSettings("TunnelHostName", "tunnel.example.com");
sessionOptions.AddRawSettings("TunnelUserName", "username");
sessionOptions.AddRawSettings("TunnelPasswordPlain", "password");
sessionOptions.AddRawSettings("TunnelHostKey", "ssh-rsa 2048 xxxxxxxxxxx...=");
using (Session session = new Session())
{
session.Open(sessionOptions);
// Your code
}
WinSCP GUI 可以 generate a code template to connect through tunnel,就像上面的一样,为您服务(TunnelHostKey
除外)。
使用 SSH.NET 您可以通过以下方式显式实现端口转发:
- 正在打开与 "Middle Server" 的连接;
- 创建转发端口;
- 正在打开到转发端口的第二个连接。
有关示例,请参阅 Connection to MySQL from .NET using SSH.NET Library。
另一个 hackish 解决方案是在 "Middle Server" 上执行 ssh
以方便第二个 "hop".
在我的场景中,我试图从 Local App Server -> Middle Server (DMZ) -> Client Server
我需要将文件从 Local App Server
移动到 Client Server
并返回。
所以我的问题是最广泛使用的标准是什么?
我目前正在使用 WinSCP 通过 SFTP 连接到 Middle Server
,然后在 Middle Server
上调用命令将文件下载和上传到 Client Server
.我不太喜欢这个,因为我觉得它很容易出错,因为我是手动输入命令,而不是使用 WinSCP 的库来上传和下载。当我尝试使用命令列出 Client Server
上的所有文件时,它也让我陷入困境,因为函数 returns void
我查看了 SSH.NET,它似乎被更广泛地使用,但是我也看不到任何使用该库执行 "double hop" 的真正方法。
有了WinSCP .NET assembly,很简单:
SessionOptions sessionOptions = new SessionOptions
{
Protocol = Protocol.Sftp,
HostName = "example.com",
UserName = "username",
Password = "password",
SshHostKeyFingerprint = "ssh-rsa 2048 xxxxxxxxxxx...=",
};
sessionOptions.AddRawSettings("Tunnel", "1");
sessionOptions.AddRawSettings("TunnelHostName", "tunnel.example.com");
sessionOptions.AddRawSettings("TunnelUserName", "username");
sessionOptions.AddRawSettings("TunnelPasswordPlain", "password");
sessionOptions.AddRawSettings("TunnelHostKey", "ssh-rsa 2048 xxxxxxxxxxx...=");
using (Session session = new Session())
{
session.Open(sessionOptions);
// Your code
}
WinSCP GUI 可以 generate a code template to connect through tunnel,就像上面的一样,为您服务(TunnelHostKey
除外)。
使用 SSH.NET 您可以通过以下方式显式实现端口转发:
- 正在打开与 "Middle Server" 的连接;
- 创建转发端口;
- 正在打开到转发端口的第二个连接。
有关示例,请参阅 Connection to MySQL from .NET using SSH.NET Library。
另一个 hackish 解决方案是在 "Middle Server" 上执行 ssh
以方便第二个 "hop".