我正在使用 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"
这可能可以在 Capistrano 之外和 SSH 本身中解决。设置 ~/.ssh/config 文件并为您的主机创建一个条目:
如果没有密钥,Capistrano 肯定会提示输入密码,我已经做到了。
看完代码
Net::SSH::KeyManager
,发现问题所在。在这台机器上,我有一个
id_rsa.pub
没有对应私钥的公钥id_rsa
(因为我使用id_rsa.ppk
的是密钥文件的 PuTTY 版本)。Net::SSH::KeyManager
但是,如果私有文件和公共文件都在目录中,则只会使用密钥。不幸的是,这也意味着如果它发现没有私钥的公钥(或没有公钥的私钥),它会立即抛出异常,而不是直接丢弃密钥。在我使用 PuTTYgen 将私钥从
.ppk
文件导出到标准 OpenSSH 文件(然后根据此答案修改该文件)后,我能够使用密码身份验证进行连接(不需要ssh/config 文件,如另一个答案所示).注意:我认为这是 OpenSSH gem 中的一个错误。拥有一个无效密钥不应阻止您使用不同的密钥或密码。