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 解析XML文件
Apr 15 Python
python实现批量获取指定文件夹下的所有文件的厂商信息
Sep 28 Python
Python解决鸡兔同笼问题的方法
Dec 20 Python
Python中的if、else、elif语句用法简明讲解
Mar 11 Python
python3实现字符串操作的实例代码
Apr 16 Python
Python搭建代理IP池实现接口设置与整体调度
Oct 27 Python
Python 求数组局部最大值的实例
Nov 26 Python
解决Pytorch 加载训练好的模型 遇到的error问题
Jan 10 Python
Pytorch 定义MyDatasets实现多通道分别输入不同数据方式
Jan 15 Python
Python ini文件常用操作方法解析
Apr 26 Python
浅析Python 抽象工厂模式的优缺点
Jul 13 Python
python脚本定时发送邮件
Dec 22 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中的观察者模式
2010/03/24 PHP
PHP笔记之:基于面向对象设计的详解
2013/05/14 PHP
ThinkPHP分组下自定义标签库实例
2014/11/01 PHP
Yii框架中memcache用法实例
2014/12/03 PHP
PHP从FLV文件获取视频预览图的方法
2015/03/12 PHP
ZendFramework2连接数据库操作实例
2017/04/18 PHP
php使用环形链表解决约瑟夫问题完整示例
2018/08/07 PHP
window.js 主要包含了页面的一些操作
2009/12/23 Javascript
用Javascript实现Sleep暂停功能代码
2010/09/03 Javascript
javascript学习笔记(十八) 获得页面中的元素代码
2012/06/20 Javascript
Web Inspector:关于在 Sublime Text 中调试Js的介绍
2013/04/18 Javascript
JavaScript获取/更改文本框的值的实例代码
2013/08/02 Javascript
jquery插件jquery倒计时插件分享
2013/12/27 Javascript
Jquery对数组的操作技巧整理
2014/03/25 Javascript
JQuery 使用attr方法实现下拉列表选中
2014/10/13 Javascript
jquery的ajax提交form表单的两种方法小结(推荐)
2016/05/25 Javascript
通过原生JS实现为元素添加事件的方法
2016/11/23 Javascript
JavaScript 计算笛卡尔积实例详解
2016/12/02 Javascript
jQuery实现贪吃蛇小游戏(附源码下载)
2017/03/04 Javascript
jQuery UI 实例讲解 - 日期选择器(Datepicker)
2017/09/18 jQuery
vue项目打包后打开页面空白解决办法
2018/06/29 Javascript
Python机器学习k-近邻算法(K Nearest Neighbor)实例详解
2018/06/25 Python
Python文件循环写入行时防止覆盖的解决方法
2018/11/09 Python
python3+PyQt5 自定义窗口部件--使用窗口部件样式表的方法
2019/06/26 Python
django ListView的使用 ListView中获取url中的参数值方式
2020/03/27 Python
python如何用matplotlib创建三维图表
2021/01/26 Python
波兰家居和花园家具专家:4Home
2019/05/26 全球购物
中职生自我鉴定范文
2013/10/03 职场文书
大型车展策划方案
2014/02/01 职场文书
建设投标担保书
2014/05/13 职场文书
房产销售独家委托书范本
2014/10/01 职场文书
上诉状格式
2015/05/23 职场文书
催款律师函范文
2015/05/27 职场文书
中国合伙人观后感
2015/06/02 职场文书
如何Tomcat中使用ipv6地址
2022/05/06 Servers
Go语言编译原理之源码调试
2022/08/05 Golang