linux 如何快速给500 台机器 执行同一条命令
要实现批量部署,前提是标准化,和自动化
1.自动化可以完成大量重复性工作
2.标准化是部署对象必须有一定的标准
比如:账号user1密码是usr1,user2密码是usr2.。。
如题:
假设那500台机子IP为 192.168.1.1-250,192.168.2.1-250
第一种情况(简单):
管理节点已经ssh公钥传所有主机
[root@master ~]# ssh-keygenGenerating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
/root/.ssh/id_rsa already exists.
Overwrite (y/n)?
[root@master ~]# ssh-copy-id /root/.ssh/id_rsa.pub 192.168.1.1我们只要执行两个循环就能完成需求
for i in {1..250}; do ssh 192.168.1.$i \"echo 1 /etc/a.txt \";done
for i in {1..250}; do ssh 192.168.2.$i \"echo 1 /etc/a.txt \";done
第二种情况只能用密码登陆
要求是IP,密码必须满足标准化
我这边只有一个ssh捕捉信号的脚本(完成非交互式输入密码),虽然没有针对需求,但楼主可以参考下。结合第一种方法完成需求。
vim /ssh.sh
#!/usr/bin/expect
# 设置超时时间为 60 秒
set timeout 60
# 设置要登录的主机 IP 地址
set host 192.168.0.4
# 设置以什么名字的用户登录
set name root
# 设置用户名的登录密码
set password 123456
#spawn 一个 ssh 登录进程
spawn ssh $host -l $name
# 等待响应,第一次登录往往会提示是否永久保存 RSA 到本机的 know hosts 列表中;等到回答后,在提示输出密码;之后就直接提示输入密码
expect {
\"(yes/no)?\" {
send \"yes\\n\"
expect \"assword:\"
send \"$pasword\\n\"
}
\"assword:\" {
send \"$password\\n\"
}
}
expect \"#\"
# 下面测试是否登录到 $host
send \"uname\\n\"
expect \"Linux\"
send_user \"Now you can do some operation on this terminal\\n\"
# 这里使用了 interact 命令,使执行完程序后,用户可以在 $host 终端进行交互操作。
Interact
linux一个脚本可以实现让多个linux服务器执行相同的命令吗?
可以,先把命令做成一个目标命令脚本,做一个批量脚本,把目标命令脚本传输到各个服务器上分别执行
如何批量同时控制5台linux主机
1、在本机安装SSH工具,(SSH工具有很多比如xShell、FianlShell)
2、在Linux中配置ssh服务,
3、本机打开SSH工具配置Linux的ip地址及端口号即可同时连接多台Linux主机进行操作。
望采纳。
Linux多台主机批量执行命令
指定一台主机作为信任主机,这样从这台主机登录其他机器就不需要密码了。
设置信任主机:
假设有四台机器:192.168.2.1~192.168.2.4,其中192.168.2.1为信任机,那么在192.168.2.1上运行如下命令:
$.sh-keygen -t rsa //此处一路回车,生成秘钥
$scp .ssh/id_rsa.pub 192.168.2.2:~/ //把秘钥拷贝到其他远程机器
$ssh 192.168.2.2 ‘cat id_rsa.pub .ssh/authorized_keys’ //(远程执行命令)在远程机器上生成认证文件
经过这几步,从192.168.2.1 ssh登陆192.168.2.2时,就不会再需要输入密码了。同样的步骤再执行3、4的极其。
文本文件hostlist可以如下
192.168.2.2
192.168.2.3
192.168.2.4
#!/bin/shdoCommand(){
hosts=`sed -n\'/^[^#]/p\'hostlist`
for host in $hosts
do
echo \"\"
echo HOST$host
ssh $host \"$@\"
done
return 0
}
if [ $# -lt 1 ]
then
echo \"$0cmd\" exit
fi
do Command \"$@\"
echo \"return from doCommand\"
执行命令(记得先对doCommand.s
h增加执行权限 chmod u+x doCommand.sh)
./doCommand.sh “ls -al /root/”
这样该脚本就会在每台机器上执行”ls -al /root/”这个命令,并返回结果在信任主机上。