当我创建新的 Ubuntu 12.10 实例时,我通常通过手动 SSHing 到机器并编辑 sudoers 以将 NOPASSWD 放在默认用户(例如 ec2-user、azureuser 等)上来引导它们。然后我的安装脚本可以 sudo 各种命令而无需提供密码。
我对密码没有任何意见。只是当我尝试使用 bash 脚本通过 SSH 执行基于密码的 sudo 时,sudo 会抱怨没有 tty(“sudo:没有 tty 并且没有指定 askpass 程序”)。
此外,我需要它完全自动化——它不需要有人手动输入密码。
几个问题:
1) 这里的方法是否正确?特别是,在这里使用 NOPASSWD 是不是一个坏主意?我假设保护默认用户的 SSH 私钥在这里是可以的——只需将此帐户视为 root 帐户即可。
2)如果这是错误的,那么我该如何克服“没有 tty 存在”的反对意见,而不必手动输入密码?
3) 如果 NOPASSWD 没问题,那么我应该如何自动化 sudoers 编辑?看来,如果只是为了 sudo visudo 命令,我需要使用密码。
我想我可以手动完成所有工作,然后创建一个新图像,但如果可能的话,我宁愿保留基础图像,然后编写脚本。
答案1
只是一个想法,但为什么不像 一样通过基于密钥的身份验证允许通过 SSH 进行 root 访问PermitRootLogin without-password
。
如果您需要强大的安全设置,那么在完成基本安装后,您当然可以解决这个问题。但在我看来,在机器设置的初始引导期间,对 root 帐户设置进行基于密钥的访问的风险极小。
3) 如果 NOPASSWD 没问题,那么我应该如何自动化 sudoers 编辑?看来,如果只是为了 sudo visudo 命令,我需要使用密码。
Ubuntu 支持该includedir /etc/sudoers.d
选项。因此您的初始设置非常简单。就像这样。
echo "adminuser ALL=NOPASSWD: ALL" > /etc/sudoers.d/boostrap
chmod 0400 /etc/sudoers.d/boostrap