红联Linux门户
Linux帮助

批量上传公钥到centos服务器

发布时间:2016-01-28 16:18:29来源:linux网站作者:鸿弟

一直以来,都通过ssh-copy-id在手动上传公钥,想着如果有上千台服务器需要上传公钥的话,这个方法就行了。试着实现下批量上传公钥到服务器,介绍本人试的一个方法。


先通过python脚本来试一台机器,python脚本如下:

#!/usr/bin/python

import sys
import pexpect

ip = sys.argv[1]
password = sys.argv[2]
expect_list = ['(yes/no)', 'password:']

p = pexpect.spawn('ssh-copy-id %s' % ip)
try:
while True:
idx = p.expect(expect_list)
print p.before + expect_list[idx],
if idx == 0:
print "yes"
p.sendline('yes')
elif idx == 1:
print password
p.sendline(password)
except pexpect.TIMEOUT:
print >>sys.stderr, 'timeout'
except pexpect.EOF:
print p.before
print >>sys.stderr, '<the end>'

使用方法:python sendpublic.py 192.168.2.10 password


上面的python结合shell实现批量上传

把服务器的ip和密码列在一个txt文件中,例如(b.txt):

192.168.1.1 password1

192.168.1.2 password2

192.168.1.3 password3

下面是一个shell程序:

cat a.txt |while read line;do
ip=`echo $line | awk '{print $1}' #提取ip
password=`echo $line | awk '{print $2}'` #提取password
python sendpublic.py $ip $password
done

如上所述,需要注意:

a.txt的格式,第一个参数是ip,第二个是密码。中间用空格隔开,一般使用这个上批量上传公钥到服务器是没问题的。
如果公钥没在默认位置的话,python脚本里面的这个语句p = pexpect.spawn('ssh-copy-id %s' % ip),把ssh-copy-id改为 ssh-copy-id -i 公钥位置 即可。


本文永久更新地址:http://www.linuxdiyf.com/linux/17758.html