斷開連接:不支持使用密碼進行身份驗證的 sudo 使用者的身份驗證方法
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 將使用
tee
insteed ofnano
來添加新內容而無需互動,這就是我錯過的魔力!