非root用户sudo_ssh免密钥
目标:从服务器上ssh登陆后sudo免密钥执行相应的命令 环境介绍: 192.168.65.128 my1-222 192.168.65.129 my2-223 192.168.65.130 web224 # 步骤一: # 每个节点执行(不是必须,但是建议这样做) cat >>/etc/hosts <<EOF 192.168.65.128 my1-222 192.168.65.129 my2-223 192.168.65.130 web224 EOF # 场景介绍 # 现在有个删除缓存的操作。需要在192.168.65.128上执行,192.168.65.129和192.168.65.130的相应缓存文件也都一起被删除掉了 # 准备工作 # 每台机器上都创建一个账号 useradd gtuser echo "gtuserpwd" | passwd --stdin gtuser cat >>/etc/sudoers << EOF gtuser ALL=NOPASSWD:/bin/rm -f /tmp/global_cache.log EOF # 建立ssh免密钥互信 # 因为是从一台集中去执行,所以是单向免密钥 su - gtuser # 每个节点都执行 ssh-keygen -t rsa # 一路回车 # 将公钥添加到认证文件中 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys # 并设置authorized_keys的访问权限 chmod 600 ~/.ssh/authorized_keys # 只要在一个节点执行即可。这里在 192.168.65.128上执行 ssh 192.168.65.129 cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys ssh 192.168.65.130 cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys # 分发整合后的文件到其它节点 scp ~/.ssh/authorized_keys 192.168.65.129:~/.ssh/ scp ~/.ssh/authorized_keys 192.168.65.130:~/.ssh/ # 测试时,第一次,需要输入密码,之后就不需要输入密码了。 # 在192.168.65.128上测试 ssh 192.168.65.129 ssh 192.168.65.130 # 在192.168.65.129上测试 ssh 192.168.65.129 ssh 192.168.65.130 # 在192.168.65.130上测试 ssh 192.168.65.128 ssh 192.168.65.129 # 删除,重新操作 # rm -fr /home/gtuser/.ssh/ # 编写脚本测试 cat >>/root/delete_cache.log <<EOF #ssh -p 22 -t gtuser@192.168.65.128 "sudo /bin/rm -f /tmp/global_cache.log; echo "/tmp/global_cache.log has been deleted"; echo `date`" ssh -p 22 -t gtuser@192.168.65.128 "sudo /bin/rm -f /tmp/global_cache.log" ssh -p 22 -t gtuser@192.168.65.129 "sudo /bin/rm -f /tmp/global_cache.log" ssh -p 22 -t gtuser@192.168.65.130 "sudo /bin/rm -f /tmp/global_cache.log" EOF # 如果是root用户,类似的操作 scp ~/.ssh/authorized_keys gtuser@192.168.65.129:/home/gtuser/.ssh/ scp ~/.ssh/authorized_keys gtuser@192.168.65.130:/home/gtuser/.ssh/ sh /root/delete_cache.log # 执行结果如下: [root@my1-222 ~]# sh /root/delete_cache.log Connection to 192.168.65.128 closed. Connection to 192.168.65.129 closed. Connection to 192.168.65.130 closed. [root@my1-222 ~]#