温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。

Fayson的github:

https://github.com/fayson/cdhproject

提示:代码块部分可以左右滑动查看噢

1

文档编写目的

在前面的文章《CDH5.15.0-同一OS用户下不同Kerberos用户执行脚本Principal串掉问题分析》中Fayson主要介绍了同一个OS用户下并发调度Python脚本时会导致Principal账号串掉,通过在Python代码中指定KRB5CCNAME环境变量解决问题,本篇文章Fayson主要介绍通过同一OS用户下并发调度Shell脚本进行不同用户Kerberos认证时Principal账号串掉问题分析及解决。

  • 测试环境

1.RedHat7.3

2.CDH5.16.1

2

问题描述

Fayson通过一段简单的shell脚本示例代码说明问题,在代码中执行kinit命令初始化Kerberos信息,通过hadoop命令去统计各自用户目录下子目录大小,具体代码如下:

a_fayson.sh脚本内容如下:

# more a_fayson.sh 

a_cdhadmin.sh脚本内容如下:

# more a_cdhadmin.sh 

在同一个用户的OS下创建a_fayson.sh和a_cdhadmin.sh的两个shell脚本,分别使用fayson和cdhadmin用户初始化Kerberos信息。

在crontab中添加两个定时任务,使两个任务同时并发

在生成的a_fayson.log和a_cdhadmin.log中可以看到两个脚本会获取到对方的Principal信息

通过两个脚本输出的日志可以看到a_fayson.log中kinit的是fayson用户,但在执行hadoop命令的时候显示的为cdhadmin,此时Principal账号串掉导致命令执行失败。

3

问题分析

1.首先在客户端进行Kinit操作后,默认的Ticket Cache是存储在tmp/krb5cc_0临时文件中(Ticket cache文件是根据当前用户的uid在/tmp目录下生成一个以krb5cc_开头的临时文件)。

2.由于上述的两个脚本是在同一个OS用户下,所以两个不同的Kerberos用户在进行Kinit操作后都会覆盖/tmp/krb5cc_{uid}文件

根据上述两点基本可以定位问题的原因,因为Ticket cache文件被覆盖导致Kerberos的票据信息串掉。由于两个shell脚本使用了同一份Ticket cache文件导致Kerberos的票据信息串掉。

4

解决方法一

将脚本进行简单的修改,在脚本中指定KRB5CCNAME的环境变量,具体修改在shell脚本中增加如下内容:

a_fayson.sh脚本内容如下:

# more a_fayson.sh 

a_cdhadmin.sh脚本内容如下:

# more a_cdhadmin.sh 

将脚本进行如上修改后,再次运行发现问题解决,未出现Principal串掉的问题

5

解决方法二

在脚本中使用了C shell(csh)命令,C shell是一个交互式命令解释器和一种编程语言,采用的语法类型于C编程语言。在C shell中我们可以指定KRB5CCNAME环境变量,具体实现方式如下:

1.在OS命令行执行如下命令安装csh命令

# yum -y install csh

2.修改上述的两个脚本,具体修改如下:

a.sh脚本内容如下:

# more a.sh 

b.sh脚本内容如下:

# more b.sh 

3.使用crontab定义两个并发的定时任务

/1 * * * * source /etc/profile & csh /root/shell-test/a.sh 

4.通过修改上述两个脚本,在两个脚本中都指定KRB5CCNAME环境变量为不同的文件,再次进行测试未发现两个应用的票据信息串掉的问题。

6

总结

1.默认Ticket cache文件的生成是根据用户的uid在/tmp目录下生成一个以krb5cc_开头的缓存文件。

2.如果在同一个OS用户下使用不同的Kerberos用户进行kinit会覆盖/tmp/krb5cc_{uid}文件,从而导致应用中的票据信息串掉。

3.可以通过在shell脚本中为不同的Kerberos用户指定一个独立的Ticket cache文件,以防止票据信息串掉。

4.本篇文章中主要讲述了shell脚本的两种实现方式一种在脚本中使用export的方式指定环境变量,一种使用C shell命令通过setenv方式指定。脚本中的环境变量这里可以理解为局部环境变量,只在当前脚本内有效。

提示:代码块部分可以左右滑动查看噢

为天地立心,为生民立命,为往圣继绝学,为万世开太平。

温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。

推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。

原创文章,欢迎转载,转载请注明:转载自微信公众号Hadoop实操

