通过另一个SSH连接SSH

本文关键字:SSH 连接 另一个 | 更新日期: 2023-09-27 18:02:37

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

到目前为止,我已经为此尝试了各种api。SharpSSH之类的。情况如下:

Me -> SSH server -> SSH target server

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

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

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

只是为了澄清;我不能以任何方式修改服务器。这就是设置。然而,我知道这是可以做到的,因为通过Putty手工完成是没有问题的。我试图在我的c#应用程序中重新创建Putty在这里所做的事情。在Putty中,我只需输入"ssh server",输入我的凭据,然后执行另一个"ssh server"。我想做这件事的原因很简单,因为有很多日常工作要做。同样的东西一遍又一遍,加起来确实要花很多时间。

我不确定这是否是api的问题,或者是否有一些标志或任何我可以放入我的命令以使此工作。我读过像L这样的标志,但它似乎不太适合我。这两个服务器都通过让我们在Putty(或任何

)中输入用户名和密码来验证用户。

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

我也在Java中尝试了这个,并且我在那里得到了完全相同的问题。

通过另一个SSH连接SSH

您可以尝试增加您的ServerAliveInterval限制。使用option -o ServerAliveInterval=在ssh.

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