【问题标题】:execute code in remote linux machine在远程linux机器上执行代码
【发布时间】:2010-12-22 20:36:24
【问题描述】:

我需要在我的远程 linux 机器上执行 shell 脚本。你知道有什么工具可以帮助我做到这一点吗?

谢谢,

【问题讨论】:

    标签: linux


    【解决方案1】:

    您可以通过 ssh 将命令作为参数传递:

    ssh user@remote.ip.address "~/myscript.sh"
    

    要在没有密码的情况下连接,请使用 ssh 密钥。要使用密钥,您必须在您的机器上生成一对,使用以下命令:

    ssh-keygen
    

    然后取出文件~/.ssh/id_rsa.pub(或id_dsa.pub,如果你在ssh-keygen中使用参数-t dsa)的内容并放入remote_machine的~/.ssh/authorized_keys文件中。 .ssh 目录必须有权限 700。

    【讨论】:

    • 我的脚本我有“sudo ...”,我收到一个错误:sudo: no tty present and no askpass program specified。你知道是什么问题吗?
    • 是的,sudo 正在询问您的密码,但无法向您询问密码。以 root 身份使用命令“visudo”来编辑 sudo 权限并将 NOPASSWD 添加到您的用户配置中,如下所示:youruser ALL=(ALL) NOPASSWD: ALL
    • 大多数 Linux 发行版都包含ssh-copy-id,它将处理ssh-keygen 之后的所有步骤。因此,无需复制公钥或担心文件权限。
    • 感谢有关 visuo 的提示。但在那之后我遇到了另一个问题。在我的脚本中,我执行 ant 并且在我的 ant 构建脚本中,它有 if 语句,并且 ant 似乎没有正确加载库。看起来我登录到我的机器的 shell 非常有限。有没有办法让它像我通常登录到我的机器一样加载?
    • 我不知道,但也许 -t ssh 选项与此有关。 -t 强制 psudo-tty 分配。
    【解决方案2】:

    对于 Python,您可以使用 Paramiko 通过 SSH 在远程计算机上运行命令。

    【讨论】:

      【解决方案3】:

      无需等待远程脚本完成即可终止 ssh 连接的无密码远程执行:

      ssh -i ~/.ssh/id_rsa user@remote nohup sh /path/to/script.sh > /dev/null 2>&1 & 
      

      【讨论】:

        【解决方案4】:
        1. 如果要在远程主机上执行本地脚本

        ssh remotePassword@remoteHost < localScript.sh

        1. 如果您想在远程主机上调用脚本

        ssh remotePassword@remoteHost "remoteScript.sh"

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-11-05
          • 1970-01-01
          • 2015-01-19
          • 1970-01-01
          • 2011-12-18
          相关资源
          最近更新 更多