如何自动化 ktutil 立即列出密钥表条目?

如何自动化 ktutil 立即列出密钥表条目?

我在 Linux 上经常使用 MIT ktutil,并且厌倦了使用以下序列,即使命令快捷方式和文件名补全可以提供帮助:

ktutil
rkt my.keytab
l

没有办法从 shell 中以“一行”方式获得相同的结果吗?是使用别名、函数还是仅使用其他工具?

答案1

我总是使用klist相反 来列出 keytab 文件的内容,而不是ktutil.

示例 #1 - klist

$ klist -kt /etc/somedir/conf/some.keytab
Keytab name: FILE:/etc/somedir/conf/some.keytab
KVNO Timestamp         Principal
---- ----------------- --------------------------------------------------------
   5 08/25/15 11:18:35 app/[email protected]
   5 08/25/15 11:18:35 app/[email protected]
   5 08/25/15 11:18:35 app/[email protected]
   7 08/25/15 11:18:35 app/[email protected]
...

示例 #2 - 进程替换

您还可以使用重定向到ktutil的 STDIN,如下所示:

$ ktutil < <(echo -e "rkt /etc/somedir/conf/some.keytab\nlist")
ktutil:  rkt /etc/somedir/conf/some.keytab
ktutil:  list
slot KVNO Principal
---- ---- ---------------------------------------------------------------------
   1    5 app/[email protected]
   2    5 app/[email protected]
   3    5 app/[email protected]
   4    7 app/[email protected]

答案2

我找到了一种使用 shell 函数的方法,猜测ktutil可能会接受来自 stdin 的命令:

rkt() { echo -e "read_kt $1\nlist\nquit" | ktutil | grep -v "^ktutil:"; }

并调用rkt my.keytab

只要文件名不包含空格即可工作。

答案3

这可以帮助合并 2 个 keytab,使用标准输入在 shell 脚本中使用

ktutil < <(echo -e "rkt/var/tmp/keytab/merge/krb5.keytab.server.keytab1\n
rkt /var/tmp/keytab/merge/krb5.keytab.server.keytab1\n
wkt /var/tmp/keytab/merge/krb5.keytab\n
quit")
ktutil:  rkt /var/tmp/keytab/merge/krb5.keytab.server.keytab1
ktutil:  rkt /var/tmp/keytab/merge/krb5.keytab.server.keytab1
ktutil:  wkt /var/tmp/keytab/merge/krb5.keytab
ktutil:  quit

答案4

其他答案提供了一种运行一系列 ktutil 命令然后退出的方法。

执行一系列命令然后获得具有全行编辑功能的交互式会话更加困难。

您可以使用该程序的脚本来实现此目的expect,该脚本应该可以从您的发行版安装。

#!/usr/bin/env expect -f
spawn ktutil
send "read_kt [lrange $argv 0 1]\nl\n"
set CTRLZ \032
interact {
 -reset $CTRLZ {exec kill -STOP [pid]}
 \003 exit
}

保存为myktutil您的某个位置PATH并使其可执行chmod +x

然后你可以这样做,例如:

$ myktutil foo.keytab

这将读取密钥表文件foo.keytab,列出密钥,然后将您带入交互式命令。

扩展脚本来完成重要的事情需要熟悉expectTcl 语言。

相关内容