不得不说paramiko真的很强大,不过官方文档貌似没有中文,反正我是百度了半天没看到,基本全是英文介绍,比较痛苦的是所有文档竟然没有实际例子,今天基本看完了,核心的几个class也学习了,今天试试手写了个查看远程机器内存的脚步,网上大部分都是用用户和密码登录的,实际上做运维的人都知道,实际工作中基本不可太能让你把明文密码写到脚本里,如果有,我只能说你太low了,所以呢,机器的信任是必须的,这个脚本就是基于信任关系的,指定了key,以下是全部脚本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
#!/usr/bin/env python #This program is show remote host meminfo #python version 2.7.9 import argparse import paramiko COMMAND = 'free -m' def show_remote_meminfo(hostnmae, port, user, keyfilename): sh = paramiko.SSHClient() sh.load_system_host_keys() pkey = keyfilename key=paramiko.RSAKey.from_private_key_file(pkey) sh.connect(hostname, port, user, pkey=key, timeout=10) stdin, stdout,stderr = sh.exec_command(COMMAND) result=stdout.read(),stderr.read() if result: for line in result: print line sh.close() if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('--host', action="store", dest="host", default='x.x.x.x') parser.add_argument('--port', action="store", dest="port", default=22, type=int) parser.add_argument('--user', action="store", dest="user", default="root") parser.add_argument('--keyfile', action="store", dest="keyfile", default="/root/.ssh/id_rsa") args = parser.parse_args() hostname, port, user, keyfilename = args.host, args.port, args.user, args.keyfile show_remote_cpuinfo(hostname, port, user, keyfilename) |
以上就是全部代码了,不过这还没有完,如果 你用以上代码运行,多半会出现以下警告:
1 2 |
/usr/lib64/python2.7/dist-packages/Crypto/Util/number.py:57: PowmInsecureWarning: Not using mpz_powm_sec. You should rebuild using libgmp >= 5 to avoid timing attack vulnerability. _warn("Not using mpz_powm_sec. You should rebuild using libgmp >= 5 to avoid timing attack vulnerability.", PowmInsecureWarning) |
运行时出现这么多警告,也挺烦人的,怎么去除呢,看提示是libgmp版本低的问题,直接升级好了,我用的源码包编译的,因为yum找不到包,步骤如下:
1 2 3 4 5 6 7 |
wget https://ftp.gnu.org/gnu/gmp/gmp-6.0.0a.tar.bz2 tar -jxvf gmp-6.0.0a.tar.bz2 cd gmp-6.0.0a.tar.bz2 ./configure make make check make install |
做完再运行,还是有提示,我思考了下,应该是python找的系统的版本,没有用编译的版本,就删除系统版本:
1 2 3 4 |
rpm -qa | grep gmp rpm -e --nodeps gmp-4.3.2-1.11.amzn1.x86_64 rpm -e --nodeps gmp-static-4.3.2-1.11.amzn1.x86_64 rpm -e --nodeps gmp-devel-4.3.2-1.11.amzn1.x86_64 |
再运行就没有警告提示了,你要问了我为什么不先删除老版本,再升级gmp6,实际上我是这么做的,先删除后发现gmp连编译都过不去,缺少.so文件,具体不记得名字了 ,所以我只能反着来了,到这就全部完毕了, 再多说一句,如果你安装的gmp5可能需要安装 m4 ,直接 yum install m4 即可,还有编译需要yum install gcc,好了,感觉很啰嗦了,以上欢迎多批评指正。