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

 更新时间:2020年12月14日 09:07:52   作者:源神  
这篇文章主要介绍了Python实现Kerberos用户的增删改查操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

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不要改

运行效果

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

相关文章

  • scrapy处理python爬虫调度详解

    scrapy处理python爬虫调度详解

    在本篇文章里小编给大家整理的是一篇关于scrapy处理python爬虫调度的相关内容,有兴趣的朋友们学习下。
    2020-11-11
  • Python笔记(叁)继续学习

    Python笔记(叁)继续学习

    最近时间挤来挤去,看英文的文档,顺便熟悉英语,需要反复好几遍,才能做点笔记。读的是《Beginning.Python.From.Novice.to.Professional》,大家可以下载看一下
    2012-10-10
  • Python批量查询关键词微信指数实例方法

    Python批量查询关键词微信指数实例方法

    在本篇文章中小编给大家整理的是关于Python批量查询关键词微信指数实例方法以及相关代码,需要的朋友们可以跟着学习下。
    2019-06-06
  • Python中用Decorator来简化元编程的教程

    Python中用Decorator来简化元编程的教程

    这篇文章主要介绍了Python中用Decorator来简化元编程的教程,来自于IBM官方开发者技术文档,需要的朋友可以参考下
    2015-04-04
  • Python 整行读取文本方法并去掉readlines换行\n操作

    Python 整行读取文本方法并去掉readlines换行\n操作

    这篇文章主要介绍了Python 整行读取文本方法并去掉readlines换行\n操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • 一文带你了解Python枚举类enum的使用

    一文带你了解Python枚举类enum的使用

    枚举是与多个唯一常量绑定的一组符号,因为枚举表示的是常量,建议枚举成员名用大写 IntEnum 便于进行系统交互。本文将通过一些示例代码讲解Python枚举类的使用,需要的可以参考一下
    2022-10-10
  • 对Python中range()函数和list的比较

    对Python中range()函数和list的比较

    下面小编就为大家分享一篇对Python中range()函数和list的比较,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • python使用urllib2提交http post请求的方法

    python使用urllib2提交http post请求的方法

    这篇文章主要介绍了python使用urllib2提交http post请求的方法,涉及Python使用urllib2模块的相关技巧,需要的朋友可以参考下
    2015-05-05
  • Python读取ini文件、操作mysql、发送邮件实例

    Python读取ini文件、操作mysql、发送邮件实例

    这篇文章主要介绍了Python读取ini文件、操作mysql、发送邮件实例,本文重点在Mysql操作的讲解上,包含查询、插入、更新和删除操作,需要的朋友可以参考下
    2015-01-01
  • scrapy实践之翻页爬取的实现

    scrapy实践之翻页爬取的实现

    这篇文章主要介绍了scrapy实践之翻页爬取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01

最新评论