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

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

安全意识强的人通常会建议在 Linux 机器上禁用 ssh 作为 root 用户。我的问题是:

假设您通常编写大量脚本,这些脚本通过 ssh 连接到大量 Linux 计算机并执行各种 root 级任务。如果您以 root 身份禁用 ssh,那么您如何进行需要 root 权限的日常维护?

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

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

只是在这里沉思。想得到社区的反馈。我正在寻找一种相对安全的方式来 ssh 到 Linux 机器并执行 root 级任务。

答案1

您可以做很多事情。以下是部分列表:

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

  • 使用诸如 MCollective(与 puppet 相关但不完全是 puppet 的一部分)之类的系统同时在大量机器上远程运行命令。

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

  • 仅指定/etc/sudoers无需密码即可运行的特定脚本;其他任何脚本都需要密码。

答案2

如果您定期“编写脚本通过 ssh 以 root 身份运行任务”,那么您应该认真考虑设置 Puppet/Chef/CFEngine/Ansible/Salt/Rundeck 。

答案3

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

使用 sudo 而不是以 root 身份直接 ssh 的一个好处是:a) 您不必与多个人共享 root 密码 b) 可以阅读日志以查明谁使用了 sudo。如果您是独自一人,这可能就没有必要,但情况可能会发生变化。

答案4

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

相关内容