linux 如何快速给500 台机器 执行同一条命令
3个回答
展开全部
要实现批量部署,前提是标准化,和自动化
1.自动化可以完成大量重复性工作
2.标准化是部署对象必须有一定的标准
比如:账号user1密码是usr1,user2密码是usr2.。。
如题:
假设那500台机子IP为 192.168.1.1-250,192.168.2.1-250
第一种情况(简单):
管理节点已经ssh公钥传所有主机
[root@master ~]# ssh-keygen
Generating 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
1.自动化可以完成大量重复性工作
2.标准化是部署对象必须有一定的标准
比如:账号user1密码是usr1,user2密码是usr2.。。
如题:
假设那500台机子IP为 192.168.1.1-250,192.168.2.1-250
第一种情况(简单):
管理节点已经ssh公钥传所有主机
[root@master ~]# ssh-keygen
Generating 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
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询