首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在多台服务器上运行相同的命令

如何在多台服务器上运行相同的命令
EN

Unix & Linux用户
提问于 2019-03-08 16:02:58
回答 2查看 3.8K关注 0票数 0

我有4台suse服务器作为集群运行。名称CS-1 CS-2 CS-3 CS-4

在CS-2上可以直接从ssh到CS-2 CS-3 CS-4 (ssh CS-2,ssh CS-3,ssh CS-4)直接在CS-2上直接从ssh到CS-1 CS-3 CS-4 (ssh CS-1,ssh CS-3,ssh CS-4)

我需要在这4台服务器上执行3条命令

代码语言:javascript
复制
sed 's/aes128-ctr/aes129-ctr/'  sshd_config.new; mv sshd_config.new sshd_config
sed 's/aes130-ctr/aes131-ctr/'  sshd_config.new; mv sshd_config.new sshd_config
sed 's/aes132-ctr/aes133-ctr/'  sshd_config.new; mv sshd_config.new sshd_config

如何在一个shell脚本中做到这一点?

EN

回答 2

Unix & Linux用户

发布于 2019-03-08 17:24:16

做这种事有几种方法。

如果这是您可能要做的事情,您可能需要查看可抗或其他类似的自动化工具。

如果这是一次性的,那么最简单的方法可能是将这些命令复制到脚本中,将脚本scp到远程计算机,然后使用ssh远程执行它们:

代码语言:javascript
复制
$ for host in cs-{2..4}; do scp my-script.sh myuser@"$host":; ssh -t $host "sudo ./my-script.sh"; done

另外,如果您对sed命令有信心,而不是手动写入临时文件并将新的文件复制到位,则可以执行以下操作:

代码语言:javascript
复制
sed --in-place 's/aes128-ctr/aes129-ctr/;s/aes130-ctr/aes131-ctr/;s/aes132-ctr/aes133-ctr/' /etc/ssh/sshd_config

因为这是一个命令,所以您可以简单地针对每个主机:

代码语言:javascript
复制
$ ssh user@host "sed --in-place 's/aes128-ctr/aes129-ctr/;s/aes130-ctr/aes131-ctr/;s/aes132-ctr/aes133-ctr/' /etc/ssh/sshd_config"
票数 1
EN

Unix & Linux用户

发布于 2019-03-08 20:09:15

如果您必须在某些服务器集上运行相同的命令(通常是),我建议查看来自同一个套餐C1工具和相关工具。

我在我的笔记本电脑上所做的事情,从那里我需要控制~50个远程主机(在ssh已经设置了使用密钥身份验证):

  1. 创建像~/.dev-hosts.list这样的主机名列表。这只会有你的主机名列表

开发-主机1开发主机2.

  1. 使用以下命令对该列表中的每个主机运行date

pssh -h ~/.dev-hosts.list -l developer -i date

  1. 可选:为了方便起见,将其全部包装在别名中:alias run.on.dev='pssh -h ~/.dev-hosts.list -l username'。之后,要在这些机器上运行date并获得输出,只需敲几下键即可:

run.on.dev -i date

显然,您可以以这种方式执行任何命令,包括您的sed案例。

请注意,-l允许您为这些主机指定用户名到ssh,而-i允许您查看命令生成的输出。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/505159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档