题 在Linux机器上以root身份禁用ssh以及编写脚本的挑战


这是安全意识的人在Linux机器上以root身份禁用ssh的常见建议。我的问题是:

假设您通常会编写大量脚本,这些脚本会出现在大量Linux机器上并执行各种根级任务。如果以root身份禁用ssh,那么如何进行需要root权限的日常维护?

当然,sudo是一个选项,但是每次运行命令时都必须输入密码。如果你的脚本执行各种任务怎么办?如果必须针对大量主机运行该脚本,该怎么办?

当然,您可以设置NOPASSWD参数,但这不是安全风险吗?

只是在这里思考。想得到社区的反馈。我正在寻找一种相对安全的方法来ssh到Linux盒子并执行根级任务。


4
2018-03-12 21:43




我认为标签 远程执行 很适合你的问题,但你已经有五个标签。 - Nic


答案:


你可以做很多事情。这是部分清单:

  • 如果脚本确实必须定期运行,请将其放在crontab中,然后手动停止运行。

  • 使用诸如MCollective之类的系统(与木偶相关但不完全相同)可以同时在大量机器上远程运行命令。

  • 使用ssh密钥允许来自特定用户的root登录。这会带来审计风险,因为登录的人可能不会被记录,因此它实际上只适用于非常小的安装。

  • /etc/sudoers 仅指定可以在没有密码的情况下运行的特定脚本;其他任何东西都需要密码。


6
2018-03-12 21:47



小点:Mcollective由Puppetlabs编写和维护,但它独立于Pup​​pet工作。无需运行Puppet基础架构即可使用Mcollective。当然,两者合得很好。 - daff


如果您经常“编写脚本以在ssh上以root身份运行任务”,则应认真考虑设置Puppet / Chef / CFEngine / Ansible / Salt / Rundeck。


4
2018-03-12 21:53



和Bcfg2有人吗? - 0xC0000022L


您不必每次都输入密码:如果您在相对较短的时间内运行sudo,则无需键入密码。如果需要更长的任务,则可以运行 sudo -s 得到一个root shell。

使用sudo作为root的直接ssh的好处是:a)你不必在多人之间共享root密码b)可以读取日志以找出sudo'ed。只要你一个人,这可能就没有必要,但这可能会改变。


2
2018-03-12 21:46



我喜欢这个主意。我能够创建一个脚本,将sudo -s传递给/ bin / bash,然后使用heredoc列出要在盒子上以root身份运行的命令。这非常好。 - beaconfield


如果您需要执行一些特定命令,则可以设置sudo(通过 /etc/sudoers 文件)允许特定的用户(和/或组)列表在没有密码的情况下执行这些命令。


2
2018-03-12 21:48