我注意到,当运行连接到我们的许多服务器的脚本(实质上运行批处理命令)时,这些命令不会logging在用户的.sh_history或.bash_history文件中。 有没有一个地方,这是logging(假设脚本本身没有做logging,我不是在任何地方输出)?
我正在专门讨论AIX,但是我认为这个问题适用于所有的* nix风格。 谢谢!
运行交互式shell时修改。* _ history文件。 在你的情况下,一个远程服务器login到这个盒子并运行一个脚本并退出进程,但是不会调用一个交互式shell。 因此没有命令logging。
即使这不是一个远程服务器,想想下面的情况:
你在shell提示符下,连续运行这些命令
# ls -l # grep $(whoami) /etc/passwd # netstat -rn
当你回顾shell历史时,你会看到这些命令。 现在,将所有3个命令放到一个shell脚本中,并将其命名为“collect_data.sh”,chmod使其可执行,并通过发出#./collect_data.sh来执行它
当你回顾你的历史时,你看到了什么? 那三个命令还是只是./collect_data.sh ? 我把钱打到你的口袋里,那是后者。
当你调用一个shell脚本时,不pipe它是本地还是远程完成的,你都在创build一个子shell,其中运行的是命令。 这些shell是非交互式的,没有办法写入你的历史文件。 当然,这是缺乏重新编译你的shell可执行文件,以一种奇怪的方式来允许这样的活动,但为什么会有人这样做呢?
既然你问了这个问题,我的印象是,你正在想某些人在你不知情的情况下执行远程命令会发生什么险恶的事情。 如果是这种情况,你需要像tripwire之类的帮助,审计应用程序。 只要看看炮弹的历史,就算有命令存在,你也无法certificate任何事情。
希望这可以帮助