Ssh

如果密鑰被拒絕,如何讓 Ansible 使用密碼?

  • March 11, 2021

我的新伺服器實例配置為通過 ssh 使用密碼登錄 root。我希望我的 Ansible 劇本將其重新配置為使用密鑰,並在首次執行時禁用使用密碼的 root 登錄,所以我需要這樣的東西:

  • 嘗試使用密鑰登錄

  • 如果無法使用密鑰登錄:

    • 用密碼登錄
    • 將密鑰添加到授權密鑰
    • 使用密碼禁用root登錄
    • 可選擇使用密鑰重新連接
  • 做其他任務

我怎樣才能做到這一點?

編輯:要清楚,我不是在問如何添加密鑰或禁用 root,這只是為了上下文。我在問如果無法使用密鑰進行身份驗證,如何回退到密碼。使用--ask-passansible_ssh_pass設置,Ansible 甚至不會嘗試使用公鑰認證

您可以嘗試該PreferredAuthentications選項,將其設置為publickey,password. 預設按此順序包括這些,以及其他選項,因此 ansible 可能正在設置它。通過-o或客戶端添加它ssh_config可能會阻止這種情況。

您也許可以使用包裝腳本。例如,使用 this inkey_or_password.shpass.sh提供密碼的 a,執行bash key_or_password.sh root@host將嘗試使用 publickey,然後是非互動式密碼登錄。

export DISPLAY=dummy:0
export SSH_ASKPASS=$PWD/pass.sh
exec setsid ssh -v -o 'PreferredAuthentications publickey,password' "$@"

日誌指示哪個方法成功,例如

debug1: Authentication succeeded (publickey).

引用自:https://serverfault.com/questions/550561