我在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命令行以使其工作,还是应该考虑采用不同的方法?
答案 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的其余部分了解详情。