系统相关
首页 > 系统相关> > shell脚本自动部署ssh终极版

shell脚本自动部署ssh终极版

作者:互联网

在前面的ssh部署中写过如何实现自动部署,请参考:https://blog.51cto.com/lehappy/2785809

但有朋友向我反馈,单位的每台服务器信息都不一样,shell脚本不能用有其它办法不?

为解决他的问题就针对每台服务器IP、端口、用户名、密码都不相同,用shell脚本写个

自动部署ssh终极版,其实核心命令是awk。


1 服务器信息分析

做运维的朋友都会记录自己维护所有服务器的信息,一般信息内容包含:

服务器名称、服务器IP、端口、用户名、密码、用于什么业务、使用单位、联系方式、硬件基本信息等,

里面需要的信息为服务器IP、端口、用户名、密码,把它整理到txt文件(最好使用Notepad++),不要使用

windows自带的记事本(需要使用dos2unix进行转换),不然脚本执行会有问题。

txt整理格式为:

      ip                   port      user         password

192.168.40.23       22        root            123

192.168.40.59      2241     admin       admin@123

192.168.40.70      25417   ynyld        yn_7788

192.168.40.101    56600   kmzq         jjyy#110

说明格式信息中 ip port user password 最少有一个空格间隔

把整理好的文件放置到服务端(就是需要把公钥分发的服务器,不要错了)


在例子中我就直接把整理好的数据复制到服务器文件里面,文件名称为ssh_info.txt

[root@web01 /scripts]#cat ssh_info.txt 

192.168.40.23    22     root        123

192.168.40.59    2241   admin       admin@123

192.168.40.70    25417  ynyld       yn_7788

192.168.40.101   56600  kmzq        jjyy#110


2 编写shell脚本

vim /scripts/ssh_key_auto.sh

#!/bin/bash

while read line;do

# 分发客户端IP

ip=$(echo $line|awk '{print $1}')

# 分发客户端端口

port=$(echo $line|awk '{print $2}')

# 分发客户端用户名

user=$(echo $line|awk '{print $3}')

# 分发客户端用户密码

password=$(echo $line|awk '{print $4}')

/usr/bin/sshpass -p${password} ssh-copy-id -i /root/.ssh/id_dsa.pub ${user}@$ip -p$port "-o StrictHostKeyChecking=no" &>/dev/null

if [ $? -eq 0 ];then

echo "$network$ip -> ok"

else

echo "$network$ip -> fail"

fi

# /scripts/ssh_info.txt 整理好的数据存放路径

done


# 测试

[root@web01 /scripts]#sh ssh_key_auto.sh 

192.168.40.23 -> ok

192.168.40.59 -> fail

192.168.40.70 -> fail

192.168.40.101 -> fail


3 总结

A.执行脚本时必须安装sshpass程序,不然无法成功。安装命令 yum -y install sshpass

B.上面的测试只有 192.168.40.23 -> ok 成功,其他都没有成功原因为:

  服务器ip、端口、用户名、密码其中一个不对,脚本执行就不会成功,整理数据信息前,每台服务器测试下保证数据正确。

  执行脚本时保证相关设备正常,如网线、交换机、执行的服务器是开机状态不、停电了没有等。

  系统防火墙设置、SELinux设置等。 系统优化,请参考:https://blog.51cto.com/lehappy/2781516

C.整理好的数据文件一定要保管好 保管好 保管好重要的事情说三遍,不要脚本执行完成后就不管了,被其他人拿到后果自己应该知道是什么。


标签:终极版,脚本,shell,ip,echo,ssh,服务器,txt
来源: https://blog.51cto.com/lehappy/2802775