引言
最近在搭建 Kubernetes 1.14 版本,过程中涉及各种组件的安装配置,所以打算通过脚本自动化的部署配置这些组件,本文主要描述在 CentOS 7上通过脚本自动化配置服务器间的免密登录,本来是打算前几天写完的,但是没有时间,所以今天才完成。
自动化脚本导航
环境搭建-CentOS 7上通过脚本自动化部署JDK 8
环境搭建-CentOS 7上通过Shell脚本自动化修改机器名并配置静态IP
环境搭建-CentOS 7上通过Shell脚本自动化配置免密登录
环境搭建-CentOS 7上通过Shell脚本自动化安装Harbor
自动化脚本
配置免密登录的过程在这里就不在列出了,具体可参看笔者的这篇文章-环境搭建-CentOS服务器之间设置免密码登录,自动化脚本分两部分,第一部分是生成公钥,因为有交互操作,这里使用 expect 脚本实现:
#!/usr/bin/expect
spawn ssh-keygen -t rsa
expect "Enter file in which to save the key (/root/.ssh/id_rsa):"
send "\r"
expect "Enter passphrase (empty for no passphrase):"
send "\r"
expect "Enter same passphrase again:"
send "\r"
expect eof
调用上面 expect 脚本的 Shell 脚本,这个脚本需要在所有机器上运行:
sed -i "s/#PubkeyAuthentication yes/PubkeyAuthentication yes/g" /etc/ssh/sshd_config
service sshd restart
# expect 脚本的全路径,一定要全路径
/home/shell_scripts/generate_keygen.exp
以上脚本运行完毕之后,就可以将免密登录的公钥拷贝到对应的机器上,这里也会涉及输入密码的交互操作,也需要使用 expect 脚本:
#!/usr/bin/expect
set usr [lindex $argv 0]
set node [lindex $argv 1]
puts "===========当前用户:${usr} 当前节点:${node}============="
spawn scp /$usr/.ssh/id_rsa.pub $usr@$node:/$usr/.ssh/node1.pub
expect "(yes/no)?"
send "yes\r"
expect "password:"
#密码需要填写正确
send "xxxx\r"
expect eof
spawn ssh -Tq $usr@$node "cat /$usr/.ssh/node1.pub >> /$usr/.ssh/authorized_keys"
expect "password:"
send "xxxx\r"
expect eof
调用以上 expect 脚本的 Shell 脚本如下:
#主机名包括 worker 的主机名并且打印出第二个域名的文字信息
hosts=($(cat /etc/hosts | grep worker | awk '{print $2}'))
for curnode in ${hosts[@]}
do
/home/shell_scripts/scp_public_key.exp "$(whoami)" "$curnode"
done
以上就是自动化免密登录的 Shell 脚本。