linux 集群部署及免密登录

文章目录

  • 思路:
    • 1. 生成服务器IP地址list
    • 2. 创建集群管理账户
    • 3. 免登录这些服务器, 可以使用公钥登录(id_rsa.pub)
    • 4. 配置一个在每台服务器上要安装的文件
    • 5. 总结:

思路:

1. 生成服务器IP地址list

先使用脚本打印出来, 后期有用再改

[root@bi remote]# cat iplist
192.168.100.111

[root@bi remote]# cat foreach.sh
#!/usr/bin/bash
readarray -t ips < iplist

for ip in ${ips[@]}
do
    echo $ip
done
[root@bi remote]#

2. 创建集群管理账户

[root@bi remote]# useradd -m -d /home/admin admin
[root@bi remote]# passwd admin
Changing password for user admin.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
[root@bi remote]# sudo usermod -G sudo admin
[root@bi remote]# usermod --shell /bin/bash admin
usermod: no changes
[root@bi remote]# sudo cp ~/.bashrc /home/admin/
[root@bi remote]# sudo chown admin.admin /home/admin/.bashrc
# 将上述操作改为sh脚本
[root@bi remote]# cat create_admin.sh
#!/usr/bin/bash
sudo useradd -m -d /home/admin admin
sudo passwd admin
sudo usermod -G sudo admin
sudo usermod --shell /bin/bash admin
sudo cp ~/.bashrc /home/admin
sudo chown admin.admin /home/admin/.bashrc
sudo sh -c 'echo "admin ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers'

# 脚本写完了, 当然是要分发其它机器上了, 改一下foreach.sh
[root@bi remote]# cat foreach.sh
#!/usr/bin/bash
readarray -t ips < iplist

for ip in ${ips[@]}
do
    scp ~/home/remote/create_admin.sh root@$ip:~/create_admin.sh
done
[root@bi remote]#

你以为这样就可以了? 我挖个坑儿在这里, 因为若有成百个IP, 要登录该怎么办?
所以我需要安全地且免登录这些服务器,

3. 免登录这些服务器, 可以使用公钥登录(id_rsa.pub)

# 本地创建公私钥对
mkdir -p ~/.ssh  # 在家目录下, 创建个`.ssh`文件
cd ~/.ssh/ # 切换至`.ssh`工作目录
ssh-keygen -t rsa # 生成公私密钥对
# 以下为往一台机器上写入公钥的脚本
[root@bi remote]# cat transfer_key.sh
ip = $1
pubkey=$(cat ~/.ssh/id_res.pub)
echo "execute on ... $ip"

ssh admin@$ip "
mkdir -p ~/.ssh
echo $pubkey >> ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
"
# 再改一下foreach.sh, 分发到每一台机器上
[root@bi remote]# cat foreach.sh
#!/usr/bin/bash
readarray -t ips < iplist

for ip in ${ips[@]}
do
   sh ./transfer_key.sh $ip
done
[root@bi remote]#

4. 配置一个在每台服务器上要安装的文件

比如安装个docker

# 先在本地试验一下, 看能不能安装完成
[root@bi remote]# cat docker_install.sh
yum -y install docker-io
每次都改foreach.sh, 烦死了, 再改一次
[root@bi remote]# cat foreach.sh
#!/usr/bin/bash
readarray -t ips < iplist

script=$1
for ip in ${ips[@]}
do
   ssh $ip 'bash -s ' < $script
done
# 这样我就可以让foreach.sh 带个参数, 参数就是脚本的名称, 那这个脚本在每台服务器上执行了.
[root@bi remote]#

5. 总结:

就是把你配置一台服务器过程中使用的所有关键命令行收集成为sh脚本, 然后分发到每台服务器上去执行.

你可能感兴趣的:(shell,积累,linux,集群部署)