免交互方式批量分发公钥脚本
2018-01-31 16:55
399 查看
作者:Georgekai归档:学习笔记2018/1/30 |
1.1 SSH
1.1.1 部署好基于ssh秘钥的方式进行管理
1. 创建秘钥对ssh-keygen -t rsa
2. 分发公钥
ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.41
1.1.2 实现批量部署ssh+key环境时遇到的问题
1. 创建秘钥对时需要进行交互,输入回车1)需要确认私钥保存路径
解决:ssh-keygen -t rsa -f /root/.ssh/id_rsa
-f filename #指定私钥文件保存的路径
2)需要确认私钥密码信息
解决:ssh-keygen -t rsa -f /root/.ssh.id_rsa -P "" #指定密码为空
-N new_passphrase #指定一个新的密码
-P passphrase #指定一个旧的密码
2. 分发公钥时,需要输入yes和密码信息
1)需要输入yes信息
解决:ssh-copy-id -i /root/.ssh/id_rsa.pub "root@172.16.1.41 -o StrictHostKeyChecking=no"
-o StrictHostKeyChecking=no #忽略回复yes的交互(避免第一次交互出现 公钥检查)
PS:1. 因ssh-coopy-id脚本中的配置(shift),所以root@172.16.1.41变为第一个参数$1
2. 这里还需要解参数,需要用引号引起来,使引号内的所有内容成为一个整体(参数)
2)需要密码信息
解决:sshpass -p123456 ssh-copy-id -i /root/.ssh/id_rsa.pub "root@172.16.1.41 -o StrictHostKeyChecking=no"
sshpass -p123456 #指定密码为123456,忽略交互
分析:查看ssh-copy-id这个命令的配置文件(可分析出以下结果)
▲为什么发布过去的公钥信息是600的权限:umask 077
▲$1 :命令行后面的第一个参数(如sh kai.sh hostname,hostname就是第一个参数),
但是在ssh-coyp-id命令中,因这个命令脚本中出现了2次shift,所以第三个参数才 是第一个。
▲shift:一个shift可以理解为忽略在命令行中的第一个参数(2个就是忽略第1个和第2个)
vim /usr/bin/ssh-copy-id
ssh $1 "exec sh -c 'cd; umask 077; test -d .ssh || mkdir .ssh ;
cat >> .ssh/authorized_keys &&
(test -x /sbin/restorecon && /sbin/restorecon .ssh .ssh/authorized_keys >/dev/null 2>&1 || true)'"
以下是上面脚本其中一段命令的解释:
1)exec sh -c --- 在脚本中临时设置环境变量信息
2)cd --- 切换到当前用户家目录
3)umask 077 --- 设置临时的umask值
4)test -d .ssh || mkdir .ssh --- 判断当前用户家目录是否存在.ssh目录,如果不存在就进行 创建
5)cat >> .ssh/authorized_keys && ...省略...
--- 远程登录到相应主机上, 将公钥信息保存到远程主机相应用户家目录中 的.ssh/authorized_keys,并将authorized_keys权限设置为600(6 6 6-0 7 7=6 -1 -1, 文件结果有奇数位,所以奇数位+1)
2) 如果对方端口改为52113,不在是22
sshpass -p123456 ssh-copy-id -i /root/.ssh/id_rsa.pub "172.16.1.7 -p52113"
-p52113 #指定对端端口号为52113
脚本中shift的作用:
脚本内容:
#!/bin/bash
until [ $# -eq 0 ]
do
echo $*
shift
done
PS:1.$* #把所有参数都显示出来
2.$# #统计参数的数量
执行结果:
[root@m01 scripts]# sh shift_test.sh 1 2 3 4 5 6
1 2 3 4 5 6
2 3 4 5 6
3 4 5 6
4 5 6
5 6
6
1.1.3 编写免交互的方式 批量分发公钥脚本
#!/bin/bash#避免.ssh下已有公钥信息,下次在创建时,会提示是否覆盖
\rm /root/.ssh/id_rsa* -f
#免交互创建秘钥对
ssh-keygen -t rsa -f /root/.ssh/id_rsa -P "" &>/dev/null #将后面输出的没用的信息,追加到空
#免交互分发公钥
for ip in 7 31 41
do
sshpass -p123456 ssh-coyp-id -i /roo/.ssh/id_rsa.pud "-o StrictHostKeyChecking=no root@172.16.1.$"
done
1.1.4 编写批量管理脚本
vim 777.txt#!/bin/bash
# fenfa
for ip in 7 31 41
do
echo =====================172.16.1.$ip host info==========================
ssh 172.16.1.$ip $1 #$1 表示第一个参数
echo ""
done
#执行脚本时后面不加参数的话,会先连接到172.16.1.7,在连接到31,然后从31在连接到41
执行脚本测试(后面加一个参数)
sh 777.txt "hostname" #批量查看每个主机的主机名sh 777.txt "free -m" #批量查看每个主机的内存信息
sh 777.txt "uptime" #批量查看每个主机的负载信息
sh 777.txt "yum install libselinux-python -y" #批量安装ansible被管理端软件
小伙伴们可以关注我的微信公众号:linux运维菜鸟之旅
![](http://image.135editor.com/files/users/342/3423179/201802/UNTxFr9s_b7qF.jpg)
关注“中国电信天津网厅”公众号,首次绑定可免费领2G流量,为你的学习提供流量!
![](http://image.135editor.com/files/users/342/3423179/201802/kd4HfE4U_EIDs.jpg)
相关文章推荐
- 使用expect无交互的批量分发文件脚本
- Expect--自动批量分发公钥脚本
- 用shell脚本批量分发公钥,实现用…
- [工具] 分布式系统下批量创建用户及分发公钥打通ssh通道的脚本
- 使用shell和expect一键批量分发SSH密钥脚本
- expect脚本同步文件,构建文件分发系统,批量远程执行命令
- 十七周四次课 2018.03.05 expect脚本同步文件、expect脚本指定host和要同步的文件、构建文件分发系统、批量远程执行命令
- oracle 导入数据库脚本后,有些视图或者存储过程没有自动编译的批量解决方式
- 批量添加ssh认证公钥的脚本,有利于大批量管理服务器哦。
- xepect 批量分发执行脚本
- lzx和网页之间脚本交互调试方式
- expect脚本同步文件expect脚本指定host和要同步的文件 构建文件分发系统批量远程执行命令
- expect 批量分发ssh 公钥实现自动部署
- 批量给Linux服务器分发公钥
- expect脚本同步文件、expect脚本指定host和要同步的文件、构建文件分发系统、批量远程执行
- centos shell编程4【分发系统】 服务器标准化 mkpasswd 生成密码的工具 expect讲解 expect传递参数 expect自动同步文件 expect指定host和要同步的文件 expect文件分发系统 expect自动发送密钥脚本 Linux脚本执行方式 第三十八节课
- expect脚本同步文件 expect脚本指定host和要同步的文件 构建文件分发系统 批量远程执行命令
- linux shell脚本批量修改密码,无需交互输入
- linux学习第七十篇:expect脚本同步文件,expect脚本指定host和要同步的文件,构建文件分发系统,批量远程执行命令
- 【学习心得】linux下多客户端批量操作脚本(含expect交互)