日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

Python之路【第八篇】:堡垒机实例以及数据库操作

發(fā)布時間:2023/12/1 python 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python之路【第八篇】:堡垒机实例以及数据库操作 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Python之路【第八篇】:堡壘機(jī)實例以及數(shù)據(jù)庫操作

堡壘機(jī)前戲

開發(fā)堡壘機(jī)之前,先來學(xué)習(xí)Python的paramiko模塊,該模塊機(jī)遇SSH用于連接遠(yuǎn)程服務(wù)器并執(zhí)行相關(guān)操作

SSHClient

用于連接遠(yuǎn)程服務(wù)器并執(zhí)行基本命令

基于用戶名密碼連接:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 import?paramiko ?? # 創(chuàng)建SSH對象 ssh?=?paramiko.SSHClient() # 允許連接不在know_hosts文件中的主機(jī) ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 連接服務(wù)器 ssh.connect(hostname='c1.salt.com', port=22, username='wupeiqi', password='123') ?? # 執(zhí)行命令 stdin, stdout, stderr?=?ssh.exec_command('df') # 獲取命令結(jié)果 result?=?stdout.read() ?? # 關(guān)閉連接 ssh.close()
import paramikotransport = paramiko.Transport(('hostname', 22)) transport.connect(username='wupeiqi', password='123')ssh = paramiko.SSHClient() ssh._transport = transportstdin, stdout, stderr = ssh.exec_command('df') print stdout.read()transport.close()

基于公鑰密鑰連接:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 import?paramiko private_key?=?paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa') # 創(chuàng)建SSH對象 ssh?=?paramiko.SSHClient() # 允許連接不在know_hosts文件中的主機(jī) ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 連接服務(wù)器 ssh.connect(hostname='c1.salt.com', port=22, username='wupeiqi', key=private_key) # 執(zhí)行命令 stdin, stdout, stderr?=?ssh.exec_command('df') # 獲取命令結(jié)果 result?=?stdout.read() # 關(guān)閉連接 ssh.close()
import paramikoprivate_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 = transportstdin, stdout, stderr = ssh.exec_command('df')transport.close()

SFTPClient

用于連接遠(yuǎn)程服務(wù)器并執(zhí)行上傳下載

基于用戶名密碼上傳下載

1 2 3 4 5 6 7 8 9 10 11 12 import?paramiko transport?=?paramiko.Transport(('hostname',22)) transport.connect(username='wupeiqi',password='123') sftp?=?paramiko.SFTPClient.from_transport(transport) # 將location.py 上傳至服務(wù)器 /tmp/test.py sftp.put('/tmp/location.py',?'/tmp/test.py') # 將remove_path 下載到本地 local_path sftp.get('remove_path',?'local_path') transport.close()

基于公鑰密鑰上傳下載

1 2 3 4 5 6 7 8 9 10 11 12 13 14 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 ) sftp?=?paramiko.SFTPClient.from_transport(transport) # 將location.py 上傳至服務(wù)器 /tmp/test.py sftp.put('/tmp/location.py',?'/tmp/test.py') # 將remove_path 下載到本地 local_path sftp.get('remove_path',?'local_path') transport.close()
#!/usr/bin/env python # -*- coding:utf-8 -*- import paramiko import uuidclass Haproxy(object):def __init__(self):self.host = '172.16.103.191'self.port = 22self.username = 'wupeiqi'self.pwd = '123'self.__k = Nonedef create_file(self):file_name = str(uuid.uuid4())with open(file_name,'w') as f:f.write('sb')return file_namedef 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 = transportdef close(self):self.__transport.close()def upload(self):# 連接,上傳file_name = self.create_file()sftp = paramiko.SFTPClient.from_transport(self.__transport)# 將location.py 上傳至服務(wù)器 /tmp/test.pysftp.put(file_name, '/home/wupeiqi/tttttttttttt.py')def rename(self):ssh = paramiko.SSHClient()ssh._transport = self.__transport# 執(zhí)行命令stdin, stdout, stderr = ssh.exec_command('mv /home/wupeiqi/tttttttttttt.py /home/wupeiqi/ooooooooo.py')# 獲取命令結(jié)果result = stdout.read()ha = Haproxy() ha.run()

堡壘機(jī)的實現(xiàn)?

實現(xiàn)思路:

