在C#中通过SSH.NET进行多跳SSH

我正在使用SSH到Linux机器,并再次从那里想要SSH到另一台Linux机器来执行几个Perforce任务。

using (SshClient ssh = new SshClient("ip address","username", "pwd")) { ssh.Connect(); command = ssh.CreateCommand("ssh hostname"); result = command.Execute(); Console.WriteLine(result); } 

ssh hostname密码少 ssh的地方。 如何控制第二个SSH会话并将命令传递给它?

甚至探索了CreateShell函数,但似乎没有建议自动化。

一般来说,尝试自动化ssh命令是一个糟糕的设计。

您最好使用端口转发(也称为SSH隧道)来实现“跳跃”。

 var firstClient = new SshClient(firstHostName, firstUserName, firstPassword); firstClient.Connect(); var port = new ForwardedPortLocal("127.0.0.1", secondHostName, 22); firstClient.AddForwardedPort(port); port.Start(); var secondClient = new SshClient(port.BoundHost, (int)port.BoundPort, secondUserName, secondPassword); secondClient.Connect(); var command = secondClient.CreateCommand("ls"); var result = command.Execute(); Console.WriteLine(result); 

在某些情况下,自动化ssh是可以接受的(虽然仍然不理想)。 例如,因为在第一个主机上设置了第二个主机的身份validation。 即.ssh文件夹中可能存在私钥,并且不允许将该密钥传输到客户端计算机。

即使这样,也可以尝试与系统管理员联系以寻找更好的解决方案。 仍然可以使用应用程序中包含的凭据访问私钥,因此如果私钥本身直接包含在应用程序中,则不会受到更好的保护。

无论如何, ssh可以在其命令行上接受命令,如:

 command = ssh.CreateCommand("ssh hostname command"); result = command.Execute(); Console.WriteLine(result);