• 14.python笔记之paramiko


    作者:刘耀

    博客:www.liuyao.me

    博客园:www.cnblogs.com/liu-yao

    转载请注明

    一,介绍

    1.使用paramiko可以很好的解决以上问题,比起前面的方法,它仅需要在本地上安装相应的软件(python以及PyCrypto),对远程服务器没有配置要求,对于连接多台服务器,进行复杂的连接操作特别有帮助。

    二,安装

    1. window7(64位):

    	1.pip install --use-wheel --no-index --find-links=https://github.com/
    	sfbahr/PyCrypto-Wheels/raw/master/pycrypto-2.6.1-cp35-none-win_amd64.whl pycrypto
    	2.pip install paramiko
    	3.修改python解释器目录下的Libsite-packagesCryptoRandomOSRNG
    t.py
    	第28行
    	import winrandom 修改成 from Crypto.Random.OSRNG import winrandom 
    	注:参考http://www.cnblogs.com/liwenzhou/p/5246622.html
    

    2.linux(centos):

    	1.yum -y install gcc python-devel
    	2.安装pycrypto
    		pip install pycrypto
    	3.安装paramiko
    		pip install paramiko
    

    三,操作

    1. 基于用户和密码链接执行命令

        import paramiko
    	# 创建SSH对象
    	ssh = paramiko.SSHClient()	
    	# 允许连接不在know_hosts文件中的主机
    	ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    	# 连接服务器	
    	ssh.connect(hostname='115.29.51.8', port=22, username='liuyao', password='123456')
    	# 或
    	#ssh.connect("某IP地址",22,"用户名", "口令")
    	# 执行命令
    	stdin, stdout, stderr = ssh.exec_command('df')
    	# 获取命令结果
    	result = stdout.read()
    	# 关闭连接
    	ssh.close()
    	# 打印结果
    	print(result)
    

    2.封装用户和密码链接执行命令

    	import paramiko
    	transport = paramiko.Transport(('115.29.51.8', 22))
    	transport.connect(username='root', password='123456')
    	ssh = paramiko.SSHClient()
    	ssh._transport = transport
    	stdin, stdout, stderr = ssh.exec_command('df -h')
    	transport.close()
    	print (stdout.read())
    

    3.基于公钥链接执行命令

    import paramiko
    file_key = '/home/auto/.ssh/id_rsa'
    private_key = paramiko.RSAKey.from_private_key_file(file_key)
    # 创建SSH对象
    ssh = paramiko.SSHClient()
    # 允许连接不在know_hosts文件中的主机
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    # 连接服务器
    ssh.connect(hostname='115.29.51.8', port=22, username='root', key=private_key)
    # 执行命令
    stdin, stdout, stderr = ssh.exec_command('df')
    # 获取命令结果
    result = stdout.read()
    # 关闭连接
    ssh.close()
    print(result)
    

    4.封装公钥链接执行命令

    import paramiko
    private_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa')
    transport = paramiko.Transport(('你的主机名', 22))
    transport.connect(username='你的用户名', pkey=private_key)
    ssh = paramiko.SSHClient()
    ssh._transport = transport
    stdin, stdout, stderr = ssh.exec_command('df -h')
    transport.close()
    print (stdout.read())
    

    5.基于用户名密码上传下载

    import paramiko
    _link = paramiko.Transport(('你的主机',22))
    _link.connect(username='你的用户名',password='123')
    sftp = paramiko.SFTPClient.from_transport(_link)
    # 将你目录/本地文件 上传至服务器 目录/文件
    sftp.put('你本地文件', 目标服务器文件')
    # 将目标服务器文件 下载到本地 指定目录
    sftp.get('目标服务器文件', '你本地目录')
    #关闭链接
    _link.close()
    

    6.基于公钥链接上传下载

    import paramiko
    private_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa')
    transport = paramiko.Transport(('hostname', 22))
    transport.connect(username='你的用户名', pkey=private_key )
    sftp = paramiko.SFTPClient.from_transport(transport)
    # 将你目录/本地文件 上传至服务器 目录/文件
    sftp.put('/tmp/location.py', '/tmp/test.py')
    # 将目标服务器文件 下载到本地 指定目录
    sftp.get('remove_path', 'local_path')
    # 关闭链接
    transport.close()
    

    四,案例

    多线程执行批量主机执行命令
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    import threading
    import paramiko
    class Anstack(object):
    	def __init__(self,host,cmd):
    		#host为变量
       		self.host = host
    		self.cmd = cmd
        	self.port = 22
        	self.username = 'root'
        	self.pwd = '123456'
    		self.run()
    	def run(self):
    		#执行方法
        	self.connect()
        	self._cmd()
        	self.close()
    	def connect(self):
    		#链接方法
        	transport = paramiko.Transport((self.host,self.port))
        	transport.connect(username=self.username,password=self.pwd)
        	self.__transport = transport
    	def close(self):
    		#关闭方法
    		self.__transport.close()
    	def _cmd(self):
    		ssh = paramiko.SSHClient()
        	ssh._transport = self.__transport
        	# 执行命令
        	stdin, stdout, stderr = ssh.exec_command(self.cmd)
        	# 获取命令结果
        	result = stdout.read()
    		print(result)
    
    if __name__ == '__main__':
    	args = ['192.168.1.1','192.168.1.2','192.168.1.3','192.168.1.4']
    	cmd = input('您要执行的命令')
    	for i in args:
    		Execcmd = threading.Thread(target=Anstack, args=(i,cmd,))
        	Execcmd.start()
  • 相关阅读:
    枚举、函数关于oracle函数listagg的使用说明by小雨
    执行、Mongodb MapReduce示例1个by小雨
    事务、异常TSQL 编码时应该注意的10个问题by小雨
    源、执行GoldenGate 单向DDL同步by小雨
    Oracle中的所有权限by小雨
    数据库、版本数据库学习从此开始by小雨
    统计、案例深入理解Oracle索引(10):索引列字符类型统计信息的32位限制by小雨
    字段、数据库表三大范式及存储方式by小雨
    数据库、用户第二章Getting Start with the Oracle Server(oracle入门)by小雨
    搜索、关键字截图留念,“万能数据库查询分析器”作为关键字在百度和谷歌上的海量搜索结果by小雨
  • 原文地址:https://www.cnblogs.com/liu-yao/p/5678053.html
Copyright © 2020-2023  润新知