我正在使用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
函数,但似乎没有建议自动化。
答案 0 :(得分:3)
通常,尝试自动执行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
是可以接受的(但仍然不理想)。例如。因为对第一台主机设置了第二台主机的身份验证。即.ssh
文件夹中可能有私钥,您不能将该密钥传输到客户端计算机。
即便如此,请尝试与系统管理员联系以寻找更好的解决方案。私钥仍然可以使用您的应用程序中包含的凭据进行访问,因此如果私钥本身直接包含在应用程序中,它就不会受到更好的保护。
无论如何,ssh
可以在其命令行上接受命令,例如:
command = ssh.CreateCommand("ssh hostname command");
result = command.Execute();
Console.WriteLine(result);