paramiko与MySQL数据库
一、paramiko
1、利用paramiko连接远端服务器
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname='192.168.72.132',port=,username='root',password='start33333')
stdin,stdout,stderr = ssh.exec_command('ls -l') #句柄
print stdout.read()
ssh.close()
基于用户名和密码进行连接
import paramiko
transport = paramiko.Transport(('192.168.72.132',))
transport.connect(username='root',password='start33333')
ssh = paramiko.SSHClient()
ssh._transport=transport
stdin,stdout,stderr = ssh.exec_command('ls -l')
print stdout.read()
transport.close()
利用connect类中的transport方法进行连接
2、sftp
import paramiko
transport = paramiko.Transport(('192.168.72.132',))
transport.connect(username='root',password='start33333')
sftp = paramiko.SFTPClient.from_transport(transport)
sftp.put('','/tmp/111')
sftp.get('remote_path','locate_path')
transport.close()
sftp上传或下载
3、paramiko实现修改远程机器配置文件
步骤:a、本地生成文件uuid.ha;b、uuid上传到服务器; c、备份 ha.cnf--->ha.cnf.bak; d、uuid.ha--->ha.cnf; f、reload
上述步骤应该一部完成,使用sftpclient和sshclient命令操作;
import paramiko
import uuid
class Haproxy(object):
def __init__(self):
self.host = '192.168.72.220'
self.port =
self.username = 'root'
self.pwd = 'start33333'
def create_file(self):
file_name = str(uuid.uuid4())
with open(file_name,'w') as f:
f.write('Charles')
return file_name
def run(self):
self.connect()
self.upload()
self.rename()
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 upload(self):
file_name = self.create_file()
sftp = paramiko.SFTPClient.from_transport(self.__transport)
sftp.put(file_name,'/home/Charles/123.py') def rename(self):
ssh = paramiko.SSHClient()
ssh._transport=self.__transport
stdin,stdout,stderr = ssh.exec_command('mv /home/Charles/123.py /home/Charles/456.py')
result = stdout.read()
ssh.close() ha = Haproxy()
ha.run()
文件上传于修改
4、paramiko实现持续性连接
import paramiko
tran = paramiko.Transport(('192.168.72.220',))
tran.start_client()
tran.auth_password('Charles','start33333') #给予密码的认证
chan = tran.open_session() #打开一个通道
chan.get_pty()
chan.invoke_shell() #激活器 import sys,select,socket
while True:
#监视用户的输入和服务器的返回数据
#sys.stdin处理用户的输入
#chan是之前创建的通道,用户接受服务器的返回信息 readable,writeable,error = select.select([chan,sys.stdin,],[],[],)
if chan in readable:
try:
x = chan.recv()
if len(x) == :
print '\r\n***EOF\r\n',
break
sys.stdout.write(x)
sys.stdout.flush()
except socket.timeout:
pass
if sys.stdin in readable:
inp = sys.stdin.readline()
chan.sendall(inp)
chan.close()
tran.close()
实现持续性连接
#上述代码存在的问题,按tab键不能补全,只有回车键发挥发送数据;
#解决方式:、改变默认终端;由行--->stdin变为按字符--->stdin;、点击一次,向终端发送一次;即远程登录之后,改为原始模式,退出到本地之后,改为标准模式; import paramiko
tran = paramiko.Transport(('192.168.72.220',))
tran.start_client()
tran.auth_password('Charles','start33333')
chan = tran.open_session()
chan.get_pty()
chan.invoke_shell()
import select
import sys
import socket
import termios
import tty
oldtty = termios.tcgetattr(sys.stdin)
try:
# 为tty设置新属性
# 默认当前tty设备属性:
# 输入一行回车,执行
# CTRL+C 进程退出,遇到特殊字符,特殊处理。 # 这是为原始模式,不认识所有特殊符号
# 放置特殊字符应用在当前终端,如此设置,将所有的用户输入均发送到远程服务器
tty.setraw(sys.stdin.fileno())
chan.settimeout(0.0) while True:
r, w, e = select.select([chan, sys.stdin], [], [], )
if chan in r:
try:
x = chan.recv()
if len(x) == :
print '\r\n*** EOF\r\n',
break
sys.stdout.write(x)
sys.stdout.flush()
except socket.timeout:
pass
if sys.stdin in r:
x = sys.stdin.read()
if len(x) == :
break
chan.send(x) finally:
termios.tcsetattr(sys.stdin, termios.TCSADRAIN, oldtty)
chan.close()
tran.close()
修改默认终端
5、paramiko实现连续性连接服务器之记录操作日志
#!/usr/bin/env python
# _*_ coding:utf- _*_
import paramiko
tran = paramiko.Transport(('192.168.72.132',))
tran.start_client()
tran.auth_password('root','start33333')
chan = tran.open_session()
chan.get_pty()
chan.invoke_shell()
import select
import sys
import socket
import termios
import tty
oldtty = termios.tcgetattr(sys.stdin)
try:
tty.setraw(sys.stdin.fileno())
chan.settimeout(0.0)
f = open('record','a') #记录操作日志的文件
while True:
r, w, e = select.select([chan, sys.stdin], [], [], )
if chan in r:
try:
x = chan.recv()
if len(x) == :
print '\r\n*** EOF\r\n',
f.close() #返回为空,没有返回时关闭文件
break
sys.stdout.write(x)
sys.stdout.flush()
except socket.timeout:
pass
if sys.stdin in r:
x = sys.stdin.read()
if len(x) == :
break
if x == '\t':
pass
else:
f.write(x)
chan.send(x) finally:
termios.tcsetattr(sys.stdin, termios.TCSADRAIN, oldtty)
chan.close()
tran.close()
paramiko实现持续性连接之记录操作日志
以上操作都是在linux机器上完成的,也可以在windows平台上完成,具体在那种平台上执行,可以参考paramiko源码包中的demo文件夹下的demo.py和interactive.py文件设置;
6、paramiko实现堡垒机的功能(利用demo.py和interactive.py实现)
#将上述两个文件拷贝到本地
#!/usr/bin/env python
# _*_ coding:utf- _*_
import os,sys
msg = """\033[42;1mWelcome to using Charles's auditing system!\033[0m"""
print msg
host_dic = {
'Charles':'192.168.72.132',
}
while True:
for hostname,ip in host_dic.items():
print hostname,ip
try:
host = raw_input('please choose one server to login:').strip()
if host == 'quit':
print 'Goodbye!'
break
except KeyboardInterrupt:
sys.exit()
except EOFError:
sys.exit()
if len(host) == :continue
if not host_dic.has_key(host):
print 'No host matched,try again!'
continue
print '\033[32;1mGoing to connect\033[0m',host_dic[host]
os.system("python demo.py %s" %host_dic[host])
7、MySQL数据库操作
import MySQLdb
conn = MySQLdb.connect(host='192.168.72.240',user='root',passwd='start33333',db='S11day11')
cur = conn.cursor() reCount = cur.execute('insert into students(name,sex,age) values(%s,%s,%s)',('Charles','male',)) conn.commit()
cur.close()
conn.close()
print reCount
插入数据
import MySQLdb
conn = MySQLdb.connect(host='192.168.72.240',user='root',passwd='start33333',db='S11day11')
cur = conn.cursor()
li = [
('wahaha','male',),
('xixi','female',)
] reCount = cur.executemany('insert into students(name,sex,age) values(%s,%s,%s)',li) conn.commit()
cur.close()
conn.close()
print reCount
插入多行数据
import MySQLdb
conn = MySQLdb.connect(host='192.168.72.240',user='root',passwd='start33333',db='S11day11')
cur = conn.cursor()
reCount = cur.execute('select * from S11day11.students')
print cur.fetchone() #一个fetchone拿一条数据,指针往下执行一条
print cur.fetchone()
cur.scroll(,mode='absolute')
#cur.scroll(-,mode='relative') #指针向上偏移
print cur.fetchone()
print cur.fetchall() #拿到指针位置以下的全部数据,获取数据的格式全部为元组
conn.commit()
cur.close()
conn.close()
print reCount
数据查询
import MySQLdb
conn = MySQLdb.connect(host='192.168.72.240',user='root',passwd='start33333',db='S11day11')
#cur = conn.cursor()
cur = conn.cursor(cursorclass = MySQLdb.cursors.DictCursor)
reCount = cur.execute('select * from S11day11.students')
print cur.fetchone()
print cur.fetchone()
cur.scroll(,mode='absolute')
print cur.fetchone()
print cur.fetchall()
conn.commit()
cur.close()
conn.close()
print reCount {'age': , 'sex': 'male', 'tel': '-', 'id': 1L, 'name': 'alex'}
{'age': , 'sex': 'male', 'tel': '-', 'id': 2L, 'name': 'alex'}
{'age': , 'sex': 'male', 'tel': '-', 'id': 2L, 'name': 'alex'}
({'age': , 'sex': 'male', 'tel': '-', 'id': 3L, 'name': 'Charles'}, {'age': , 'sex': 'male', 'tel': '-', 'id': 4L, 'name': 'wahaha'}, {'age': , 'sex': 'fema', 'tel': '-', 'id': 5L, 'name': 'xixi'})
修改游标,数据格式改变
paramiko与MySQL数据库的更多相关文章
- python之实现基于paramiko和mysql数据库的堡垒机
一.堡垒机结构 堡垒机执行流程: 管理员为用户在服务器上创建账号(将公钥放置服务器,或者使用用户名密码) 用户登陆堡垒机,输入堡垒机用户名密码,现实当前用户管理的服务器列表 用户选择服务器,并自动登陆 ...
- Python Paramiko模块与MySQL数据库操作
Paramiko模块批量管理:通过调用ssh协议进行远程机器的批量命令执行. 要使用paramiko模块那就必须先安装这个第三方模块,仅需要在本地上安装相应的软件(python以及PyCrypto), ...
- Python之操作Redis、 RabbitMQ、SQLAlchemy、paramiko、mysql
一.Redis Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.Redis是一个key-value存储系统.和 ...
- MySQL数据库再回首
前言: 数据库是程序员的数据源泉,加上近期 要开发DB可视化.性能分析的功能 重新回顾一下MySQL知识,以下是笔记: MySQL架构 MySQL基础理论 1.什么是关系型数据库? 关系型数据库,这个 ...
- nodejs进阶(6)—连接MySQL数据库
1. 建库连库 连接MySQL数据库需要安装支持 npm install mysql 我们需要提前安装按mysql sever端 建一个数据库mydb1 mysql> CREATE DATABA ...
- 当忘记mysql数据库密码时如何进行修改
因为长时间没有使用数据库了,或者把密码改完之后就忘了数据库密码,不能正常进入数据库,也无法修改密码,有一个简单的常用修改密码方式: 1.首先找到和打开mysql.exe和mysqld.exe所在的文件 ...
- MySQL数据库和InnoDB存储引擎文件
参数文件 当MySQL示例启动时,数据库会先去读一个配置参数文件,用来寻找数据库的各种文件所在位置以及指定某些初始化参数,这些参数通常定义了某种内存结构有多大等.在默认情况下,MySQL实例会按照一定 ...
- 一起学微软Power BI系列-使用技巧(1)连接Oracle与Mysql数据库
说起Oracle数据库,以前没用过Oracle不知道,但是这1年用Oracle后,发现真的是想狂吐槽,特别是那个.NET驱动和链接字符串,特别奇葩.总归是和其他数据库不一样,标新立异,不知道为何.另外 ...
- CentOS下mysql数据库常用命令总结
mysql数据库使用总结 本文主要记录一些mysql日常使用的命令,供以后查询. 1.更改root密码 mysqladmin -uroot password 'yourpassword' 2.远程登陆 ...
随机推荐
- [zz] 基于国家标准的 EndNote 输出样式模板
基于国家标准的 EndNote 输出样式模板 https://cnzhx.net/blog/endnote-output-style-cnzhx/ 发表于 2013-05-26 作者 Haoxian ...
- C# HmacMD5 加密
string HmacMD5(string source, string key) { HMACMD5 hmacmd = new HMACMD5(Encoding.Default.GetBytes(k ...
- python---filecmp
ilecmp可以实现文件,目录,遍历子目录的差异对比功能. 自带filecmp模块,无需安装. 常用方法说明 filecmp提供3个操作方法,cmp(单文件对比),cmpfile(多文件对比),dir ...
- InstallShield打包设置相对路径
InstallShield打包设置相对路径 在使用Installshield 打包安装文件时,添加打包文件时默认使用绝对路径,但是工程文件转移时(复制到其它位置时)编译时就会找不到安装文件,这样很不方 ...
- 工具04_SQL Trace/DBMS_SYSTEM
2014-06-25 Created By BaoXinjian
- ubuntu16041,安装opencv3.1.0
[非常感谢:http://www.linuxdiyf.com/linux/18482.html] 1.依赖关系: sudo apt-get install build-essentialsudo ap ...
- bug_ _org.json.JSONException: End of input at character 0 of
10-16 18:28:39.549: W/System.err(4950): org.json.JSONException: End of input at character 0 of 10-16 ...
- 使用Squirrel创建基于Electron开发的Windows 应用安装包
我们把自己开发的Electron应用发布之前,需要把app打包成简单的安装包,这样app更容易被获取,以此来发布我们的应用.我们可以参考Wix或其他的安装程序,但是对于Electron应用更好的打包程 ...
- 简单排序,C# 直接使用 List。
List<string> list = new List<string>(); list.Add("sdfs"); list.Add("ef&qu ...
- 《C#编程》
第一天做C#,第一个C#.2016-11-11,周五 1.是用windowFormApp编程的代码. 2.下面是ConsoleApp编程的代码 例题1.主要是声明变量,1>使用变量,赋值语句 2 ...