首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何ssh到远程主机并运行多个命令

如何ssh到远程主机并运行多个命令
EN

Stack Overflow用户
提问于 2018-07-26 02:15:03
回答 1查看 2.7K关注 0票数 -1

我有一个读取文本文件的脚本,该文件中列出了所有节点:

代码语言:javascript
复制
node1
node2
node3
.
.
.

这是我的脚本的一部分:

代码语言:javascript
复制
#!/bin/bash

while read f; do
   ssh-copy-id myusername@"$f" "yum install -y epel-release; wget --no-check-certificate https://packages.icinga.org/epel/7/release/noarch/icinga-rpm-release-7-1.el7.centos.noarch.rpm;yum install https://packages.icinga.org/epel/7/release/noarch/icinga-rpm-release-7-1.el7.centos.noarch.rpm; yum install -y icinga2; yum install -y nagios-plugins-all; chown -R icinga:icinga /etc/icinga2 && chown -R icinga:icinga /var/lib/icinga2 && chown -R icinga:icinga /var/log/icinga2"       
done < linux-list.txt

1)我希望脚本登录到每个节点并运行一系列命令来安装Icinga -我尝试在一行中加载所有这些命令。

2)我希望脚本登录到Icinga主服务器并运行命令:

代码语言:javascript
复制
ssh username@icingamaster

icinga2 pki ticket --cn '$f'

3)然后将生成的代码发送到主机名($f)

4)我希望用我自己的zones.conf替换现有的/etc/icinga2/zones.conf文件

你能帮我吗,我不确定如何自动化的日志到每个服务器和运行命令应该是自动化的。

谢谢

EN

回答 1

Stack Overflow用户

发布于 2018-07-26 15:23:59

在我们深入研究细节之前,也许你应该看看像CFengine或Ansible这样的舰队管理工具。

ssh-copy-id不允许您指定要运行的命令。无论如何,根据定义,它是交互式的。我只需在每台主机上分别安装SSH密钥,然后在单独的批处理中以非交互方式通过无密码SSH运行任何自动化脚本。

关键安装只是您当前的脚本减去错误的长命令:

代码语言:javascript
复制
while read f; do
   ssh-copy-id myusername@"$f"
done < linux-list.txt

这样,您就可以在每个主机上运行任意复杂的脚本。

代码语言:javascript
复制
while read f; do
   ssh myusername@"$f" '
        yum install -y epel-release
        wget --no-check-certificate https://packages.icinga.org/epel/7/release/noarch/icinga-rpm-release-7-1.el7.centos.noarch.rpm
        yum install icinga-rpm-release-7-1.el7.centos.noarch.rpm
        yum install -y icinga2  nagios-plugins-all
        chown -R icinga:icinga /etc/icinga2  /var/lib/icinga2 /var/log/icinga2' </dev/null
    ssh username@icingamaster icinga2 pki ticket --cn "$f" |
    ssh myusername@"$f" 'cat >/tmp/pkicode'
     scp ./zones.conf myusername@"$f":/etc/icinga2/zones.conf
done < linux-list.txt

你会注意到我是如何用单引号将第一个命令分成多行的(这些命令不能轻易地包含单引号),并且不得不猜测你在后面的命令中到底指的是什么-显然是用你真正想要的东西来替换占位符代码。还要注意有多少命令接受多个参数;因此您可以使用一个命令执行yum installchown等多项操作。

我对百胜不是很熟悉,但是用wget下载一个包,然后在同一个网址上单独运行yum看起来肯定是错误的。(也许安装下载的软件包的命令应该是rpm而不是yum?至少在Debian上,这是apt-getdpkg之间的分工。)

这看起来myusername基本上具有根访问权限-如果不是这样,则可能在尝试运行此命令之前立即安装sudo并将myusername作为根添加到sudoers文件中;显然,在每个特权命令之前添加sudo

再说一次,这些轮子你并不是真的想重新发明。首先要做的就是安装CFengine或Ansible,这会让剩下的事情变得更简单,尽管显然也有一些细微的不同。

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

https://stackoverflow.com/questions/51525313

复制
相关文章

相似问题

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