Cygrunsrv& autossh:在命令行中嵌入远程命令的方法?

时间:2011-12-30 11:40:56

标签: ssh cygwin tunnel

我在Windows XP上使用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正确创建隧道,但它没有向ServerA发送autossh命令“autossh -M 4321 serverB -N”。 我试图逃避引用,但我所有的努力没有任何区别,我没有看到自动搜索日志中发送的任何命令。

我认为问题与伪终端无关,而伪终端不是通过cygrunsrv创建的。

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

1 个答案:

答案 0 :(得分:3)

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

  

在调用环境中设置AUTOSSH_NTSERVICE = yes ...   改变[s] autossh的行为有三个有用的   方法:

     

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

尽管如上所述,似乎您可能有充分的理由不想在服务的ssh调用中-N(这会抑制命令执行)。删除AUTOSSH_NTSERVICE=yes应该处理它。它会有一些其他的小缺点,但你可能会忍受它。阅读README.Cygwin的其余部分了解详情。