批量上传SSH公钥

批量上传SSH公钥 

                                                一世浮沉

首先需要安装python


yum install python -y


编写一个python脚本 如下:


#vi ssh.py


#!/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)   ##如果公钥不是在默认位置的话 ,把ssh-copy-id改为 ssh-copy-id -i 公钥位置 即可。

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 ssh.py 192.168.2.10 password1 #用户名和密码没错一般都可以。)


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

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

192.168.1.1 password1

192.168.1.2 password2

192.168.1.3 password3


之后再用shell脚本调用  如下


[root@cacti01 opt]# vi ssh.sh 

cat a.txt |while read line; do


ip=`echo $line | awk '{print $1}'`

passwd=`echo $line | awk '{print $2}'`

python ssh.py $ip $passwd

done


最后执行./ssh.sh  

如果有报错

 

是因为没有安装python的pexpect模块 安装如下:

pexpect  module 安装

 


  pexpect属于第三方的,所以需要安装,


      目前的版本是 3.3 下载地址 https://pypi.python.org/pypi/pexpect/


  安装步骤:  


    


tar -xzvf  pexpect-3.3.tar.gz 

cd pexpect-3.3 

python setup install (require root)

但是 这个安装需要root权限,如果没有root权限在,还能使用吗?


  答案是肯定的,你只需要把lib的路径放入sys.path。这样便可以使用pexpect


#!/usr/bin/env python

import sys

sys.path.append('pexpect-3.3/build/lib')

 

  确认安装成功:


    


>>> import pexpect

>>> dir(pexpect)

['EOF', 'ExceptionPexpect', 'PY3', 'TIMEOUT', '__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', '__revision__', '__version__', '_run', 'codecs', 'errno', 'fcntl', 'is_executable_file', 'os', 'pty', 're', 'resource', 'run', 'runu', 'searcher_re', 'searcher_string', 'select', 'signal', 'spawn', 'spawnu', 'split_command_line', 'stat', 'struct', 'sys', 'termios', 'time', 'traceback', 'tty', 'types', 'which']


如上所述,需要注意:

    a.txt的格式,第一个参数是ip,第二个是密码。中间用空格隔开,一般使用这个上批量上传公钥到服务器是没问题的。

    如果公钥没在默认位置的话,python脚本里面的这个语句p = pexpect.spawn('ssh-copy-id %s' % ip),把ssh-copy-id改为 ssh-copy-id -i 公钥位置 即可。

   另外,上面的程序在运行之前都要先生成个公钥和密码ssh-keygen -t rsa(两次回车即可)


你可能感兴趣的:(python)