Python實(shí)現(xiàn)Kerberos用戶的增刪改查操作
1、首先模擬python類似shell命令行操作的接口:
python安裝subprocess(本地)、paramiko(SSH遠(yuǎn)程)
#-*- coding: UTF-8 -*-#!/usr/bin/pythonimport os, sysimport subprocessimport paramikoimport settings class RunCmd(object): def __init__(self): self.cmd = ’ls’ @staticmethod def local_run(cmd): print(’start executing...’) print(’cmd is -------> %s’ % str(cmd)) s = subprocess.Popen(str(cmd), shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) out, err = s.communicate() print('outinfo is -------> %s' % out) print('errinfo is -------> %s' % err) print(’finish executing...’) print(’result:------> %s’ % s.returncode) return s.returncode @staticmethod def remote_run(host, username, password, port, cmd): client = paramiko.SSHClient() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) client.connect(hostname=host, port=int(port), username=username, password=password, timeout=5) stdin, stdout, stderr = client.exec_command(cmd) result = stdout.read() client.close() return result @staticmethod def krb_run(cmd): print(’krb_run start...’) print(’cmd is -------> %s’ % str(cmd)) result = RunCmd.remote_run(settings.KRB_HOST, settings.USERNAME, settings.PASSWORD, settings.PORT, cmd) print(’result:------> %s’ % result) print(’krb_run finish...’) return result
2、Kerberos常用的命令操作封裝成接口,其他簡單。但需要交互的是刪除 principal
def delete_user(self, username): cmd = r''' expect -c ' set timeout 1; spawn kadmin.local -q 'delete_principal {principal}' ; expect yes/no {{ send 'yesr' }} ; expect *r expect r expect eof ' '''.format(principal=username) RunCmd.krb_run(cmd)
補(bǔ)充知識:python操作有Kerberos認(rèn)證的hive庫
之前訪問hive都比較簡單,直接用pyhive連接即可。
但是最近遇到了一個(gè)問題,hive有了Kerberosren認(rèn)證。
最終經(jīng)過各種嘗試和靈感迸發(fā),終于解決了這個(gè)問題,遂記錄之。
代碼
from pyhive.hive import connectcon = connect(host=’XXXX’,port=10000,auth=’KERBEROS’,kerberos_service_name='hive')cursor = con.cursor()cursor.execute(’select * from tmp.pricing_calculate_result_spark where time_id='201907171355' limit 10,1’)datas = cursor.fetchall()print(datas)cursor.close()con.close()
端口和ip都換成自己的,auth和kerberos_service_name不要改
運(yùn)行效果
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章:
1. jsp學(xué)習(xí)之scriptlet的使用方法詳解2. ASP.NET MVC獲取多級類別組合下的產(chǎn)品3. ASP.NET MVC實(shí)現(xiàn)橫向展示購物車4. ThinkPHP5 通過ajax插入圖片并實(shí)時(shí)顯示(完整代碼)5. Docker 容器健康檢查機(jī)制6. 基于Java的操作系統(tǒng)JNode發(fā)布7. IntelliJ IDEA 2021.1 EAP 1 發(fā)布支持 Java 16 和 WSL 28. Python還能這么玩之只用30行代碼從excel提取個(gè)人值班表9. CSS3實(shí)現(xiàn)動(dòng)態(tài)翻牌效果 仿百度貼吧3D翻牌一次動(dòng)畫特效10. ASP.NET MVC使用正則表達(dá)式驗(yàn)證手機(jī)號碼
