python之paramiko模块安装使用
今天在centos6.5 上安装使用paramiko库。记录遇到的问题和流程。
部分概念
1 paramiko是一个python第三方库,使用python来实现了SSH,使用条件2.6+/3.3+.官方站点是https://www.lag.net/ 应该是这个社区的人在维护。源代码被托管至`github`. 2 3 PYPI是python官方维护的的第三方库,个人可以上传并使用。官方推荐使用`pip`来安装管理第三方库。 4 5 python 2.7.9 和3.4以后的版本已经内置pip程序,所以不需要安装。从Python内部来说,pip 是一个安装和管理 Python 包的工具 , 是 easy_install 的一个替换品。distribute是setuptools的取代(Setuptools包后期不再维护了)。pip的安装前需要setuptools 或者 distribute,如果你使用的是Python3.x那么就只能使用distribute因为Python3.x不支持setuptools。 6 7 paramiko的安装需要依赖于`PyCrypto` 这个库中有许多的加密算法。`PyCryto`的站点是 https://www.dlitz.net/ 源码包也在这里。到现在稳定版2.6,实验版2.7 8 9 readline-devel(解决centos下Python2.7交互模式中方向键、退格键乱码问题)
安装步骤
1、安装依赖环境
yum -y install zlib-devel readline-devel libffi-devel python-devel openssl-devel gcc git
2、安装setuptools-19.6
wget --no-check-certificate https://pypi.python.org/packages/source/s/setuptools/setuptools-19.6.tar.gz#md5=c607dd118eae682c44ed146367a17e26
tar -xf setuptools-19.6.tar.gz
cd setuptools-19.6
python3 setup.py build
python3 setup.py install
3、pycrypto(paramiko 模块内部依赖pycrypto,所以先下载安装pycrypto)
wget http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/pycrypto-2.6.tar.gz
tar -xvf pycrypto-2.6.1.tar.gz
cd pycrypto-2.6.1
python setup.py build
python setup.py install
4、安装paramiko
下载:http://pan.baidu.com/s/1dFKYNq5 密码:y2ml
tar -xf paramiko-1.14.0.tar.gz
cd paramiko-1.14.0
python3 setup.py build
python3 setup.py install
centos7 Python3 可以直接pip3 install paramiko (没试)
5、验证(进入python环境,导入paramiko检查是否安装成功)
[root@localhost paramiko-1.14.0]# python3
Python 3.6.0a1 (default, Jul 13 2018, 16:13:45)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-23)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import paramiko
使用:
Paramiko是用python语言写的一个模块,远程连接到Linux服务器,查看上面的日志状态,批量配置远程服务器,文件上传,文件下载等
初始化一些参数:
1 1 host = "120.24.239.214" 2 2 port = 22 3 3 timeout = 30 4 4 user = "root" 5 5 password = "******"
Paramiko远程执行linux命令:
1 # -*- coding:utf-8 -*- 2 import paramiko 3 4 def sftp_exec_command(command): 5 try: 6 ssh_client = paramiko.SSHClient() 7 ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 8 ssh_client.connect(host, 22, user, password) 9 std_in, std_out, std_err = ssh_client.exec_command(command) 10 for line in std_out: 11 print line.strip("\n") 12 ssh_client.close() 13 except Exception, e: 14 print e 15 16 if __name__ == '__main__': 17 sftp_exec_command("ls -l")
- Paramiko上传文件:
# -*- coding:utf-8 -*- import paramiko def sftp_upload_file(server_path, local_path): try: t = paramiko.Transport((host, 22)) t.connect(username=user, password=password) sftp = paramiko.SFTPClient.from_transport(t) sftp.put(local_path, server_path) t.close() except Exception, e: print e if __name__ == '__main__': sftp_upload_file("/root/bug.txt", "D:/bug.txt")
Paramiko下载文件:
1 # -*- coding:utf-8 -*- 2 import paramiko 3 4 def sftp_down_file(server_path, local_path): 5 try: 6 t = paramiko.Transport((host, 22)) 7 t.connect(username=user, password=password) 8 sftp = paramiko.SFTPClient.from_transport(t) 9 sftp.get(server_path, local_path) 10 t.close() 11 except Exception, e: 12 print e 13 14 if __name__ == '__main__': 15 sftp_down_file("/root/test.txt", "D:/text.txt")