ansible批量分發免密鑰登陸python腳本


 

最近看了看強大的號稱自動化運維的三大利器之一的——ansible,ok,親測之后,確實感覺,對於我們這種DBA工作者來說,確實很受益。

值得注意的是ansible要求被管理服務器python版本不低於2.6。

 

OK,簡單了寫了個腳本,實現服務器端面密鑰登陸被管理服務器python腳本,這里省略了ansible,python等的部署以及使用。

 

環境:

python 2.7

ansible 2.4.0

pexpect  (pip installpexpect)

 

 

以下是批量分發密鑰登陸腳本內容:

#!/usr/bin/python27
""" Made by Joe.Wan Email:1272149624@QQ.com""" import sys import pexpect ip
= ['10.1.1.10','10.1.1.13'] #這是ip列表,視情況修改 for x in ip: password='asss' #密碼需要視情況修改 expect_list = ['(yes/no)','password:'] p = pexpect.spawn('ssh-copy-id %s' % x) 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>'

 

執行結果:

 

ok,將上面腳本修改下,弄成單個分發腳本:addhost.py

#!/usr/bin/python

import sys 
import pexpect

ip = sys.argv[1]

password = 'password'
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>'

  使用方法:python27 addhost.py 10.1.1.1

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM