Sudo

斷開連接:不支持使用密碼進行身份驗證的 sudo 使用者的身份驗證方法

  • June 18, 2020

cloud-init在 Amazon Linux 2 EC2 實例上,已通過在啟動腳本期間執行以下命令啟用來自遠端使用者的密碼身份驗證: 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。但是,可以刪除錯誤,以便someuser能夠登錄,但不能執行sudo命令,如果 3 行cat命令從上面註釋掉:

 #cat << 'EOF' > /etc/sudoers.d/someuser   
 #someuser ALL=(ALL) NOPASSWD: ALL   
 #EOF   

問題出在最後發布的前 3 行中。如何重寫、替換或擴充這 3 行程式碼以使該使用者sudo無需密碼即可升級,同時仍保留 Putty 僅使用密碼的能力?

來自/etc/sudoers.d/README

建議使用visudo ,因為它會阻止在錯誤的情況下進行更改,並且它還會處理新的文件模式(0440)。

這意味著您的 init 腳本只需要對新創建的文件 (/etc/sudoers.d/someuser) 進行模式更改

chmod 0440 /etc/sudoers.d/someuser;

但是你在這裡找到的解決方案更好,

echo 'someuser ALL=(ALL:ALL) ALL' | sudo EDITOR='tee -a' visudo

這裡的 Visudo 將使用teeinsteed ofnano來添加新內容而無需互動,這就是我錯過的魔力!

引用自:https://unix.stackexchange.com/questions/593519