在没有ssh的情况下在本地服务器上执行脚本

时间:2017-12-12 07:31:22

标签: linux go rpc

有一个局域网,机器在同一地址空间。

我有一个控制其他机器的管理器节点。有没有办法在任何这些机器上执行脚本? (注意:SSH未启用,我们无法在除经理机器之外的这些机器上安装任何代码)

目前,它通过在浏览器中打开一个http会话,然后提供用户名和密码,然后是每个脚本页面上的按钮来完成。我需要在Go中自动执行此操作。这可能吗?

例如一个这样的按钮:

`<form ACTION="enableSsh.cgi" method="get">
    <b>
        <input type="SUBMIT" VALUE="Enable SSH Service">
        <input type=hidden name=stamp value="########">
        <input type=hidden name=token value="********">
        <input type=hidden name=frame value="$%$%$%$%">
    </b>
</form>`

2 个答案:

答案 0 :(得分:1)

  

目前,它通过在浏览器中打开一个http会话,然后提供用户名和密码,然后是每个脚本页面上的按钮来完成。我需要自动执行此操作。

我认为您根本不需要关心接口,直到找到在后端执行脚本的方法。从我的角度来看,如果没有在它们上面设置至少SSHD,就不可能在机器上执行脚本。要执行脚本,您需要在远程计算机上运行某种服务器来处理您的请求。

另外,请查看配置管理系统,例如:AnsibleSaltStackso on,因为即使SSH似乎也是一个太低级别的工具供您使用 - 案例。

答案 1 :(得分:1)

是的,可以单独使用Go标准库。

要研究的事项,按此顺序:

  1. 如何通过Internet浏览器对HTML表单进行编码并将其发送到HTTP服务器。

    要熟悉的事情:

  2. 提交HTML表单时,数据会发送到HTTP服务器 通常以两种形式之一编码:

    • application/x-www-form-urlencoded编码 用于发出GET个请求和
    • multipart/form-data编码用于制作POST 请求。

    在您的示例中,表单包含method="get" 表示提交表单使用GET的属性 因此application/x-www-form-urlencoded编码 数据

  3. Go标准库中的net/http包可用于 发出HTTP请求。

  4. 完成所有这些工作后,您需要制作一个HTTP GET 使用一组适当的参数请求正确的服务器和URL。

    服务器与获取该HTML页面的服务器相同。 该网址为/enableSsh.cgi

    现在你只需要补充请求即可。

    这是one example 但真正的谷歌搜索golang+get+query+with+parameters会带来 你有无数类似的例子。 查询参数是那些表单字段 - stamptokenframe, 他们的价值观即将提交。

    如果您需要POST表单multipart/form-data 编码,你使用 Go标准库中的mime/multipart包,其中包含 Writer类型可用于构建根据编码的数据流 multipart/form-data规则。