通过 ssh 运行本地脚本

通过 ssh 运行本地脚本

从服务器 A 到服务器 B(以及大约 500 台其他服务器)设置了静默 ssh。
我在服务器 A(shell 和 perl)上编写了一个脚本,我想通过 ssh 在服务器 B(以及另外 500 台服务器)上执行该脚本。这可能吗?我能够使用静默 ssh 运行命令,但不确定如何运行整个脚本。

答案1

如果服务器 A 是基于 Unix/Linux 的系统,则可以使用:

ssh root@MachineB 'bash -s' < local_script.sh

您不必将脚本复制到远程服务器来运行它。

答案2

使用此命令:

ssh user@host <<'my.sh'
#script to run on remote host
my.sh

答案3

由于静默 ssh 已经设置好了,所以我会将文件 scp 到本地执行

IE:

while read line
do
  echo Trying to configure server [IP]: $line >> error.log
  scp my-script.sh $line:/root/scripts/ &>> error.log
  ssh root@$line 'cd /root/scripts && ./my-script.sh' &> error.log
  echo Finished working with [IP]: $line >> error.log
done <client-ips.txt

在客户端站点上运行脚本比使用 < << 运算符解析脚本更不容易出错。

类似于上述脚本的程序应该可以为您完成大部分工作(希望是全部)。此外,它还会跟踪任何出错的内容(&> 转发错误消息),以便您知道需要手动处理哪些 IP 地址。

答案4

#!/bin/bash
# Source : http://backreference.org/2011/08/10/running-local-script-remotely-with-arguments/
# runremote.sh
# usage: runremote.sh localscript interpreter remoteuser remotehost arg1 arg2 ...
# example: runremote.sh MySQL_makeUser.sh bash pi coins.ml database user

realscript=$1
interpreter=$2
user=$3
host=$4
shift 4

declare -a args

count=0
for arg in "$@"; do
  args[count]=$(printf '%q' "$arg")
  count=$((count+1))
done

ssh $user@$host "cat | ${interpreter} /dev/stdin" "${args[@]}" < "$realscript"
# Note: you may need to add options or hardcode keys and such into the above command; example of this commented bellow
# ssh -i <path/to/key> -p <port> $user@$host "cat | ${interpreter} /dev/stdin" "${args[@]}" < "$realscript"

上面是我经过一番搜索后找到的脚本,我对其进行了一些修改,以显示使用示例和使用密钥进行连接的示例,因为 OP 表示它将在许多其他服务器上运行。此脚本还经过编码,以便您可以将参数传递给本地脚本并指定服务器应使用的程序来接收脚本的命令;即,您可以告诉服务器使用 perl 或 python 或 java...然后为其提供相关脚本 :-D 我发现上述脚本的源代码被硬编码到其注释中,因此多年后,通过复制/粘贴仍可找到原始作者 ;-)

祝大家交流愉快。

相关内容