【问题标题】:Cygrunsrv & autossh : A way to embedd remote commands in the command line?Cygrunsrv & autossh:一种在命令行中嵌入远程命令的方法?
【发布时间】:2011-12-30 11:40:56
【问题描述】:

我在 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 命令行以使其正常工作,还是我应该考虑另一种方法?

【问题讨论】:

    标签: ssh cygwin tunnel


    【解决方案1】:

    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 的其余部分。

    【讨论】:

    • 非常感谢 Andrew,我在命令行中删除了 AUTOSSH_NTSERVICE=yes 并且它起作用了。我相信这是一个必要的选项,因为它是作为服务加载的,我显然错过了 -N 标志注释在禁用 shell 访问的自述文件中,阻止了我的第二个 autossh 调用。
    • 再次感谢您的时间和书面答复。祝你有美好的一天!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-11
    • 1970-01-01
    • 2020-09-03
    • 2011-08-01
    • 2021-05-10
    • 2011-07-06
    相关资源
    最近更新 更多