使用 keytab 而不将其写入磁盘的 Bash 脚本

Posted

技术标签:

【中文标题】使用 keytab 而不将其写入磁盘的 Bash 脚本【英文标题】:Bash script to use keytab without writing it to disk 【发布时间】:2016-06-09 15:54:41 【问题描述】:

我有一个正在解密的加密密钥表,将其写入磁盘,然后与 kinit 一起使用。

我想要做的是能够在不将其写入磁盘的情况下使用密钥表,只需解密并直接与 kinit 一起使用。到目前为止,这是我的脚本,但我得到了 kinit:获取初始凭据时未找到密钥表文件“/etc/krb5.keytab”

#!/bin/bash
#$KEYTAB = gpg --decrypt keytab.gpg
$KEYTAB=keytab
kinit -k $KEYTAB principal@realm

我也在尝试使用管道

gpg --decrypt keytab.gpg | kinit -k principal@realm

但这也不行。

【问题讨论】:

嗯,在我的 kinit 手册页中,选项 -k 描述为:“与 --keytab 相同,但使用默认的 keytab 名称(通常为 FILE:/etc/krb5.keytab )。”您可能想尝试gpg --decrypt keytab.gpg | .kinit -k -t - ...,但我不太有信心,因为这可以解决问题。 由于评论编辑只允许 5 分钟,我在这里修改:建议用- 替换文件名,并通过-S ... 之类的方式将principal@realm 信息放入流程中选项。 $KEYTAB=keytab 应该是KEYTAB=keytab @chepner 非常适合未加密的 :) 我已经尝试使用KEYTAB="$(gpg --decrypt keytab.gpg)" 进行加密,但无法通过 【参考方案1】:

这是不可能的,kinit 需要从文件中读取 keytab,不能传递变量。

http://web.mit.edu/kerberos/krb5-1.12/doc/user/user_commands/kinit.html

【讨论】:

您担心什么:完成 kinit 后文件没有保留在磁盘介质上? 相反,它被写入磁盘。目的是将其作为变量传递,而不是写入磁盘。【参考方案2】:

只要 kinit 只是读取文件,使用 /dev/stdin

gpg --decrypt keytab.gpg | kinit -k /dev/stdin principal@realm

另一个程序的另一个例子

echo foo | cat /dev/stdin

【讨论】:

它没有要求我提供密码来解密 keytab.gpg... 而且它似乎不会像 echo keytab | kinit -k /dev/stdin principal@realm 或 echo keytab | kinit -k -t /dev/stdin principal@realm 不起作用 我不知道为什么。我创建了一个 gpg 文件,下面要求输入密码:gpg -d x.gpg | cat /dev/stdin 我试了几次,我得到的最远的是kinit: Keytab contains no suitable keys for principal@realm while getting initial credentialgpg --decrypt keytab.gpg | kinit -k -t /dev/stdin principal@realm

以上是关于使用 keytab 而不将其写入磁盘的 Bash 脚本的主要内容,如果未能解决你的问题,请参考以下文章

我可以使用 Text::CSV_XS 解析 csv 格式的字符串而不将其写入磁盘吗?

如何播放音频样本而不将其写入文件?

如何在python中生成文件而不将其保存到磁盘?

生成pdf而不将其保存到磁盘然后将其显示给浏览器

生成 MIDI 文件并播放它而不将其保存到磁盘

将远程文件放入hadoop而不将其复制到本地磁盘