2

所以我试图找出一种方法来执行命令并使用 C# 从非常标准的 SSH 连接中读取数据。唯一的挑战是我不能直接连接到有问题的服务器,如果你愿意的话,我必须通过另一个 SSH 连接,比如一种代理。

到目前为止,我一直在为此尝试各种 API。SharpSSH 等。情况如下:

我 -> SSH 服务器 -> SSH 目标服务器

我需要能够实时执行和读取内容,因为我输入的命令会根据我得到的结果而谨慎。

到目前为止,我得到的最接近的是我一直建立连接,但在登录超时结束之前我没有从目标服务器获得任何信息。基本上,我连接并登录到“代理”服务器,执行“ssh targetserver”,然后整个过程安静了大约 30 秒。那时,我一次收到很多数据。来自目标服务器的登录提示,以及一条消息说我登录时间过长。然后目标服务器关闭连接,这以某种方式导致“代理”服务器刷新结果,以便我可以看到发生了什么。

我试图盲目地以正确的顺序执行命令,但是一旦我连接到目标服务器,API 似乎不愿意继续执行命令。在达到超时之前它不会采取任何行动。

只是为了澄清;我无法以任何方式修改服务器。这是设置。但是我确实知道它可以完成,因为通过 Putty 手动完成完全没有问题。我正在尝试在我的 C# 应用程序中重新创建 Putty 在这里所做的事情。在 Putty 中,我只需键入“ssh server”,输入我的凭据,然后再创建一个“ssh server”。我想这样做的原因很简单,因为有很多日常工作要做。同样的东西一遍又一遍,加起来确实需要很多时间。

我不确定这是否是 API 的问题,或者是否有一些标志或任何我可以在我的命令中放入以使其工作的东西。我已经阅读了诸如 L 之类的标志,但它似乎对我来说并不是那么好。两台服务器都通过让我们将用户名和密码输入 Putty(或其他任何内容)来验证用户身份

有人知道怎么做吗?(最好使用 C# 和 SharpSSH。)

我也在Java中试过这个,我在那里遇到了完全相同的问题。

4

1 回答 1

1

您可以尝试增加 ServerAliveInterval 限制。在 ssh 中使用选项 -o ServerAliveInterval=。

您也可以将 sshpass 用于嵌套 ssh 和无密码 ssh。使用: sshpass -p 'password1' ssh -t username@host1 "sshpass -p 'password2' -t username@host2"

于 2014-12-18T06:45:40.103 回答