【问题标题】:How to run a script on linux from a windows service?如何从 Windows 服务在 linux 上运行脚本?
【发布时间】:2010-12-02 21:13:54
【问题描述】:

有谁知道从用 C# 编写的 Windows 服务启动 bash 脚本(在 linux 机器上运行)的优雅方法?

我只能想到一些 putty 自动登录和登录时自动运行命令的组合。 但这看起来很笨拙,有点不安全。

安全性不需要很高,因为这两个盒子都位于公司防火墙内的内部 LAN 上。 并且只有系统管理员可以登录到 windows 框。

【问题讨论】:

    标签: windows linux bash service scripting


    【解决方案1】:

    由于您要求从 C# 中轻松使用的东西,网络服务器方法可能是最好的:快速且简单,并且不需要密码。在 /var/www/cgi-bin 中设置 Linux 脚本并使用 C# 魔法启动它以打开 http 套接字并调用 http://hostname/cgi-bin/programname

    【讨论】:

      【解决方案2】:

      您可以使用带有密钥身份验证的 SSH 来运行命令,而无需在应用程序中输入或存储密码。您必须在 Linux SSH 服务器中启用密钥身份验证(按照说明 here 创建密钥并将其存储在服务器上的适当位置),然后才能运行

      plink -i <key_location> user@machine "command"
      

      通过 Process.Start() 在您的应用程序中

      plink 是 PuTTY 附带的命令行实用程序。

      编辑:如果您不想要 PKI(这可能不是一个好主意,但您知道您的环境),您可以在 linux 框中设置一个 rsh 服务器并通过 rsh (Cygwin's rsh可能更适合与 linux 盒子一起使用)

      【讨论】:

      • 感谢 Vinko 的这个想法。 plink基本上是我已经想到的。但它依赖于接受的密钥,当你以不同的用户身份运行时,这通常会在 Windows 端变得很痛苦,等等。我想我正在寻找不依赖于使用 PKI 的东西。抱歉,如果我在最初的问题中不够清楚。
      • 顺便说一句,如果Linux bos上的目标用户始终相同,您可以共享密钥并将其存储在一个共同的位置,这样就完全没有痛苦了。跨度>
      【解决方案3】:

      我使用Cygwin 执行此操作,包括 ssh 和 cron 的可选包。几乎和使用真正的 Unix 机器一样优雅。

      【讨论】:

        【解决方案4】:

        如果他们在防火墙后面,你可以在 linux 机器上创建一个迷你服务器,等待给定端口上的命令。 Windows 可以远程登录到该端口并发送命令。

        【讨论】:

          【解决方案5】:

          如果 linux 机器正在运行 samba,你可以使用魔法脚本 http://oreilly.com/catalog/samba/chapter/book/ch08_02.html

          我可能会在 linux 机器上运行一个网络服务器并通过 http 请求运行脚本

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-05-24
            • 1970-01-01
            • 2015-02-18
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多