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每天必学之bytes字节
Jan 28 Python
轻松实现TensorFlow微信跳一跳的AI
Jan 05 Python
python中实现将多个print输出合成一个数组
Apr 19 Python
Python中xml和json格式相互转换操作示例
Dec 05 Python
python实现一个简单的ping工具方法
Jan 31 Python
详解python项目实战:模拟登陆CSDN
Apr 04 Python
浅析Python+OpenCV使用摄像头追踪人脸面部血液变化实现脉搏评估
Oct 17 Python
python实现的分层随机抽样案例
Feb 25 Python
Tensorflow tf.tile()的用法实例分析
May 22 Python
Python存储读取HDF5文件代码解析
Nov 25 Python
Selenium执行完毕未关闭chromedriver/geckodriver进程的解决办法(java版+python版)
Dec 07 Python
Python实现网络聊天室的示例代码(支持多人聊天与私聊)
Jan 27 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 Image Resize图片大小调整的函数代码
2011/01/17 PHP
php中用加号与用array_merge合并数组的区别深入分析
2013/06/03 PHP
PHP表单数据写入MySQL数据库的代码
2016/05/31 PHP
thinkPHP多域名情况下使用memcache方式共享session数据的实现方法
2016/07/21 PHP
浅谈PHP中的错误处理和异常处理
2017/02/04 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
2017/12/25 PHP
php 命名空间(namespace)原理与用法实例小结
2019/11/13 PHP
自定义一个jquery插件[鼠标悬浮时候 出现说明label]
2011/06/27 Javascript
关于JS判断图片是否加载完成且获取图片宽度的方法
2013/04/09 Javascript
js css后面所带参数含义介绍
2013/08/18 Javascript
解析prototype,JQuery中跳出each循环的方法
2013/12/12 Javascript
JavaScript实现的in_array函数
2014/08/27 Javascript
jQuery实现向下滑出的平滑下拉菜单效果
2015/08/21 Javascript
jquery实现的动态回到顶部特效代码
2015/10/28 Javascript
jquery+css实现动感的图片切换效果
2015/11/25 Javascript
浅谈JavaScript中数组的增删改查
2016/06/20 Javascript
jquery表格datatables实例解析 直接加载和延迟加载
2016/08/12 Javascript
JavaScript中最常用的10种代码简写技巧总结
2017/06/28 Javascript
jQuery实现注册会员时密码强度提示信息功能示例
2017/09/05 jQuery
深入理解ES7的async/await的用法
2017/09/09 Javascript
微信小程序progress组件使用详解
2018/01/31 Javascript
jQuery实现获取form表单内容及绑定数据到form表单操作分析
2018/07/03 jQuery
vue 权限认证token的实现方法
2018/07/17 Javascript
[03:44]2014DOTA2国际邀请赛 71专访:DK战队赛前讨论视频遭泄露
2014/07/13 DOTA
[01:59]深扒TI7聊天轮盘语音出处 1
2017/05/11 DOTA
Python中针对函数处理的特殊方法
2014/03/06 Python
初步剖析C语言编程中的结构体
2016/01/16 Python
python 数据清洗之数据合并、转换、过滤、排序
2017/02/12 Python
安装Python的教程-Windows
2017/07/22 Python
python实现简易动态时钟
2018/11/19 Python
幼儿园毕业典礼主持词
2014/03/21 职场文书
学校食堂食品安全承诺书
2015/04/29 职场文书
志愿者服务活动总结报告
2015/05/06 职场文书
《角的初步认识》教学反思
2016/02/17 职场文书
智慧人生:永远不需要向任何人解释你自己
2019/08/20 职场文书
Vue如何实现组件间通信
2021/05/15 Vue.js