python mysql paramiko_paramiko的应用与实现,Python操作MySQL API.

开发堡垒机之前,先来学习Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作

SSHClient

用于连接远程服务器并执行基本命令

基于用户名密码连接:

961ddebeb323a10fe0623af514929fc1.png

48304ba5e6f9fe08f3fa1abda7d326ab.png

import paramiko

transport = paramiko.Transport(('hostname', 22))

transport.connect(username='wupeiqi', password='123')

ssh = paramiko.SSHClient()

ssh._transport = transport

stdin, stdout, stderr = ssh.exec_command('df')

print stdout.read()

transport.close()

48304ba5e6f9fe08f3fa1abda7d326ab.png

基于公钥密钥连接:

961ddebeb323a10fe0623af514929fc1.png

48304ba5e6f9fe08f3fa1abda7d326ab.png

import paramiko

private_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa')

transport = paramiko.Transport(('hostname', 22))

transport.connect(username='wupeiqi', pkey=private_key)

ssh = paramiko.SSHClient()

ssh._transport = transport

stdin, stdout, stderr = ssh.exec_command('df')

transport.close()

48304ba5e6f9fe08f3fa1abda7d326ab.png

SFTPClient

用于连接远程服务器并执行上传下载

基于用户名密码上传下载

基于公钥密钥上传下载

961ddebeb323a10fe0623af514929fc1.png

48304ba5e6f9fe08f3fa1abda7d326ab.png

#!/usr/bin/env python

# -*- coding:utf-8 -*-

import paramiko

import uuid

class Haproxy(object):

def __init__(self):

self.host = '172.16.103.191'

self.port = 22

self.username = 'wupeiqi'

self.pwd = '123'

self.__k = None

def create_file(self):

file_name = str(uuid.uuid4())

with open(file_name,'w') as f:

f.write('sb')

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)

# 将location.py 上传至服务器 /tmp/test.py

sftp.put(file_name, '/home/wupeiqi/tttttttttttt.py')

def rename(self):

ssh = paramiko.SSHClient()

ssh._transport = self.__transport

# 执行命令

stdin, stdout, stderr = ssh.exec_command('mv /home/wupeiqi/tttttttttttt.py /home/wupeiqi/ooooooooo.py')

# 获取命令结果

result = stdout.read()

ha = Haproxy()

ha.run()

48304ba5e6f9fe08f3fa1abda7d326ab.png

堡垒机的实现

实现思路:

9f3a477986d78b6650428f6383d0a192.png

堡垒机执行流程:

管理员为用户在服务器上创建账号(将公钥放置服务器,或者使用用户名密码)

用户登陆堡垒机,输入堡垒机用户名密码,现实当前用户管理的服务器列表

用户选择服务器,并自动登陆

执行操作并同时将用户操作记录

注:配置.brashrc实现ssh登陆后自动执行脚本,如:/usr/bin/python /home/wupeiqi/menu.py

实现过程

步骤一,实现用户登陆

步骤二,根据用户获取相关服务器列表

步骤三,根据用户名、私钥登陆服务器

按 Ctrl+C 复制代码

按 Ctrl+C 复制代码

961ddebeb323a10fe0623af514929fc1.png

48304ba5e6f9fe08f3fa1abda7d326ab.png

# 获取原tty属性

oldtty = termios.tcgetattr(sys.stdin)

try:

# 为tty设置新属性

# 默认当前tty设备属性:

# 输入一行回车,执行

# CTRL+C 进程退出,遇到特殊字符,特殊处理。

# 这是为原始模式,不认识所有特殊符号

# 放置特殊字符应用在当前终端,如此设置,将所有的用户输入均发送到远程服务器

tty.setraw(sys.stdin.fileno())

chan.settimeout(0.0)

while True:

# 监视 用户输入 和 远程服务器返回数据(socket)

# 阻塞,直到句柄可读

r, w, e = select.select([chan, sys.stdin], [], [], 1)

if chan in r:

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:

x = sys.stdin.read(1)

if len(x) == 0:

break

chan.send(x)

finally:

# 重新设置终端属性

termios.tcsetattr(sys.stdin, termios.TCSADRAIN, oldtty)

48304ba5e6f9fe08f3fa1abda7d326ab.png

961ddebeb323a10fe0623af514929fc1.png

48304ba5e6f9fe08f3fa1abda7d326ab.png

def windows_shell(chan):

import threading

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

48304ba5e6f9fe08f3fa1abda7d326ab.png

注:密码验证 t.auth_password(username, pw)

详见:paramiko源码demo

数据库操作

Python 操作 Mysql 模块的安装

SQL基本使用

1、数据库操作

2、数据表操作

961ddebeb323a10fe0623af514929fc1.png

48304ba5e6f9fe08f3fa1abda7d326ab.png

CREATE TABLE `wb_blog` (

`id` smallint(8) unsigned NOT NULL,

`catid` smallint(5) unsigned NOT NULL DEFAULT '0',

`title` varchar(80) NOT NULL DEFAULT '',

`content` text NOT NULL,

PRIMARY KEY (`id`),

UNIQUE KEY `catename` (`catid`)

) ;

48304ba5e6f9fe08f3fa1abda7d326ab.png

3、数据操作

4、其他

Python MySQL API

一、插入数据

961ddebeb323a10fe0623af514929fc1.png

48304ba5e6f9fe08f3fa1abda7d326ab.png

import MySQLdb

conn = MySQLdb.connect(host='127.0.0.1',user='root',passwd='1234',db='mydb')

cur = conn.cursor()

li =[

('alex','usa'),

('sb','usa'),

]

reCount = cur.executemany('insert into UserInfo(Name,Address) values(%s,%s)',li)

conn.commit()

cur.close()

conn.close()

print reCount

48304ba5e6f9fe08f3fa1abda7d326ab.png

注意:cur.lastrowid

二、删除数据

三、修改数据

四、查数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值