csh shell_06145.16.1同一OS用户并行Shell脚本中kinit不同的Principal串掉问题分析相关推荐

  1. 0614-5.16.1-同一OS用户并行Shell脚本中kinit不同的Principal串掉问题分析

    Fayson的github: https://github.com/fayson/cdhproject 推荐关注微信公众号:"Hadoop实操",ID:gh_c4c535955d0 ...

  2. csh shell_0614-同一OS用户并行Shell脚本中kinit不同的Principal串掉问题

    1.文档编写目的 在前面的文章<0552-5.15.0-同一OS用户不同Kerberos用户执行脚本Principal串掉>中Fayson主要介绍了同一个OS用户下并发调度Python脚本 ...

  3. shell脚本中实现远程和其他用户的子shell执行

    shell脚本中实现远程和其他用户的子shell执行 文章目录 shell脚本中实现远程和其他用户的子shell执行 shell远程用户执行脚本 简单执行-单行形式的命令 脚本执行-对于命令行太多的采 ...

  4. linux脚本用户输入,如何在Linux shell脚本中提示用户输入

    本篇文章给大家介绍关于如何在Linux shell脚本中提示用户输入?下面来看具体的内容. 我们首先来看一下命令# read var # read -s "Waiting for input ...

  5. 如何在脚本中输入密码 linux,如何在shell脚本中为用户分配密码

    本篇文章给大家介绍的内容是关于如何在shell脚本中为用户分配密码,下面我们来看具体的内容. 我们先来看一下命令echo | passwd –stdin 例如: 使用以下命令更改shell脚本中用户j ...

  6. [Python陷阱]os.system调用shell脚本获取返回值

    当前有shell个脚本/tmp/test.sh,内容如下: #!/bin/bash exit 11 使用Python的os.system调用,获取返回值是: >>> ret=os.s ...

  7. linux脚本外输入参数,shell 脚本中关于用户输入参数的处理

    1.命令行参数 向shell脚本传递数据的最基本方式是使用命令行参数. (1) 读取参数 读取输入的参数的变量为位置参数,位置参数通过标准数字表示, 其中$0为程序名称,$1为第一个参数,$2为第二个 ...

  8. linux进程号转换成16进制,Shell脚本中不同进制数据转换的例子(二进制、八进制、十六进制、base64)...

    shell可以在不调用第3方命令,表示不同进制数据.这里总结以下表示方法.shell 脚本默认数值是由10 进制数处理,除非这个数字某种特殊的标记法或前缀开头. 才可以表示其它进制类型数值.如:以 0 ...

  9. shell脚本编程之处理用户输入

    技术交流QQ群:1027579432,欢迎你的加入! 本教程使用Linux发行版Centos7.0系统,请您注意~ 1.命令行参数 bash shell提供了一些不同的方法来从用户处获得数据,包括命令 ...

最新文章

  1. python网络编程视频教程_Java网络开发视频教程 – 一站式学习Java网络编程视频教程 全面理解BIO(无密)...
  2. html语义化练习易牛课堂代码
  3. c++学习笔记之多文件操作
  4. Hopping Rabbit
  5. mysql int类型的长度值
  6. CFD分析过程(CFD Analysis Process)
  7. Mybatis使用的9种设计模式,真是太有用了
  8. 软件版本命名规范及各阶段说明
  9. Hadoop源代码分析之Configuration
  10. 抓取网址中的信息(需要解码的)
  11. USACO1.1.1 - PROB Your Ride Is Here
  12. AcWing 854. Floyd求最短路(模板)
  13. Mongo散记--聚合(aggregation)amp; 查询(Query)
  14. python线程池如何调度,python线程池控制
  15. qpython3.7.4版本下载_QPython3app下载
  16. 我们公司使用了 5 年的系统限流方案 ,从实现到部署实战详解,稳的一B
  17. 什么是高内聚与低耦合?
  18. cesium学习笔记---经纬网
  19. 区别:千赫kHz、兆赫MHz、吉赫GHz、太赫THz、拍赫PHz、艾赫EHz每两级之间的换算以及之间的关系
  20. mysql查询选修课的人数_mysql查询语句练习

热门文章

  1. 有 1、2、3、4 四个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
  2. fect:基于面板数据的因果推断(上)
  3. MyISAM与InnoDB存储引擎
  4. 墨珩科技超衡联盟链通过中国赛宝实验室测试
  5. java使用poi实现excel保护工作表实例代码(支持.xls和.xlsx)
  6. 动态加载Animator和AnimatorController
  7. Linux下Oracle 11g安装(2)—— 系统准备篇
  8. Sublime的实用汉化方法
  9. 「信号机制」Python信号处理—signal模块
  10. 过程计算机系统 pcs,过程控制系统(PCS)