強制 Capistrano 詢問密碼

強制 Capistrano 詢問密碼

我正在使用 Capistrano 部署到新伺服器並遇到以下問題。目前,我無法將 SSH 金鑰新增至伺服器登入,因此我必須使用密碼驗證。但是,我確實在本機使用者帳戶的目錄中保存了另一台伺服器的金鑰.ssh

這是我嘗試登入時收到的錯誤:

C:\Web\WebApp1>cap deploy:setup
  * executing `deploy:setup'
  * executing "mkdir -p /home2/webapp1 /home2/webapp1/releases /home2/webapp1/shared /home2/webapp1/shared/system /home2/webapp1/shared/log /home2/webapp1/shared/pids"
    servers: ["myserver.example.com"]

connection failed for: myserver.example.com (OpenSSL::PKey::PKeyError: not a public key "C:/Users/MyAccount/.ssh/id_rsa.pub")

如何讓 Capistrano 忽略我擁有的金鑰的存在並讓我使用密碼登入?我嘗試添加set :password, "myp@ssw0rd"deploy.rb但沒有幫助。


更新

我按照@sysadmin1138的回答將以下內容新增到 ssh 設定檔:

HostName myserver.example.com
    PreferredAuthentications=password
    PubkeyAuthentication=no

現在,我收到錯誤:

connection failed for: myserver.example.com (Net::SSH::AuthenticationFailed: webappuser)

但它甚至不要求輸入密碼。當我嘗試在設定檔中指定密碼時,它仍然給出相同的錯誤。


以下是我的 Capistrano 配置的相關部分:

role :web, "myserver.example.com"

set :user, "webappuser"
default_run_options[:pty] = true # Allow Capistrano to prompt for passwords

set :deploy_to, "/home2/webapp1"

答案1

這可能可以在 Capistrano 之外和 SSH 本身中解決。設定 ~/.ssh/config 檔案並為您的主機建立一個條目:

HostName myserver.example.com
    PreferredAuthentications=keyboard-interactive
    PubkeyAuthentication=no

如果沒有密鑰,Capistrano 肯定會提示輸入密碼,我已經這樣做了。

答案2

讀完程式碼後Net::SSH::KeyManager,我發現了問題所在。

在這台機器上,我有一個名為id_rsa.pub 沒有對應的私鑰id_rsa(因為我使用的id_rsa.ppk是PuTTY版本的金鑰檔案)。

Net::SSH::KeyManager但是,只有在以下情況下才會使用密鑰:兩個都私有和公用文件都在該目錄中。不幸的是,這也意味著如果它找到一個沒有私鑰的公鑰(或沒有公鑰的私鑰),它將立即拋出異常,而不是僅僅丟棄該金鑰。

在我使用 PuTTYgen 將私鑰從.ppk檔案匯出到標準 OpenSSH 檔案(然後根據這個答案),我能夠使用密碼身份驗證進行連線(沒有需要 ssh/config 文件,如另一個答案所示)。


注意:我認為這是 OpenSSH gem 中的一個錯誤。擁有一個無效密鑰不應阻止您使用其他密鑰或密碼。

相關內容