我正在使用 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 中的一個錯誤。擁有一個無效密鑰不應阻止您使用其他密鑰或密碼。