一直以来,都通过ssh-copy-id在手动上传公钥,想着如果有上千台服务器需要上传公钥的话,这个方法就行了。试着实现下批量上传公钥到服务器,介绍本人试的一个方法。
1: 先通过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 #用户名和密码没错一般都可以。
2: 上面的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 公钥位置 即可。
另外,上面的程序在运行之前都要先生成个公钥和密码ssh-keygen -t rsa(两次回车即可)
时间: 2024-12-26 00:44:54