【问题标题】:Multi hop SSH through SSH.NET in C#在 C# 中通过 SSH.NET 进行多跳 SSH
【发布时间】:2018-07-23 09:36:07
【问题描述】:

我正在对一台 Linux 机器进行 SSH,然后又想从那里通过 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 hostnamepasswordless ssh。如何控制第二个 SSH 会话并将命令传递给它?

甚至探索了CreateShell 功能,但似乎不建议用于自动化。

【问题讨论】:

  • 如果您只是创建一个新命令并发送它(例如touch test)并查看它在哪台机器上执行(上面有test 文件?)会发生什么
  • 我尝试了“ls -la”命令,它是在第一个 ssh 会话本身上执行的。
  • “无密码 ssh”是什么意思?这是如何配置/允许的?
  • 我已经从我的第一个 Linux 机器到第二个机器配置了无密码 ssh。 tecmint.com/…

标签: c# .net ssh ssh.net


【解决方案1】:

一般来说,尝试自动化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 是可以接受的(虽然仍然不理想)。例如。因为在第一个主机上设置了对第二台主机的身份验证。 IE。 .ssh 文件夹中可能有私钥,您不能将该密钥传输到您的客户端计算机。

即便如此,请尝试与系统管理员交谈以找到更好的解决方案。私钥仍然可以使用应用程序中包含的凭据进行访问,因此如果私钥本身直接包含在应用程序中,它并没有得到更好的保护。

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

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

【讨论】:

    猜你喜欢
    • 2021-12-05
    • 2015-02-09
    • 2021-10-28
    • 2019-10-19
    • 2019-06-04
    • 2012-06-04
    • 1970-01-01
    • 2019-03-17
    相关资源
    最近更新 更多