编写 Kerberos Ktutil 脚本以制作键表



我想制作一个脚本,该脚本将使用ktutil生成keytab。运行我想使用的脚本时[用户]$ script.sh 密码

#script.sh
echo "addent -password -p PRINCIPAL -k 1 -e aes256-cts-hmac-sha1-96" | ktutil

Ktutil 比需要一个密码,这里我想使用上面的 PASSWORD 参数。我将如何传递密码参数?

使用 GNU bash:

user="PRINCIPAL"
pass="topsecret"
printf "%b" "addent -password -p $user -k 1 -e aes256-cts-hmac-sha1-96n$passnwrite_kt $user.keytab" | ktutil
printf "%b" "read_kt $user.keytabnlist" | ktutil

输出:

插槽 KVNO 主体---- ---- ---------------------------------------------------------------------   1 1 PRINCIPAL@YOURDOMAIN

我遵循了赛勒斯接受的答案,但一直点击

"添加新条目时无法读取密码"正如Arrow_Raider所提到的

我能够通过使用下面稍微相似的结果来克服错误。

   {
    echo "addent -password -p ${user} -k 1 -e RC4-HMAC"
    sleep 1
    echo "${pass}"
    sleep 1
    echo "write_kt my.keytab"
    } |
    ktutil

要同时创建多个组织密钥表和默认的 hbase,pipe,hdfs 密钥表,您可以运行我刚刚创建的以下脚本:

#!/bin/bash
read -p "Please enter space-delimited list of ORGS to create: " NEW_ORGS
clear
#echo "#################  CREATE KEYTABS  ############################"
#echo ""
kdestroy
for i in $NEW_ORGS
do
     printf "%b" "addent -password -p ${i} -k 1 -e aes256-cts-hmac-sha1-96n${i}nwrite_kt ${i}.keytab" | ktutil
     printf "%b" "read_kt ${i}.keytabnlist" | ktutil
done
echo ""

if [ ! -e /home/eip/.keytabs/hbase.keytab ]
then
        printf "%b" "addent -password -p hbase -k 1 -e aes256-cts-hmac-sha1-96nhbasenwrite_kt hbase.keytab" | ktutil
        printf "%b" "read_kt hbase.keytabnlist" | ktutil
fi
exit 0
Python

中的一个版本

https://github.com/Tagar/stuff/blob/master/keytab.py

在 shell 中将密码管道传输到 ktutil 是不安全的,因为密码将在进程列表中可见。

由于这个 Python 脚本只是使用 pexpect 库与 ktutil 交互,因此可以使用 expect 实现与纯 shell 脚本相同的内容。

希望这有帮助。

使用 expect 将密码排除在进程列表之外:

expect << EOF
    set timeout 10
    spawn /usr/bin/ktutil
    expect {
       "ktutil: " { send "addent -password -p $PRINCIPAL -k 1 -e $METHODr" }
       timeout { puts "Timeout waiting for ktutil prompt."; exit 1; }
    }
    expect {
       -re "Password for \\S+: " { send "$PASSWORDr" }
       timeout { puts "Timeout waiting for password prompt."; exit 1; }
    }
    expect {
       "ktutil: " { send "wkt $KEYTAB_TMPr" }
    }
    expect {
       "ktutil: " { send "qr" }
    }
EOF

或者使用<<HERE文档提供stdin,但如果addent未能提示,则最终可能会在stdout中输入密码:

/usr/bin/ktutil <<EOF
addent -password -p $PRINCIPAL -k 1 -e $METHOD
$PASSWORD
wkt $KEYTAB_TMP
q
EOF

享受

import os, getpass
from subprocess import run, PIPE
import sys
userndomain, passwd, enctype = 'username@DOMAIN', 'secret', 'arcfour-hmac-md5'
input_load = f"""add_entry -password -p {userndomain} -k 1 -e {enctype}
{passwd}
write_kt {user}.keytab
quit
"""
p = run(['ktutil'], stdout=PIPE, input=input_load, encoding='ascii')

相关内容

  • 没有找到相关文章

最新更新