2

我在 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”。我试图逃避报价,但我所有的努力都没有任何区别,而且我没有看到 autossh 日志中发送的任何命令。

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

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

4

1 回答 1

3

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

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

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

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

于 2011-12-30T19:01:55.870 回答