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 if not in 多条件判断代码
Sep 21 Python
20招让你的Python飞起来!
Sep 27 Python
python常见的格式化输出小结
Dec 15 Python
查看django执行的sql语句及消耗时间的两种方法
May 29 Python
详解Python如何生成词云的方法
Jun 01 Python
Django 实现购物车功能的示例代码
Oct 08 Python
Python之使用adb shell命令启动应用的方法详解
Jan 07 Python
Python爬虫学习之翻译小程序
Jul 30 Python
numpy:找到指定元素的索引示例
Nov 26 Python
Django框架配置mysql数据库实现过程
Apr 22 Python
python GUI模拟实现计算器
Jun 22 Python
Manjaro、pip、conda更换国内源的方法
Nov 17 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
typecho插件编写教程(一):Hello World
2015/05/28 PHP
浅谈COOKIE和SESSION区别
2015/07/19 PHP
php mysqli查询语句返回值类型实例分析
2016/06/29 PHP
php投票系统之增加与删除投票(管理员篇)
2016/07/01 PHP
PHP实现单文件、多个单文件、多文件上传函数的封装示例
2019/09/02 PHP
PHP正则之正向预查与反向预查讲解与实例
2020/04/06 PHP
javascript常见用法总结
2014/05/22 Javascript
每天一篇javascript学习小结(面向对象编程)
2015/11/20 Javascript
深入浅析react native es6语法
2015/12/09 Javascript
JavaScript缓冲运动实现方法(2则示例)
2016/01/08 Javascript
JS组件Bootstrap实现弹出框效果代码
2016/04/26 Javascript
JQuery EasyUI学习教程之datagrid 添加、修改、删除操作
2016/07/09 Javascript
JavaScript正则表达式函数总结(常用)
2018/02/22 Javascript
[02:56]DOTA2上海特锦赛小组赛解说FreeAgain采访花絮
2016/02/27 DOTA
python定时执行指定函数的方法
2015/05/27 Python
Python自定义进程池实例分析【生产者、消费者模型问题】
2016/09/19 Python
python多线程socket编程之多客户端接入
2017/09/12 Python
Python模拟浏览器上传文件脚本的方法(Multipart/form-data格式)
2018/10/22 Python
python基于gevent实现并发下载器代码实例
2019/11/01 Python
利用python中集合的唯一性实现去重
2020/02/11 Python
python GUI库图形界面开发之PyQt5滑块条控件QSlider详细使用方法与实例
2020/02/28 Python
Django框架获取form表单数据方式总结
2020/04/22 Python
Python新手学习函数默认参数设置
2020/06/03 Python
keras在构建LSTM模型时对变长序列的处理操作
2020/06/29 Python
Python暴力破解Mysql数据的示例
2020/11/09 Python
俄罗斯女装店:12storeez
2019/10/25 全球购物
The Outnet亚太地区:折扣设计师时装店
2019/12/05 全球购物
枚举和一组预处理的#define有什么不同
2016/09/21 面试题
新锐科技Java程序员面试题
2016/07/25 面试题
班长自荐书范文
2014/02/11 职场文书
婚前协议书范本
2014/04/15 职场文书
工作证明范本(2篇)
2014/09/14 职场文书
python tkinter模块的简单使用
2021/04/07 Python
Python Django 后台管理之后台模型属性详解
2021/04/25 Python
css height属性中的calc方法详解
2021/06/03 HTML / CSS
vue代码分块和懒加载非必要资源文件
2022/04/11 Vue.js