Paramiko使用
1、下载安装 pycrypto-2.6.1.tar.gz (apt-get install python-dev)
解压,进入,python setup.py build【编译】,python setup.py install 【安装】 ----》import Crypto
2、下载安装 paramiko-1.10.1.tar.gz
解压,进入,python setup.py build【编译】,python setup.py install 【安装】---》 import paramiko
1、连接远程服务器,并执行操作
用户名和密码连接1
- import paramiko
- ssh = paramiko.SSHClient()
- ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
- ssh.connect('10.10.50.30', 22, 'root', '123456')
- stdin, stdout, stderr = ssh.exec_command('ifconfig')
- print stdout.read()
- ssh.close();
- 用户名和密码连接2 (SSHClient 封装 Transport)推荐
- transport = paramiko.Transport(('10.10.50.30', 22))
- transport.connect(username='root', password='jichuang')
- ssh = paramiko.SSHClient()
- ssh._transport = transport
- stdin, stdout, stderr = ssh.exec_command('ifconfig')
- print stdout.read()
- transport.close()
公钥私钥链接
ssh-keygen -t rsa
ssh-copy-id -i .ssh/id_rsa.pub "-p 22 root@10.10.50.30"
- import paramiko
- private_key_path = '/root/.ssh/id_rsa' #本机私钥存放位置
- key = paramiko.RSAKey.from_private_key_file(private_key_path)
- ssh = paramiko.SSHClient()
- ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
- ssh.connect('10.10.50.31 ', 22, 'root' ,pkey=key)
- stdin, stdout, stderr = ssh.exec_command('df')
- print stdout.read()
- ssh.close();
公钥私钥链接2 (SSHClient 封装 Transport)推荐
- import paramiko
- private_key = paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa')
- transport = paramiko.Transport(('10.10.50.30', 22))
- transport.connect(username='root', pkey=private_key)
- ssh = paramiko.SSHClient()
- ssh._transport = transport
- stdin, stdout, stderr = ssh.exec_command('df')
- transport.close()
- 2、SFTP上传下载
- 基于用户名和密码
- import os,sys
- import paramiko
- t = paramiko.Transport(('10.10.50.30',22))
- t.connect(username='yangmv',password='123456')
- sftp = paramiko.SFTPClient.from_transport(t)
- sftp.put('C:\Users\yangmingwei\Desktop\error.jpg','/home/yangmv/error.jpg')
- #将error.jpg上传到服务器/home/yangmv目录
- sftp.get('/home/yangmv/sftp.txt','C:\Users\yangmingwei\Desktop\sftp.txt')
- #将sftp.txt下载到本机桌面
- t.close()
- 基于公钥秘钥上传下载
- import paramiko
- private_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa')
- transport = paramiko.Transport(('hostname', 22))
- transport.connect(username='yangmv', pkey=private_key )
- sftp = paramiko.SFTPClient.from_transport(transport)
- # 将location.py 上传至服务器 /tmp/test.py
- sftp.put('/tmp/location.py', '/tmp/test.py')
- # 将remove_path 下载到本地 local_path
- sftp.get('remove_path', 'local_path')
- transport.close()
- import paramiko
- import uuid
- class Comm(object):
- def __init__(self): #初始化参数
- self.host = '10.10.50.30'
- self.port = 22
- self.username = 'root'
- self.pwd = '123456'
- self.file_name = ''
- def create_file(self): #本地创建文件
- file_name = str(uuid.uuid4()) #uuid创建一个不会重复的随机字符串作为文件名
- with open(file_name,'w') as f_obj:
- f_obj.write('sb')
- return file_name #返回文件名
- def run(self):
- self.upload() #执行上传
- self.rename() #执行重命名
- def upload(self): #用于上传
- self.file_name = self.create_file()
- t = paramiko.Transport((self.host,self.port))
- t.connect(username=self.username,password=self.pwd)
- sftp = paramiko.SFTPClient.from_transport(t)
- sftp.put(self.file_name,'/home/yangmv/%s'%self.file_name)
- t.close()
- def rename(self): #用于重命名
- ssh = paramiko.SSHClient()
- ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
- ssh.connect(self.host, self.port, self.username, self.pwd)
- stdin, stdout, stderr = ssh.exec_command('mv /home/yangmv/%s /home/yangmv/xxxx.txt'%(self.file_name))
- print stdout.read()
- ssh.close();
- startcmd = Comm()
- startcmd.run()
- import paramiko
- import uuid
- class Comm(object):
- def __init__(self): #初始化参数
- self.host = '10.10.50.30'
- self.port = 22
- self.username = 'root'
- self.pwd = '123456'
- def create_file(self): #本地创建文件
- file_name = str(uuid.uuid4()) #uuid创建一个不会重复的随机字符串作为文件名
- with open(file_name,'w') as f_obj:
- f_obj.write('sb2')
- return file_name #返回文件名
- def run(self):
- self.connect()
- self.upload() #执行上传
- self.rename() #执行重命名
- self.close()
- def connect(self): #用于ssh连接
- t = paramiko.Transport((self.host,self.port))
- t.connect(username=self.username,password=self.pwd)
- self.__transport = t
- def close(self): #用于ssh关闭
- self.__transport.close()
- def upload(self): #用于上传
- self.file_name = self.create_file()
- sftp = paramiko.SFTPClient.from_transport(self.__transport)
- sftp.put(self.file_name,'/home/yangmv/%s'%self.file_name)
- def rename(self): #用于重命名
- ssh = paramiko.SSHClient()
- ssh._transport = self.__transport
- stdin, stdout, stderr = ssh.exec_command('mv /home/yangmv/%s /home/yangmv/ssss.txt'%self.file_name)
- result = stdout.read()
- startcmd = Comm()
- startcmd.run()
- import paramiko
- import select #无法在windows下操作
- import sys
- t = paramiko.Transport(('10.10.50.31', 22))
- t.start_client()
- #基于公钥验证
- ##default_path = os.path.join(os.environ['HOME'], '.ssh', 'id_rsa')
- #key = paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa')
- #t.auth_publickey('root',key)
- #基于用户密码验证
- t.auth_password('root', '123456')
- #打开一个通道
- chan = t.open_session()
- #获取一个终端
- chan.get_pty()
- #激活器
- chan.invoke_shell()
- #########
- # 利用sys.stdin,肆意妄为执行操作
- # 用户在终端输入内容,并将内容发送至远程服务器
- # 远程服务器执行命令,并将结果返回
- # 用户终端显示内容
- while True:
- # 监视用户输入和服务器返回数据
- # sys.stdin 处理用户输入
- # chan 是之前创建的通道,用于接收服务器返回信息
- r_list,w_list,error = select.select([chan,sys.stdin,],[],[],1)
- if chan in r_list: #接收命令执行后返回的结果
- try:
- x = chan.recv(1024)
- if len(x) == 0:
- print '\r\n*** EOF\r\n',
- break
- sys.stdout.write(x)
- sys.stdout.flush()
- except socket.timeout:
- pass
- if sys.stdin in r_list: #用户输入
- inp = sys.stdin.readline()
- chan.sendall(inp) #把用户输入命令发送执行
- #########
- chan.close()
- t.close()
- 成功登陆机器,并可以持续连接,不断输入命令,并到达返回结果
- import paramiko
- import select #无法在windows下操作
- import sys
- import termios
- import tty
- t = paramiko.Transport(('10.10.50.31', 22))
- t.start_client()
- #基于公钥验证
- ##default_path = os.path.join(os.environ['HOME'], '.ssh', 'id_rsa')
- #key = paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa')
- #t.auth_publickey('root',key)
- #基于用户密码验证
- t.auth_password('root', '123456')
- #打开一个通道
- chan = t.open_session()
- #获取一个终端
- chan.get_pty()
- #激活器
- chan.invoke_shell()
- #########
- #获取原tty属性
- oldtty = termios.tcgetattr(sys.stdin)
- try:
- # 为tty设置新属性
- # 默认当前tty设备属性:
- # 输入一行回车,执行
- # CTRL+C 进程退出,遇到特殊字符,特殊处理。
- # 这是为原始模式,不认识所有特殊符号
- # 放置特殊字符应用在当前终端,如此设置,将所有的用户输入均发送到远程服务器
- tty.setraw(sys.stdin.fileno())
- chan.settimeout(0.0)
- while True:
- #监视用户输入和远程服务器的返回数据socket
- #阻塞,直到句柄可用
- r_list,w_list,error = select.select([chan,sys.stdin,],[],[],1)
- if chan in r_list:
- try:
- x = chan.recv(1024)
- if len(x) == 0:
- print '\r\n*** EOF\r\n',
- break
- sys.stdout.write(x)
- sys.stdout.flush()
- except socket.timeout:
- pass
- if sys.stdin in r_list:
- inp = sys.stdin.read(1) #每次读1个字符
- if len(inp) == 0:
- break
- chan.sendall(inp)
- finally:
- #退出后恢复终端属性
- termios.tcsetattr(sys.stdin,termios.TCSADRAIN,oldtty)
- #########
- chan.close()
- t.close()
- import paramiko
- import select #无法在windows下操作
- import sys
- import termios
- import tty
- t = paramiko.Transport(('10.10.50.31', 22))
- t.start_client()
- t.auth_password('root', '123456')
- chan = t.open_session()
- chan.get_pty()
- chan.invoke_shell()
- #########
- oldtty = termios.tcgetattr(sys.stdin)
- try:
- tty.setraw(sys.stdin.fileno())
- chan.settimeout(0.0)
- f = open('record.log','a')
- records = []
- while True:
- r_list,w_list,error = select.select([chan,sys.stdin,],[],[],1)
- if chan in r_list:
- try:
- x = chan.recv(1024)
- if len(x) == 0:
- print '\r\n*** EOF\r\n',
- f.close() #异常中断,或者exit退出时保存
- break
- sys.stdout.write(x)
- sys.stdout.flush()
- except socket.timeout:
- pass
- if sys.stdin in r_list:
- inp = sys.stdin.read(1)
- records.append(inp) #把个字符键入列表暂时保存 ['l','s']
- if len(inp) == 0:
- break
- if inp == '\t': #tab键不记录
- pass
- if inp == '\r': #每次回车
- cmd = ''.join(records).replace('\r','\n') #[ls]+换行
- f.write(cmd)
- records = [] #每次记录一个条命令
- chan.sendall(inp)
- finally:
- termios.tcsetattr(sys.stdin,termios.TCSADRAIN,oldtty)
- #########
- chan.close()
- t.close()
- 成功记录
- import paramiko
- import sys
- import threading
- t = paramiko.Transport(('10.10.50.31', 22))
- t.start_client()
- t.auth_password('root', '123456')
- chan = t.open_session()
- chan.get_pty()
- chan.invoke_shell()
- #########
- sys.stdout.write("Line-buffered terminal emulation. Press F6 or ^Z to send EOF.\r\n\r\n")
- def writeall(sock):
- while True:
- data = sock.recv(256)
- if not data:
- sys.stdout.write('\r\n*** EOF ***\r\n\r\n')
- sys.stdout.flush()
- break
- sys.stdout.write(data)
- sys.stdout.flush()
- writer = threading.Thread(target=writeall, args=(chan,))
- writer.start()
- try:
- while True:
- d = sys.stdin.read(1)
- if not d:
- break
- chan.send(d)
- except EOFError:
- # user hit ^Z or F6
- pass
- #########
- chan.close()
- t.close()
Paramiko使用的更多相关文章
- paramiko 的使用
paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作 SSHClient 用于远程连接机器执行基本命令,也可以执行shell脚本 基于用户名密码连接: def ssh_connect ...
- python+paramiko库+svn写的自动化部署脚本
第一篇博文 直接开门见山的说了. 这是件什么事?:每次部署都是复制本地的文件粘贴到服务器端,因为路径复杂,所以费时且手工容易出漏洞. 一直在想有什么办法可以解决这种,因为以前在微软的一个牛人同事做过一 ...
- 离线安装 Python 2.7, paramiko 和 tornado
无非就是离线安装, 步骤比较繁琐, 记录一下. 需求很简单, 一个离线安装的 Python, 能跑 tornado 和 paramiko 1. 离线安装 Python 2.7 .tgz cd Pyth ...
- CentOS 安装Paramiko模块
转自:http://www.cnblogs.com/hyli/p/3910585.html 1.下载安装包: https://pypi.python.org/packages/source/p/par ...
- paramiko模块的安装
1.找到自己python安装的目录(默认路径:C:\Users\zhangliyuan\AppData\Local\Programs\Python\Python35) 注:cmd中所有命令 2.进入S ...
- 使用paramiko如何连接服务器?
本文和大家分享的是python开发中使用paramiko连接服务器的方法和步骤,希望通过本文的,对大家学习和使用paramiko有所帮助. ssh连接步骤 1.ssh server建立server p ...
- python paramiko 进行文件上传处理
#!/usr/bin/env python # -*- coding:utf-8 -*- import paramiko import uuid class Ha(object): def __ini ...
- python远程连接paramiko 模块和堡垒机实现
paramiko使用 paramiko模块是基于python实现了SSH2远程安全连接,支持认证和密钥方式,可以实现远程连接.命令执行.文件传输.中间SSH代理功能 安装 pip install pa ...
- 利用paramiko模块实现堡垒机+审计功能
paramiko模块是一个远程连接服务器,全真模拟ssh2协议的python模块,借助paramiko源码包中的demos目录下:demo.py和interactive.py两个模块实现简单的堡垒机+ ...
- python之实现基于paramiko和mysql数据库的堡垒机
一.堡垒机结构 堡垒机执行流程: 管理员为用户在服务器上创建账号(将公钥放置服务器,或者使用用户名密码) 用户登陆堡垒机,输入堡垒机用户名密码,现实当前用户管理的服务器列表 用户选择服务器,并自动登陆 ...
随机推荐
- 模板CodeTemplate
/** * @author:dubbo@xxxx.com * @date: ${date} ${time} * @version: V1.0 * @review: dubbo/${date} ${ti ...
- BurpSuite 激活破解
1.下载软件关于Burp Suite, 它是进行Web应用安全测试的一个集成平台,无缝融合各种安全工具并提供全面的接口适配,支持完整的Web应用测试流程,从最初的映射和应用程序的攻击面分析到发现和利用 ...
- 使用fabric1.14.0和fabric2.4.0
fabric1.14.0(支持Python2.5-2.7版本): from fabric.api import * env.gateway = '192.168.181.2' ...
- Tomcat安装及配置详解
Tomcat安装及配置详解 一,Tomcat简介 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,Tomcat是Apache 软件基金会(Apache Software Found ...
- iOS 关于MVC和MVVM设计模式的那些事
一.概述 在 iOS 开发中,MVC(Model View Controller)是构建iOS App的标准模式,是苹果推荐的一个用来组织代码的权威范式.Apple甚至是这么说的.在MVC下,所有的对 ...
- python获取toast 验证
appium版本 1.6.3 desired_caps['automationName']='uiautomator2' def _find_toast(self,message,timeou ...
- DateTime Toxxx() 方法获取时间
直接上代码 static void Main(string[] args) { DateTime time = DateTime.Now; Console.WriteLine("ToFile ...
- ZOJ1827_The Game of 31
这是一个比较经典的博弈题目,今年网赛好像是南京赛上有一个类似的题目. 这种题目是没有一定公式或者函数的,需要自己dp或者搜索解决. 题意为分别给你4张写有1,2,3,4,5,6的卡片共24张,每次轮流 ...
- BZOJ4892 Tjoi2017dna(后缀数组)
对每个子串暴力匹配至失配三次即可.可以用SA查lcp.然而在bzoj上被卡常了.当然也可以二分+哈希或者SAM甚至FFT. #include<iostream> #include<c ...
- 解题:JLOI 2016 侦查守卫
题面 经典的$cov-unc$树形dp(这词是你自己造的吧=.=) 设$cov[i][j]$表示覆盖完$i$的子树后至少向外再覆盖$j$层的最小代价,$unc[i][j]$表示$i$的子树中还剩下至少 ...