2014-05-09 181 views
1

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

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

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

我需要能够执行和实时阅读的东西,因为这些命令我把会警惕根据结果我得到。

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

我试着只是盲目地按照正确的顺序执行命令,但是好像API一旦连接到目标服务器后就不愿意继续执行命令行。在超时达到之前,它不会采取任何行动。

只是为了澄清;我无法以任何方式修改服务器。这是设置。但是我知道这是可以做到的,因为通过Putty手动完成是没有问题的。我正在尝试在我的C#应用​​程序中重新创建Putty在这里执行的操作。在Putty中,我只需输入“ssh server”,输入我的凭据,并执行另一个“ssh服务器”。我想这样做的原因,仅仅是因为要做很多日常工作。相同的东西一遍又一遍,当它被累加起来需要相当多的时间。

我不确定这是API的问题,还是有一些标志或任何我可以放入我的命令使其工作。我已经阅读过有关L这样的标志,但它似乎并不适合我。这两台服务器通过使我们输入我们的用户名和密码腻子(或其他认证用户

任何人都知道如何做到这一点?(最好是使用C#和SharpSSH。)

我也是在Java中试过这个,我得到了完全相同的问题有-o ServerAliveInterval

回答

1

您可以尝试提高ServerAliveInterval限制 使用选项=在SSH

您也可以使用sshpass嵌套ssh和密码的ssh少使用 。。: sshpass -p'password1'ssh -t username @ host1“ss hpass -p'password2'-t username @ host2“