阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

批量上传公钥到Linux服务器

109次阅读
没有评论

共计 1186 个字符,预计需要花费 3 分钟才能阅读完成。

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

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(两次回车即可)

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-05/131265.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计1186字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中