堡壘機(jī)執(zhí)行流程:

  • 管理員為用戶在服務(wù)器上創(chuàng)建賬號(將公鑰放置服務(wù)器,或者使用用戶名密碼)
  • 用戶登陸堡壘機(jī),輸入堡壘機(jī)用戶名密碼,現(xiàn)實當(dāng)前用戶管理的服務(wù)器列表
  • 用戶選擇服務(wù)器,并自動登陸
  • 執(zhí)行操作并同時將用戶操作記錄
  • 注:配置.brashrc實現(xiàn)ssh登陸后自動執(zhí)行腳本,如:/usr/bin/python /home/wupeiqi/menu.py

    實現(xiàn)過程

    步驟一,實現(xiàn)用戶登陸

    1 2 3 4 5 6 7 8 import?getpass user?=?raw_input('username:') pwd?=?getpass.getpass('password') if?user?==?'alex'?and?pwd?==?'123': ????print?'登陸成功' else: ????print?'登陸失敗'

    步驟二,根據(jù)用戶獲取相關(guān)服務(wù)器列表

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 dic?=?{ ????'alex': [ ????????'172.16.103.189', ????????'c10.puppet.com', ????????'c11.puppet.com', ????], ????'eric': [ ????????'c100.puppet.com', ????] } host_list?=?dic['alex'] print?'please select:' for?index, item?in?enumerate(host_list,?1): ????print?index, item inp?=?raw_input('your select (No):') inp?=?int(inp) hostname?=?host_list[inp-1] port?=?22

    步驟三,根據(jù)用戶名、私鑰登陸服務(wù)器

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 tran?=?paramiko.Transport((hostname, port,)) tran.start_client() default_path?=?os.path.join(os.environ['HOME'],?'.ssh',?'id_rsa') key?=?paramiko.RSAKey.from_private_key_file(default_path) tran.auth_publickey('wupeiqi', key) # 打開一個通道 chan?=?tran.open_session() # 獲取一個終端 chan.get_pty() # 激活器 chan.invoke_shell() ######### # 利用sys.stdin,肆意妄為執(zhí)行操作 # 用戶在終端輸入內(nèi)容,并將內(nèi)容發(fā)送至遠(yuǎn)程服務(wù)器 # 遠(yuǎn)程服務(wù)器執(zhí)行命令,并將結(jié)果返回 # 用戶終端顯示內(nèi)容 ######### chan.close() tran.close()
    while True:# 監(jiān)視用戶輸入和服務(wù)器返回數(shù)據(jù)# sys.stdin 處理用戶輸入# chan 是之前創(chuàng)建的通道,用于接收服務(wù)器返回信息readable, writeable, error = select.select([chan, sys.stdin, ],[],[],1)if chan in readable:try:x = chan.recv(1024)if len(x) == 0:print '\r\n*** EOF\r\n',breaksys.stdout.write(x)sys.stdout.flush()except socket.timeout:passif sys.stdin in readable:inp = sys.stdin.readline()chan.sendall(inp) # 獲取原tty屬性 oldtty = termios.tcgetattr(sys.stdin) try:# 為tty設(shè)置新屬性# 默認(rèn)當(dāng)前tty設(shè)備屬性:# 輸入一行回車,執(zhí)行# CTRL+C 進(jìn)程退出,遇到特殊字符,特殊處理。# 這是為原始模式,不認(rèn)識所有特殊符號# 放置特殊字符應(yīng)用在當(dāng)前終端,如此設(shè)置,將所有的用戶輸入均發(fā)送到遠(yuǎn)程服務(wù)器tty.setraw(sys.stdin.fileno())chan.settimeout(0.0)while True:# 監(jiān)視 用戶輸入 和 遠(yuǎn)程服務(wù)器返回數(shù)據(jù)(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',breaksys.stdout.write(x)sys.stdout.flush()except socket.timeout:passif sys.stdin in r:x = sys.stdin.read(1)if len(x) == 0:breakchan.send(x)finally:# 重新設(shè)置終端屬性termios.tcsetattr(sys.stdin, termios.TCSADRAIN, oldtty) def windows_shell(chan):import threadingsys.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()breaksys.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:breakchan.send(d)except EOFError:# user hit ^Z or F6pass

    注:密碼驗證 t.auth_password(username, pw)

    詳見:paramiko源碼demo

    數(shù)據(jù)庫操作

    Python 操作 Mysql 模塊的安裝

    1 2 3 4 5 linux: ????yum install MySQL-python window: ????http://files.cnblogs.com/files/wupeiqi/py-mysql-win.zip

    SQL基本使用

    1、數(shù)據(jù)庫操作

    1 2 3 show databases; use [databasename]; create database? [name];

    2、數(shù)據(jù)表操作

    1 2 3 4 5 6 7 8 9 10 show tables; create table students ????( ????????id?int??not?null auto_increment primary key, ????????name char(8)?not?null, ????????sex char(4)?not?null, ????????age tinyint unsigned?not?null, ????????tel char(13) null default?"-" ????);
    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`) ) ;

    3、數(shù)據(jù)操作

    1 2 3 4 5 6 7 insert into students(name,sex,age,tel) values('alex','man',18,'151515151') delete?from?students where?id?=2; update students?set?name?=?'sb'?where?id?=1; select?*?from?students

    4、其他

    1 2 3 主鍵 外鍵 左右連接

    Python MySQL API

    一、插入數(shù)據(jù)

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 import?MySQLdb ?? conn?=?MySQLdb.connect(host='127.0.0.1',user='root',passwd='1234',db='mydb') ?? cur?=?conn.cursor() ?? reCount?=?cur.execute('insert into UserInfo(Name,Address) values(%s,%s)',('alex','usa')) # reCount = cur.execute('insert into UserInfo(Name,Address) values(%(id)s, %(name)s)',{'id':12345,'name':'wupeiqi'}) ?? conn.commit() ?? cur.close() conn.close() ?? print?reCount
    import MySQLdbconn = 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

    注意:cur.lastrowid

    二、刪除數(shù)據(jù)

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 import?MySQLdb conn?=?MySQLdb.connect(host='127.0.0.1',user='root',passwd='1234',db='mydb') cur?=?conn.cursor() reCount?=?cur.execute('delete from UserInfo') conn.commit() cur.close() conn.close() print?reCount

    三、修改數(shù)據(jù)

    1 2 3 4 5 6 7 8 9 10 11 12 13 import?MySQLdb conn?=?MySQLdb.connect(host='127.0.0.1',user='root',passwd='1234',db='mydb') cur?=?conn.cursor() reCount?=?cur.execute('update UserInfo set Name = %s',('alin',)) conn.commit() cur.close() conn.close() print?reCount

    四、查數(shù)據(jù)

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 # ############################## fetchone/fetchmany(num)? ############################## import?MySQLdb conn?=?MySQLdb.connect(host='127.0.0.1',user='root',passwd='1234',db='mydb') cur?=?conn.cursor() reCount?=?cur.execute('select * from UserInfo') print?cur.fetchone() print?cur.fetchone() cur.scroll(-1,mode='relative') print?cur.fetchone() print?cur.fetchone() cur.scroll(0,mode='absolute') print?cur.fetchone() print?cur.fetchone() cur.close() conn.close() print?reCount # ############################## fetchall? ############################## import?MySQLdb conn?=?MySQLdb.connect(host='127.0.0.1',user='root',passwd='1234',db='mydb') #cur = conn.cursor(cursorclass = MySQLdb.cursors.DictCursor) cur?=?conn.cursor() reCount?=?cur.execute('select Name,Address from UserInfo') nRet?=?cur.fetchall() cur.close() conn.close() print?reCount print?nRet for?i?in?nRet: ????print?i[0],i[1]

    ?

    轉(zhuǎn)載于:https://www.cnblogs.com/weiman3389/p/6224146.html

    總結(jié)

    以上是生活随笔為你收集整理的Python之路【第八篇】:堡垒机实例以及数据库操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 精品免费视频 | 久久成人精品 | 日本黄色美女网站 | 日韩av高清在线播放 | 欧洲色网站 | 天堂综合在线 | 黑人玩弄人妻一区二区三区免费看 | 日日摸日日碰夜夜爽av | 九九午夜| 午夜一级免费 | 伊人久久大香线 | 日本aⅴ在线观看 | 天天操操 | 中文字幕无码精品亚洲资源网久久 | 亚洲com| 欧美色欧美| 777色| 欧美生活一级片 | 欧美成人一区在线 | 激情五月在线观看 | 日韩成人高清在线 | 亚洲精品高清视频在线观看 | 亚洲综合在线视频 | 中文字幕第四页 | 日韩欧美无 | 久久午夜场| 草久影院 | 黄色av免费在线观看 | 成人一区二区电影 | 日本成人免费 | 91久久爽久久爽爽久久片 | 男人影院在线观看 | 国产原创中文av | 中文字幕一区二区人妻电影丶 | 久久99精品视频 | wwww在线观看 | 国产aⅴ无码片毛片一级一区2 | 日韩av在线资源 | 中文字幕日韩欧美一区二区 | 亚洲成熟少妇视频在线观看 | 精品香蕉一区二区三区 | 国产sm调教一区二区 | 午夜影院在线观看 | av涩涩 | 91中文视频 | 中文字幕色网 | 在线观看免费黄视频 | 爱情岛论语亚洲入口 | 国产视频一区在线 | 国产视频1区 | 99热这里只有精品9 日韩综合在线 | 午夜偷拍福利 | 狠狠操在线 | 日本一级片免费看 | 亚洲高清成人 | 日本人妖网站 | av有码在线观看 | 精品福利视频一区二区 | 最新中文字幕2019 | 黄网站免费在线 | 密桃av在线 | 久久神马 | 久久av一区二区三区 | 亚洲日本欧美精品 | 国产叼嘿视频在线观看 | 国产免费av一区 | 91福利一区二区 | 国产成人av免费 | 91精品国产麻豆 | 黄色片网站在线看 | 天天插夜夜 | 黄色大片免费网站 | 亚洲欧洲免费无码 | 欧美国产专区 | 久久午夜视频 | 韩国福利一区 | 鬼灭之刃柱训练篇在线观看 | 精品不卡一区二区三区 | 啪啪国产精品 | 免费在线观看网址入口 | 男女黄床上色视频免费的软件 | 99热亚洲 | 综合久久久久久久久久久 | 黑人高潮一区二区三区在线看 | 成人羞羞国产免费动态 | 日韩大片一区二区 | 亚洲国产中文字幕在线 | 国产九九久久 | 欧美在线看 | 欧美成人aaa片一区国产精品 | 日韩在线视频免费 | 亚洲欧美天堂 | 色啪综合 | 精品国产一区二区三区av性色 | 欧美天堂一区 | 可以免费看的av | 四虎影视成人永久免费观看亚洲欧美 | 日韩在线播放一区二区 | 日韩电影在线观看中文字幕 |