我能够从我的python脚本中kinit
进行以下操作:
import subprocess
subprocess.Popen(["cp", config_file_path, "/etc/"]).wait(timeout=10)
subprocess.Popen(["kinit", "-kt", keytab_file_path, principal]).wait(timeout=10)
is_kinit_done = (subprocess.Popen(["klist"]).wait(timeout=10) == 0)
print("is_kinit_done: ", is_kinit_done)
并从HDFS中读取文件:
kerberos_client = KerberosClient(url=url, session=session, mutual_auth='OPTIONAL', principal=principal)
with ds_client.read('/tmp/export.csv', encoding='utf-8') as reader:
df = pd.read_csv(reader, index_col=0)
print(df.head(10))
但是这种方法存在以下问题:
krb5.conf
文件复制到/etc/
目录。KRB5_CONFIG
环境变量来覆盖默认的Kerberos配置文件路径。KEYTAB
和KRB5.CONF
文件要管理。有没有一种方法可以传递krb5.conf
文件,例如init
命令中的keytab文件
kinit -kt /path/to/darshan.keytab -conf /path/to/krb5.conf user@PRINCIPAL.NET
在JAVA中,我们可以像下面这样设置配置: https://community.cloudera.com/t5/Community-Articles/A-Secure-HDFS-Client-Example/ta-p/247424
com.sun.security.jgss.krb5.initiate {
com.sun.security.auth.module.Krb5LoginModule required
doNotPrompt=true
principal="hdfs-user@MYCORP.NET"
useKeyTab=true
keyTab="/home/hdfs-user/hdfs-user.keytab"
storeKey=true;
};
但是我没有在Python中找到任何类似的东西。我应该如何在Python中实现?