bash - kubectl exec命令未记录在pod的bash历史记录中

标签 bash shell kubernetes kubectl

有没有一种方法可以通过pod中的history命令记录kubectl exec命令?
我想通过监视历史命令来收集在容器上执行的所有命令。
例:kubectl exec podname -n namespace -c container -- bash -c "ls" ==>可以通过历史命令记录下来。

最佳答案

为了获得此行为的完整上下文,需要澄清两件事:
首先,kubectl execAPI-based的整洁 docker exec (警告:中级成员的故事)包装。
这很重要,因为这意味着它将使用Kubernetes API将您的命令中继到Docker。这意味着,在这种情况下,与 shell 相关的任何行为都直接与Docker如何在容器内实现命令执行相关,而与kubectl无关。
要记住的第二件事是命令本身:history,它是一个shell功能,而不是一个单独的二进制文件。
实现取决于所使用的 shell 程序,但是通常在 session 关闭后将命令历史记录写入历史文件之前,会将命令历史记录缓存在内存中。可以使用 history features“强制”执行此操作,但是可以根据shell的实现而有所不同,并且在使用docker exec命令时可能不是统一,可靠的方法。
考虑到这些因素,并且您的请求似乎旨在监视容器中执行的操作,也许更好的方法是使用Linux auditrecord commands executed by users
这不仅不依赖于上述要点,还包含writes logs to a file,这使您可以使用Kubernetes logging strategy来选择它们,并将它们导出到用作日志接收器的任何位置,从而便于进行后验。

关于bash - kubectl exec命令未记录在pod的bash历史记录中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63129399/

相关文章:

bash - 使用单个 session 在 shell/bash 中递归 FTP 目录列表(使用 cURL 或 ftp)

bash - 从 Bash 中的字符串中删除所有特殊字符

bash - MAC 10.10 优胜美地 - 终端 : - bash: [SomeCommand] command not found?

linux - 一对多合并文件

kubernetes - 在我的 VPC 中启用私有(private)访问时无法访问 EKS 终端节点

r - 从 R 脚本中提取函数的更好方法?

linux - 为什么父 bash 等待子 bash 死亡才执行 trap

shell - 在unix工作目录中查找特定目录

json - 如何修复将 yaml 转换为 JSON 的 YAML 文件中的错误?在此上下文中不允许映射值”

node.js - 如何访问在同一Pod中运行的NodeJS服务器?