【问题标题】:Auto SSH and execute script自动 SSH 并执行脚本
【发布时间】:2010-04-01 13:51:23
【问题描述】:

我有大约 12 台计算机,每台计算机上都有相同的脚本。此脚本仅 ping 所有其他机器,并打印出该机器是“可访问”还是“不可访问”。但是,使用 ssh 手动登录到每台机器来执行这个脚本是低效的。

假设我登录到节点 1。有什么方法可以让我使用 SSH 自动登录到节点 2-12,执行 ping 脚本,将结果通过管道传输到文件,注销并继续下一台机器?某种 bash shell 脚本?

恐怕我在这里不知所措,因为我以前没有使用过 shell 脚本的经验。

【问题讨论】:

标签: bash scripting shell


【解决方案1】:

由于脚本在其他机器上,你可以让 ssh 在那里为你运行命令:

ssh $hostname my_script >> results_file

当您指定这样的命令时,它会执行而不是登录shell。

我会让你自己弄清楚如何遍历主机名!

【讨论】:

  • 由于OP缺乏shell脚本经验,我会提供一个提示:hosts="host1 host2 host3"; for host in $hosts; do ssh $host ...; done
  • 如果 my_script 运行 sudo 并提示输入密码怎么办?
【解决方案2】:

您需要使用的一个技巧是为每个主机设置预授权密钥。然后你可以在一台主机上运行一个脚本,运行类似'ssh hostname command > log.hostname'

【讨论】:

    【解决方案3】:

    这个脚本可能是您正在寻找的:它允许您通过 ssh 在多台远程机器上执行一个命令(可以是您的脚本)。这是一个带有 bash 源代码的简单脚本,因此您应该能够根据需要对其进行自定义:

    http://www.heinzi.at/projects/upgradebest.sh/

    【讨论】:

      【解决方案4】:

      是的,你可以
      您实际上需要 2 个小脚本,如下所示:
      remote_ssh.sh(第一个参数是机器名称,其余参数是您要使用他自己的参数执行的脚本)
      示例:remote_ssh.sh node5 "echo hello world"

      remote_ssh.sh如下:

      #!/bin/bash
      ALL_ARG=$@
      FST_ARG=$1
      REST_ARG=${ALL_ARG##$FST_ARG}
      echo "在 $FST_ARG 上执行远程命令"
      /usr/bin/ssh $FST_ARG bash execute_ssh_command.sh $FST_ARG pwd $REST_ARG

      execute_ssh_command.sh 如下:

      #!/bin/bash
      ALL_ARG=$@
      FST_ARG=$1
      DIR_ARG=$2
      REM_ARG="$1 $2"
      REST_ARG=${ALL_ARG##$REM_ARG}

      cd $DIR_ARG
      $REST_ARG

      当然,您必须在所有节点的路径中获取这 2 个脚本(可能是 ~/bin/)

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 2012-11-12
        • 2018-08-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-27
        相关资源
        最近更新 更多