在 Amazon Linux 2 EC2 实例上,已通过在cloud-init
启动脚本期间运行以下命令启用远程用户的密码身份验证:sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config
。因此,远程用户在登录 Amazon Linux 2 EC2 实例时不使用密钥对进行身份验证。其中一位用户someuser
需要能够sudo
在不输入密码的情况下运行命令。
Cloud-Init 启动脚本
完整的cloud-init
启动脚本如下:
/usr/sbin/useradd someuser
echo someuser:some-password | chpasswd
sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config
systemctl restart sshd
cat << 'EOF' > /etc/sudoers.d/someuser
someuser ALL=(ALL) NOPASSWD: ALL
EOF
问题
在上面的启动脚本中需要使用什么特定语法,cloud-init
以便能够在不重述密码的情况下someuser
运行sudo
命令,同时仍然能够someuser
使用给定的密码通过 Putty 远程登录?
错误信息
以下屏幕截图说明了错误消息:
切换错误
上述当前语法会导致someuser
由于缺少公钥而无法使用 Putty。但是,如果将上述 3 行命令注释掉,则可以删除该错误,以便someuser
能够登录,但无法执行命令:sudo
cat
#cat << 'EOF' > /etc/sudoers.d/someuser
#someuser ALL=(ALL) NOPASSWD: ALL
#EOF
问题出在最后发布的前三行中。如何重写、替换或扩充这 3 行,以使该用户能够升级到sudo
无需密码,同时仍保留 Putty 仅使用密码的能力?
答案1
从/etc/sudoers.d/README
:
它是受到推崇的使用维苏多,因为它会阻止在出现错误时进行更改,并且它还会处理新文件模式(第0440章)。
这意味着您的初始化脚本只需要对新创建的文件(/etc/sudoers.d/someuser)进行模式更改
chmod 0440 /etc/sudoers.d/someuser;
但你确实找到了解决方案这里更好 ,
echo 'someuser ALL=(ALL:ALL) ALL' | sudo EDITOR='tee -a' visudo
Visudo 这里将使用tee
而不是nano
附加新内容,而不需要相互作用,这就是我错过的魔法!