我有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条命令
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脚本中做到这一点?
发布于 2019-03-08 17:24:16
做这种事有几种方法。
如果这是您可能要做的事情,您可能需要查看可抗或其他类似的自动化工具。
如果这是一次性的,那么最简单的方法可能是将这些命令复制到脚本中,将脚本scp到远程计算机,然后使用ssh远程执行它们:
$ for host in cs-{2..4}; do scp my-script.sh myuser@"$host":; ssh -t $host "sudo ./my-script.sh"; done另外,如果您对sed命令有信心,而不是手动写入临时文件并将新的文件复制到位,则可以执行以下操作:
sed --in-place 's/aes128-ctr/aes129-ctr/;s/aes130-ctr/aes131-ctr/;s/aes132-ctr/aes133-ctr/' /etc/ssh/sshd_config因为这是一个命令,所以您可以简单地针对每个主机:
$ 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"发布于 2019-03-08 20:09:15
如果您必须在某些服务器集上运行相同的命令(通常是),我建议查看来自同一个套餐的C1工具和相关工具。
我在我的笔记本电脑上所做的事情,从那里我需要控制~50个远程主机(在ssh已经设置了使用密钥身份验证):
~/.dev-hosts.list这样的主机名列表。这只会有你的主机名列表开发-主机1开发主机2.
date:pssh -h ~/.dev-hosts.list -l developer -i date
alias run.on.dev='pssh -h ~/.dev-hosts.list -l username'。之后,要在这些机器上运行date并获得输出,只需敲几下键即可:run.on.dev -i date
显然,您可以以这种方式执行任何命令,包括您的sed案例。
请注意,-l允许您为这些主机指定用户名到ssh,而-i允许您查看命令生成的输出。
https://unix.stackexchange.com/questions/505159
复制相似问题