我正在使用 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 中的一个错误。有一个无效密钥不应阻止您使用其他密钥或密码。