2011-12-30 116 views
2

我在Windows XP上使用cygrunsrv和autossh创建一个服务,建立到远程服务器的隧道,但我也想从远程服务器创建另一个隧道到另一个服务器。Cygrunsrv&autossh:一种在命令行中嵌入远程命令的方法?

我可以使用此命令行实现它:

autossh -M 5432 serverA -t 'autossh -M 4321 serverB -N' 

但是当我想通过cygrunsrv设置它在Cygwin中,使其可以作为一个服务:

cygrunsrv -I TUNNEL -p /usr/bin/autossh -a "-M 5432 serverA -t 'autossh -M 4321 serverB -N'" -e AUTOSSH_NTSERVICE=yes -e AUTOSSH_POLL=20 -e AUTOSSH_GATETIME=30 

这不完全加工。该服务正在为ServerA正确创建隧道,但它不会将autossh命令“autossh -M 4321 serverB-N”发送到ServerA。 我试图逃避报价,但我所有的努力没有任何区别,我没有看到在autossh日志中发送任何命令。

我认为这个问题与不通过cygrunsrv创建的伪终端有关。

我想知道是否有办法修复我的cygrunsrv命令行以使其工作,或者我应该考虑一种不同的方法?

回答

3

Lionel,请尝试从cygrunsrv调用中删除AUTOSSH_NTSERVICE=yes。作为/usr/share/doc/autossh/README.Cygwin解释说:

设置AUTOSSH_NTSERVICE =是在调用环境...... 变化[S] autossh在三个有用的 方面的行为:

( 1)为每次调用ssh添加一个-N标记,从而禁用shell的访问。这个想法是,如果你运行autossh作为系统 服务,你正在使用它来转发端口; 将shell会话作为系统服务运行是没有意义的。 (如果你觉得这个推理 是错误的,请发送错误报告的作者或Cygwin的维护者, 并告诉我们你想要做的事。)

尽管上面有哪些说,似乎你可能有一个很好的理由不希望在服务的ssh调用中使用-N(这会抑制命令的执行)。去除AUTOSSH_NTSERVICE=yes应该照顾它。它会有一些其他的小缺点,但你可以忍受它。有关详细信息,请阅读README.Cygwin的其余部分。

+0

非常感谢安德鲁,我删除了AUTOSSH_NTSERVICE =是在我的命令行,它worked.I相信这是一个必要的选择,因为它加载的服务,我明显错过了-N标志注意到在自述,残疾shell访问,阻止我的第二个autossh调用被发送。 – Lionel 2012-01-04 16:56:27

+0

再次感谢您的时间和记录答案。祝你有美好的一天 ! – Lionel 2012-01-04 17:04:42