Python实现Kerberos用户的增删改查操作


Posted in Python onDecember 14, 2020

1、首先模拟python类似shell命令行操作的接口:

python安装subprocess(本地)、paramiko(SSH远程)

#-*- coding: UTF-8 -*-
#!/usr/bin/python
import os, sys
import subprocess
import paramiko
import 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 \"yes\r\" }} ;
   expect *\r
   expect \r
   expect eof
   "
  """.format(principal=username)
  RunCmd.krb_run(cmd)

补充知识:python操作有Kerberos认证的hive库

之前访问hive都比较简单,直接用pyhive连接即可。

但是最近遇到了一个问题,hive有了Kerberosren认证。

最终经过各种尝试和灵感迸发,终于解决了这个问题,遂记录之。

代码

from pyhive.hive import connect
con = 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不要改

运行效果

Python实现Kerberos用户的增删改查操作

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。如有错误或未考虑完全的地方,望不吝赐教。

Python 相关文章推荐
在Python的web框架中编写创建日志的程序的教程
Apr 30 Python
Python3+django2.0+apache2+ubuntu14部署网站上线的方法
Jul 07 Python
django如何连接已存在数据的数据库
Aug 14 Python
Python对象与引用的介绍
Jan 24 Python
用Python实现BP神经网络(附代码)
Jul 10 Python
Django 1.10以上版本 url 配置注意事项详解
Aug 05 Python
解决Atom安装Hydrogen无法运行python3的问题
Aug 28 Python
使用OpenCV实现仿射变换—缩放功能
Aug 29 Python
wxPython实现整点报时
Nov 18 Python
查看keras的默认backend实现方式
Jun 19 Python
装上这 14 个插件后,PyCharm 真的是无敌的存在
Jan 11 Python
Python中time标准库的使用教程
Apr 13 Python
python-地图可视化组件folium的操作
Dec 14 #Python
python多线程和多进程关系详解
Dec 14 #Python
Python Pandas list列表数据列拆分成多行的方法实现
Dec 14 #Python
pandas将list数据拆分成行或列的实现
Dec 13 #Python
pandas按照列的值排序(某一列或者多列)
Dec 13 #Python
详解pandas中利用DataFrame对象的.loc[]、.iloc[]方法抽取数据
Dec 13 #Python
pandas抽取行列数据的几种方法
Dec 13 #Python
You might like
PHP编程风格规范分享
2014/01/15 PHP
PHP5.2下preg_replace函数的问题
2015/05/08 PHP
PHP并发多进程处理利器Gearman使用介绍
2016/05/16 PHP
PHP处理Ajax请求与Ajax跨域问题
2017/02/13 PHP
用javascript实现给图片加链接
2007/08/15 Javascript
javascript setTimeout()传递函数参数(包括传递对象参数)
2010/04/07 Javascript
JS实现随机化快速排序的实例代码
2013/08/01 Javascript
jquery简单实现滚动条下拉DIV固定在头部不动
2013/11/25 Javascript
获取中文字符串的实际长度代码
2014/06/05 Javascript
jQuery表格列宽可拖拽改变且兼容firfox
2014/09/03 Javascript
js使用递归解析xml
2014/12/12 Javascript
JavaScript获取页面中表单(form)数量的方法
2015/04/03 Javascript
bootstrap输入框组代码分享
2016/06/07 Javascript
javascript滚轮控制模拟滚动条
2016/10/19 Javascript
jQuery表格(Table)基本操作实例分析
2017/03/10 Javascript
checkbox:click事件触发span元素内容改变的方法
2017/09/11 Javascript
浅谈Angular路由复用策略
2017/10/04 Javascript
Three.js开发实现3D地图的实践过程总结
2017/11/20 Javascript
Angular4学习教程之HTML属性绑定的方法
2018/01/04 Javascript
Node.js中package.json中库的版本号(~和^)
2019/04/02 Javascript
新手快速入门微信小程序组件库 iView Weapp
2019/06/24 Javascript
npm 语义版本控制详解
2019/09/10 Javascript
vue 项目打包时样式及背景图片路径找不到的解决方式
2019/11/12 Javascript
小程序登录之支付宝授权的实现示例
2019/12/13 Javascript
微信小程序通过websocket实时语音识别的实现代码
2020/08/19 Javascript
Python算法输出1-9数组形成的结果为100的所有运算式
2017/11/03 Python
python特性语法之遍历、公共方法、引用
2018/08/08 Python
解决使用PyCharm时无法启动控制台的问题
2019/01/19 Python
tensorflow 查看梯度方式
2020/02/04 Python
PyQt5 控件字体样式等设置的实现
2020/05/13 Python
css3 box-sizing属性使用参考指南
2013/01/08 HTML / CSS
动态密码技术
2012/10/18 面试题
精彩的英文自荐信
2014/01/30 职场文书
2014年党员评议表自我评价
2014/09/27 职场文书
2015年幼儿园班主任个人工作总结
2015/10/22 职场文书
Java中使用Filter过滤器的方法
2021/06/28 Java/Android